@fractary/codex-cli 0.10.20 → 0.10.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/tsup/assets/cjs_shims.js","../src/client/codex-client.ts","../src/utils/codex-repository.ts","../src/cli.ts","../src/commands/config/index.ts","../src/commands/config/initialize.ts","../src/commands/config/update.ts","../src/commands/config/validate.ts","../src/commands/config/init.ts","../src/commands/document/index.ts","../src/commands/document/fetch.ts","../src/client/get-client.ts","../src/commands/cache/index.ts","../src/commands/cache/list.ts","../src/commands/cache/clear.ts","../src/commands/cache/stats.ts","../src/commands/cache/health.ts","../src/commands/sync.ts","../src/config/migrate-config.ts"],"names":["CodexClient","CodexError","ConfigurationError","PermissionDeniedError","ValidationError","createCodexClient","spawn","path2","os","fs2","Command","createConfigManager","chalk","resolveOrganization","path","validateNameFormat","crypto","fs","formatBytes","createHealthChecker","path3","readCodexConfig","ensureCodexCloned","result","formatDuration","__filename","fileURLToPath","__dirname","dirname","readFileSync","join"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAKM,gBAAA,EAOO,aAAA;AAZb,IAAA,cAAA,GAAA,KAAA,CAAA;AAAA,EAAA,0CAAA,GAAA;AAKA,IAAM,gBAAA,GAAmB,MACvB,OAAO,QAAA,KAAa,WAAA,GAChB,IAAI,GAAA,CAAI,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAE,CAAA,CAAE,IAAA,GAC7B,QAAA,CAAS,aAAA,IAAiB,QAAA,CAAS,aAAA,CAAc,OAAA,CAAQ,WAAA,EAAY,KAAM,QAAA,GAC1E,QAAA,CAAS,aAAA,CAAc,GAAA,GACvB,IAAI,GAAA,CAAI,SAAA,EAAW,QAAA,CAAS,OAAO,CAAA,CAAE,IAAA;AAEtC,IAAM,gCAAgC,gBAAA,EAAiB;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACZ9D,IAAA,oBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,oBAAA,EAAA;AAAA,EAAA,WAAA,EAAA,MAAAA,iBAAA;AAAA,EAAA,UAAA,EAAA,MAAAC,gBAAA;AAAA,EAAA,kBAAA,EAAA,MAAAC,wBAAA;AAAA,EAAA,qBAAA,EAAA,MAAAC,2BAAA;AAAA,EAAA,eAAA,EAAA,MAAAC,qBAAA;AAAA,EAAA,iBAAA,EAAA,MAAAC;AAAA,CAAA,CAAA;AAAA,IAAA,iBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,4BAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,IAAA,wBAAA,GAAA,EAAA;AAAA,QAAA,CAAA,wBAAA,EAAA;AAAA,EAAA,iBAAA,EAAA,MAAA,iBAAA;AAAA,EAAA,eAAA,EAAA,MAAA,eAAA;AAAA,EAAA,gBAAA,EAAA,MAAA,gBAAA;AAAA,EAAA,cAAA,EAAA,MAAA;AAAA,CAAA,CAAA;AAeA,SAAS,UAAA,CAAW,OAAA,EAAiB,IAAA,EAAgB,OAAA,EAA2C;AAC9F,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,KAAA,GAAQC,mBAAA,CAAM,OAAA,EAAS,IAAA,EAAM;AAAA,MACjC,GAAG,OAAA;AAAA,MACH,KAAK,OAAA,CAAQ;AAAA,KACd,CAAA;AAED,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,KAAA,CAAM,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAS;AAChC,MAAA,MAAA,IAAU,KAAK,QAAA,EAAS;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAS;AAChC,MAAA,MAAA,IAAU,KAAK,QAAA,EAAS;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAU;AAC3B,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,IACd,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAS;AAC1B,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,MAAM,QAAa,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,yBAAA,EAA4B,IAAI,CAAA,CAAE,CAAA;AACzE,QAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,MAChB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAaA,SAAS,sBAAsB,SAAA,EAA2B;AACxD,EAAA,IAAI,CAAC,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU;AAC/C,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AAGA,EAAA,MAAM,SAAA,GAAY,SAAA,CACf,OAAA,CAAQ,OAAA,EAAS,EAAE,EACnB,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,CACpB,IAAA,EAAK;AAER,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,SAAS,CAAA,CAAE,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,SAAA;AACT;AAMA,SAAS,kBAAA,CAAmB,MAAc,IAAA,EAA2C;AACnF,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACrC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,gCAAA,CAAkC,CAAA;AAAA,EAClE;AAGA,EAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA,EAAG;AACnC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,OAAA,EAAU,IAAI,CAAA,4EAAA,CAA8E,CAAA;AAAA,EACpI;AAGA,EAAA,IAAI,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAChD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,yCAAA,EAA4C,IAAI,CAAA,CAAE,CAAA;AAAA,EAClF;AACF;AAMO,SAAS,iBAAiB,MAAA,EAAqC;AACpE,EAAA,MAAM,SAAA,GAAY,OAAO,UAAA,IAAc,OAAA;AAGvC,EAAA,MAAM,YAAA,GAAe,qBAAA,CAAsB,MAAA,CAAO,YAAY,CAAA;AAC9D,EAAA,MAAM,aAAA,GAAgB,sBAAsB,SAAS,CAAA;AAGrD,EAAA,OAAYC,gBAAA,CAAA,IAAA;AAAA,IACPC,aAAA,CAAA,MAAA,EAAO;AAAA,IACV,sBAAA;AAAA,IACA,GAAG,YAAY,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,EAAI,QAAQ,GAAG,CAAA;AAAA,GACjD;AACF;AAKA,eAAsB,eAAe,QAAA,EAAoC;AACvE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAcD,gBAAA,CAAA,IAAA,CAAK,QAAA,EAAU,MAAM,CAAA;AACzC,IAAA,MAAM,KAAA,GAAQ,MAASE,cAAA,CAAA,IAAA,CAAK,MAAM,CAAA;AAClC,IAAA,OAAO,MAAM,WAAA,EAAY;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAKO,SAAS,gBAAgB,MAAA,EAAqC;AACnE,EAAA,MAAM,SAAA,GAAY,OAAO,UAAA,IAAc,OAAA;AAGvC,EAAA,kBAAA,CAAmB,MAAA,CAAO,cAAc,cAAc,CAAA;AACtD,EAAA,kBAAA,CAAmB,WAAW,YAAY,CAAA;AAI1C,EAAA,OAAO,CAAA,mBAAA,EAAsB,MAAA,CAAO,YAAY,CAAA,CAAA,EAAI,SAAS,CAAA,IAAA,CAAA;AAC/D;AAKA,eAAe,OAAA,CAAQ,UAAkB,IAAA,EAAiC;AACxE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,KAAA,EAAO,IAAA,EAAM;AAAA,MAC3C,GAAA,EAAK;AAAA,KACN,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT,SAAS,KAAA,EAAY;AAEnB,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,MAAM,IAAI,MAAM,CAAA,2DAAA,CAA6D,CAAA;AAAA,IAC/E;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,QAAA,EAAU;AAC3B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0CAAA,EAA6C,QAAQ,CAAA,CAAE,CAAA;AAAA,IACzE;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,GAAA,EAAK;AACtB,MAAA,MAAM,IAAI,MAAM,CAAA,wEAAA,CAA0E,CAAA;AAAA,IAC5F;AAEA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAKA,eAAe,QAAA,CACb,GAAA,EACA,UAAA,EACA,OAAA,EACe;AAEf,EAAA,MAAM,SAAA,GAAiBF,yBAAQ,UAAU,CAAA;AACzC,EAAA,MAASE,cAAA,CAAA,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAG7C,EAAA,MAAM,IAAA,GAAO,CAAC,OAAO,CAAA;AAErB,EAAA,IAAI,SAAS,KAAA,EAAO;AAElB,IAAA,IAAI,CAAC,OAAO,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA,IAAK,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC1D,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,OAAA,CAAQ,KAAK,CAAA,6BAAA,CAA+B,CAAA;AAAA,IAC1F;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAC5C;AAEA,EAAA,IAAI,SAAS,MAAA,EAAQ;AAEnB,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,EAAG;AACvC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAAA,IAC1D;AACA,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,OAAA,CAAQ,MAAM,CAAA;AAAA,EACtC;AAGA,EAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAE3B,EAAA,IAAA,CAAK,IAAA,CAAK,KAAK,UAAU,CAAA;AAGzB,EAAA,MAAM,WAAW,KAAA,EAAO,IAAA,EAAM,EAAE,GAAA,EAAK,WAAW,CAAA;AAClD;AAKA,eAAe,QAAA,CAAS,UAAkB,MAAA,EAAgC;AAExE,EAAY;AAEV,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,MAAM,CAAA,CAAE,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,OAAA,EAAS,QAAA,EAAU,GAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAC,CAAA;AAAA,EACpE;AAGF;AAKA,eAAe,WAAA,CAAY,UAAkB,MAAA,EAA+B;AAE1E,EAAA,IAAI,CAAC,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,MAAM,CAAA,CAAE,CAAA;AAAA,EAClD;AACA,EAAA,MAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA;AAC9C;AAKA,eAAe,QAAQ,QAAA,EAAiC;AACtD,EAAA,MAAM,OAAA,CAAQ,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAClC;AAeA,eAAsB,iBAAA,CACpB,QACA,OAAA,EACiB;AACjB,EAAA,MAAM,QAAA,GAAW,iBAAiB,MAAM,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,SAAS,MAAA,IAAU,MAAA;AAGlC,EAAA,IAAI,MAAM,cAAA,CAAe,QAAQ,CAAA,IAAK,CAAC,SAAS,KAAA,EAAO;AACrD,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,CAAS,UAAU,MAAM,CAAA;AAC/B,MAAA,MAAM,WAAA,CAAY,UAAU,MAAM,CAAA;AAClC,MAAA,MAAM,QAAQ,QAAQ,CAAA;AACtB,MAAA,OAAO,QAAA;AAAA,IACT,SAAS,KAAA,EAAY;AAEnB,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,iCAAA,EAAoC,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAChE,MAAA,OAAA,CAAQ,KAAK,CAAA,6BAAA,CAA+B,CAAA;AAC5C,MAAA,MAASA,kBAAG,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,IACxD;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAU,gBAAgB,MAAM,CAAA;AAGtC,EAAA,IAAI;AACF,IAAA,MAASA,kBAAG,QAAA,EAAU,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,EACxD,SAAS,KAAA,EAAY;AAEnB,IAAA,OAAA,CAAQ,KAAK,CAAA,oCAAA,EAAuC,QAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,EAClF;AAEA,EAAA,MAAM,QAAA,CAAS,SAAS,QAAA,EAAU;AAAA,IAChC,MAAA;AAAA,IACA,KAAA,EAAO;AAAA;AAAA,GACR,CAAA;AAED,EAAA,OAAO,QAAA;AACT;AAzSA,IAAA,qBAAA,GAAA,KAAA,CAAA;AAAA,EAAA,+BAAA,GAAA;AAAA,IAAA,cAAA,EAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACAA,cAAA,EAAA;;;ACAA,cAAA,EAAA;;;ACAA,cAAA,EAAA;AAoBO,SAAS,uBAAA,GAAmC;AACjD,EAAA,MAAM,GAAA,GAAM,IAAIC,iBAAA,CAAQ,aAAa,CAAA;AAErC,EAAA,GAAA,CACG,WAAA,CAAY,8FAA8F,CAAA,CAC1G,MAAA,CAAO,gBAAgB,sCAAsC,CAAA,CAC7D,MAAA,CAAO,kBAAA,EAAoB,gDAAgD,CAAA,CAC3E,MAAA,CAAO,qBAAA,EAAuB,oDAAoD,EAClF,MAAA,CAAO,sBAAA,EAAwB,iCAAA,EAAmC,UAAU,CAAA,CAC5E,MAAA,CAAO,SAAA,EAAW,kCAAkC,EACpD,MAAA,CAAO,UAAA,EAAY,8BAA8B,CAAA,CACjD,OAAO,QAAA,EAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgBC,yBAAA,CAAoB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAEvD,MAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,QAAA,OAAA,CAAQ,GAAA,CAAIC,wBAAA,CAAM,IAAA,CAAK,uCAAuC,CAAC,CAAA;AAAA,MACjE;AAGA,MAAA,IAAI,MAAM,OAAA,CAAQ,GAAA;AAElB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,GAAA,GAAM,MAAM,cAAc,kBAAA,EAAmB;AAAA,MAC/C;AAEA,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,IAAI;AACF,UAAA,GAAA,GAAMC,yBAAA,CAAoB;AAAA,YACxB,QAAA,EAAeC,gBAAA,CAAA,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK;AAAA,WACtC,CAAA;AAAA,QACH,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,GAAA,GAAWA,gBAAA,CAAA,QAAA,CAAS,QAAQ,GAAA,EAAK,EAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,SAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,UAAA,OAAA,CAAQ,IAAIF,wBAAA,CAAM,MAAA,CAAO,CAAA,6CAAA,EAA2C,GAAG,EAAE,CAAC,CAAA;AAC1E,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAA,CAAM,GAAA,CAAI,4CAA4C,CAAC,CAAA;AAAA,QACrE;AAAA,MACF,CAAA,MAAA,IAAW,CAAC,OAAA,CAAQ,IAAA,EAAM;AACxB,QAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,iBAAiBA,wBAAA,CAAM,IAAA,CAAK,GAAG,CAAC;AAAA,CAAI,CAAC,CAAA;AAAA,MAC7D;AAGA,MAAA,MAAM,aAAA,GAAgBG,wBAAA,CAAmB,GAAA,EAAK,cAAc,CAAA;AAC5D,MAAA,IAAI,CAAC,cAAc,KAAA,EAAO;AACxB,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,cAAc,KAAA,EAAM,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,QACrE,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,MAAMH,wBAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,cAAc,KAAK,CAAA;AAAA,QACxD;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,IAAI,UAAU,OAAA,CAAQ,OAAA;AACtB,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAA,GAAU,cAAc,aAAA,EAAc;AACtC,QAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,UAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,YAAYA,wBAAA,CAAM,IAAA,CAAK,OAAO,CAAC;AAAA,CAAI,CAAC,CAAA;AAAA,QAC5D;AAAA,MACF;AAGA,MAAA,IAAI,YAAY,OAAA,CAAQ,SAAA;AAExB,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,cAAA,GAAiBG,wBAAA,CAAmB,SAAA,EAAW,YAAY,CAAA;AACjE,QAAA,IAAI,CAAC,eAAe,KAAA,EAAO;AACzB,UAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,YAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,eAAe,KAAA,EAAM,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,UACtE,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,MAAMH,wBAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,eAAe,KAAK,CAAA;AAAA,UACzD;AACA,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,UAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,qBAAqBA,wBAAA,CAAM,IAAA,CAAK,SAAS,CAAC;AAAA,CAAI,CAAC,CAAA;AAAA,QACvE;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,eAAA,GAA2C,MAAM,aAAA,CAAc,iBAAA,CAAkB,GAAG,CAAA;AAC1F,QAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,UAAA,SAAA,GAAY,eAAA,CAAgB,IAAA;AAC5B,UAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,YAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,qBAAqBA,wBAAA,CAAM,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,CAAsB,CAAC,CAAA;AAAA,UACzF;AAAA,QACF,CAAA,MAAA,IAAW,CAAC,OAAA,CAAQ,IAAA,EAAM;AACxB,UAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAA,CAAM,GAAA,CAAI,CAAA,QAAA,EAAW,gBAAgB,OAAO;AAAA,CAAI,CAAC,CAAA;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,SAAA,GAAY,SAAS,GAAG,CAAA,IAAA,CAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,UAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,MAAA,CAAO,CAAA,4DAAA,EAA0D,GAAG,GAAG,CAAC,CAAA;AAC1F,UAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,oBAAoBA,wBAAA,CAAM,IAAA,CAAK,SAAS,CAAC;AAAA,CAAI,CAAC,CAAA;AAAA,QACtE;AAAA,MACF;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,sBAAA,CAAuB;AAAA,QACxD,YAAA,EAAc,GAAA;AAAA,QACd,OAAA;AAAA,QACA,SAAA;AAAA,QACA,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,OAAA,EAAS,QAAQ,GAAA,KAAQ;AAAA,OAC1B,CAAA;AAGD,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,IAAA,CAAK,SAAA;AAAA,YACH;AAAA,cACE,OAAA,EAAS,IAAA;AAAA,cACT,YAAY,MAAA,CAAO,UAAA;AAAA,cACnB,qBAAqB,MAAA,CAAO,mBAAA;AAAA,cAC5B,YAAA,EAAc,GAAA;AAAA,cACd,OAAA;AAAA,cACA,SAAA;AAAA,cACA,aAAa,MAAA,CAAO,WAAA;AAAA,cACpB,WAAW,MAAA,CAAO,SAAA;AAAA,cAClB,KAAK,MAAA,CAAO;AAAA,aACd;AAAA,YACA,IAAA;AAAA,YACA;AAAA;AACF,SACF;AACA,QAAA;AAAA,MACF;AAGA,MAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,WAAA,CAAY,OAAA,EAAS;AAC5C,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,GAAA,GAAM,GAAG,CAAC,CAAA;AAAA,MACpD;AACA,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,WAAA,CAAY,cAAA,EAAgB;AACnD,QAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,IAAA,GAAO,GAAA,GAAM,YAAY,CAAC,CAAA;AAAA,MAClD;AAEA,MAAA,IAAI,MAAA,CAAO,UAAU,OAAA,EAAS;AAC5B,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,gCAAgC,CAAC,CAAA;AAAA,MAC3E,CAAA,MAAA,IAAW,MAAA,CAAO,SAAA,CAAU,OAAA,EAAS;AACnC,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,gCAAgC,CAAC,CAAA;AAAA,MAC3E,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,+BAA+B,CAAC,CAAA;AAAA,MAC1E;AAEA,MAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,6CAA6C,CAAC,CAAA;AAEtF,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,IAAI,MAAA,CAAO,IAAI,gBAAA,EAAkB;AAC/B,UAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,gCAAgC,CAAC,CAAA;AAAA,QAC3E,CAAA,MAAA,IAAW,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU;AAC9B,UAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,sCAAsC,CAAC,CAAA;AAAA,QACjF,CAAA,MAAA,IAAW,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW;AAC/B,UAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAA,CAAM,GAAA,CAAI,qBAAqB,CAAC,CAAA;AAAA,QAChE;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAA,CAAM,KAAA,CAAM,0DAAqD,CAAC,CAAA;AAE9E,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACxC,MAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,CAAA,gBAAA,EAAmB,GAAG,EAAE,CAAC,CAAA;AAC/C,MAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,CAAA,WAAA,EAAc,OAAO,EAAE,CAAC,CAAA;AAC9C,MAAA,OAAA,CAAQ,IAAIA,wBAAA,CAAM,GAAA,CAAI,CAAA,oBAAA,EAAuB,SAAS,EAAE,CAAC,CAAA;AAEzD,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAA,CAAM,IAAA,CAAK,eAAe,CAAC,CAAA;AACvC,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAA,CAAM,GAAA,CAAI,iDAAiD,CAAC,CAAA;AACxE,MAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI,CAAA,kDAAA,EAAqD,GAAG,CAAA,CAAA,EAAI,SAAS,EAAE,CAAC,CAAA;AAC9F,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAA,CAAM,GAAA,CAAI,kEAAkE,CAAC,CAAA;AAAA,IAC3F,SAAS,KAAA,EAAY;AACnB,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,MAAM,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC/D,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAMA,wBAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAAA,MAClD;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;AChNA,cAAA,EAAA;AAgBO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,MAAM,GAAA,GAAM,IAAIF,iBAAAA,CAAQ,eAAe,CAAA;AAEvC,EAAA,GAAA,CACG,WAAA,CAAY,4DAA4D,CAAA,CACxE,MAAA,CAAO,cAAA,EAAgB,0BAA0B,CAAA,CACjD,MAAA,CAAO,kBAAA,EAAoB,qBAAqB,CAAA,CAChD,MAAA,CAAO,qBAAA,EAAuB,8BAA8B,CAAA,CAC5D,MAAA,CAAO,sBAAA,EAAwB,wCAAwC,CAAA,CACvE,MAAA,CAAO,UAAA,EAAY,wBAAwB,CAAA,CAC3C,MAAA,CAAO,QAAA,EAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgBC,yBAAAA,CAAoB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAGvD,MAAA,MAAM,aAAA,GAAoC;AAAA,QACxC,OAAA,EAAS,QAAQ,GAAA,KAAQ;AAAA,OAC3B;AAEA,MAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,MAAA,IAAI,OAAA,CAAQ,QAAQ,KAAA,CAAA,EAAW;AAC7B,QAAA,aAAA,CAAc,eAAe,OAAA,CAAQ,GAAA;AACrC,QAAA,UAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,IAAI,OAAA,CAAQ,YAAY,KAAA,CAAA,EAAW;AACjC,QAAA,aAAA,CAAc,UAAU,OAAA,CAAQ,OAAA;AAChC,QAAA,UAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,IAAI,OAAA,CAAQ,cAAc,KAAA,CAAA,EAAW;AACnC,QAAA,aAAA,CAAc,YAAY,OAAA,CAAQ,SAAA;AAClC,QAAA,UAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,IAAI,OAAA,CAAQ,eAAe,KAAA,CAAA,EAAW;AACpC,QAAA,aAAA,CAAc,aAAa,OAAA,CAAQ,UAAA;AACnC,QAAA,UAAA,GAAa,IAAA;AAAA,MACf;AAEA,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,OAAO,6FAAA,EAA8F,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,QAC/I,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,KAAA,CAAMC,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,6FAA6F,CAAA;AAAA,QAClI;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,mCAAmC,CAAC,CAAA;AAAA,MAC7D;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,kBAAA,CAAmB,aAAa,CAAA;AAGnE,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,IAAA,CAAK,SAAA;AAAA,YACH;AAAA,cACE,OAAA,EAAS,IAAA;AAAA,cACT,YAAY,MAAA,CAAO,UAAA;AAAA,cACnB,eAAe,MAAA,CAAO,aAAA;AAAA,cACtB,KAAK,MAAA,CAAO;AAAA,aACd;AAAA,YACA,IAAA;AAAA,YACA;AAAA;AACF,SACF;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,CAAO,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG;AACrC,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,MAAA,CAAO,yBAAyB,CAAC,CAAA;AACnD,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,aAAA,EAAe;AACxC,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,KAAA,CAAM,QAAG,CAAA,EAAGA,yBAAM,GAAA,CAAI,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE,CAAC,CAAA;AAAA,MAC9D;AAEA,MAAA,IAAI,OAAO,GAAA,EAAK;AACd,QAAA,IAAI,MAAA,CAAO,IAAI,gBAAA,EAAkB;AAC/B,UAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAAA,CAAM,GAAA,CAAI,gCAAgC,CAAC,CAAA;AAAA,QAC3E,CAAA,MAAA,IAAW,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW;AAC/B,UAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAAA,CAAM,GAAA,CAAI,qBAAqB,CAAC,CAAA;AAAA,QAChE;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,KAAA,CAAM,oDAA+C,CAAC,CAAA;AAAA,IAC1E,SAAS,KAAA,EAAY;AACnB,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,MAAM,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC/D,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAAA,MAClD;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;ACxHA,cAAA,EAAA;AAaO,SAAS,qBAAA,GAAiC;AAC/C,EAAA,MAAM,GAAA,GAAM,IAAIF,iBAAAA,CAAQ,iBAAiB,CAAA;AAEzC,EAAA,GAAA,CACG,WAAA,CAAY,mEAAmE,CAAA,CAC/E,MAAA,CAAO,UAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,aAAA,GAAgBC,yBAAAA,CAAoB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAEvD,MAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,QAAA,OAAA,CAAQ,GAAA,CAAIC,wBAAAA,CAAM,IAAA,CAAK,qCAAqC,CAAC,CAAA;AAAA,MAC/D;AAEA,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,mBAAA,EAAoB;AAGvD,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,IAAA,CAAK,SAAS,CAAC,CAAA;AACrC,QAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,UAAK,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,QAClE;AACA,QAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,MACd;AAEA,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,MAAA,CAAO,IAAA,CAAK,WAAW,CAAC,CAAA;AAC1C,QAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAU;AACrC,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,MAAA,CAAO,UAAK,CAAA,EAAG,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,EAAA,EAAK,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAAA,QACzE;AACA,QAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,MACd;AAEA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAChC,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,KAAA,CAAM,uDAAkD,CAAC,CAAA;AAAA,QAC7E,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,KAAA,CAAM,qCAAgC,CAAA,EAAGA,wBAAAA,CAAM,OAAO,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,MAAM,CAAA,QAAA,EAAW,OAAO,QAAA,CAAS,MAAA,GAAS,IAAI,GAAA,GAAM,EAAE,GAAG,CAAC,CAAA;AAAA,QACxJ;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,uCAAA,EAAqC,OAAO,MAAA,CAAO,MAAM,CAAA,MAAA,EAAS,MAAA,CAAO,OAAO,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAAE,GAAG,CAAC,CAAA;AAC/H,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,KAAA,EAAO,MAAM,OAAA,EAAQ,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC/D,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAAA,MAClD;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;AC5EA,cAAA,EAAA;;;ACAA,cAAA,EAAA;;;ACAA,cAAA,EAAA;;;ACAA,cAAA,EAAA;AA4BA,IAAI,cAAA,GAAqC,IAAA;AAiBzC,eAAsB,UAAU,OAAA,EAAoD;AAClF,EAAA,IAAI,CAAC,cAAA,EAAgB;AAEnB,IAAA,MAAM,EAAE,WAAA,EAAAZ,YAAAA,EAAY,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,iBAAA,EAAA,EAAA,oBAAA,CAAA,CAAA;AAC9B,IAAA,cAAA,GAAiB,MAAMA,YAAAA,CAAY,MAAA,CAAO,OAAO,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,cAAA;AACT;;;ADjCA,SAAS,YAAY,OAAA,EAAyB;AAC5C,EAAA,OAAcgB,iBAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC9E;AAEO,SAAS,oBAAA,GAAgC;AAC9C,EAAA,MAAM,GAAA,GAAM,IAAIN,iBAAAA,CAAQ,gBAAgB,CAAA;AAExC,EAAA,GAAA,CACG,WAAA,CAAY,4CAA4C,CAAA,CACxD,QAAA,CAAS,OAAA,EAAS,oDAAoD,CAAA,CACtE,MAAA,CAAO,gBAAA,EAAkB,2CAA2C,CAAA,CACpE,MAAA,CAAO,iBAAA,EAAmB,mCAAA,EAAqC,QAAQ,CAAA,CACvE,MAAA,CAAO,QAAA,EAAU,8BAA8B,CAAA,CAC/C,MAAA,CAAO,iBAAA,EAAmB,yCAAyC,CAAA,CACnE,MAAA,CAAO,OAAO,GAAA,EAAa,OAAA,KAAY;AACtC,IAAA,IAAI;AAEF,MAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,iBAAiB,CAAA;AAGtD,MAAA,IAAI,CAAC,WAAA,CAAY,GAAG,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,KAAA,CAAME,wBAAAA,CAAM,GAAA,CAAI,2BAA2B,CAAC,CAAA;AACpD,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,+CAA+C,CAAC,CAAA;AACtE,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,6CAA6C,CAAC,CAAA;AACpE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAG/B,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,IAAQ,CAAC,QAAQ,WAAA,EAAa;AACzC,QAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,CAAA,SAAA,EAAY,GAAG,KAAK,CAAC,CAAA;AAAA,MAC/C;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAM,GAAA,EAAK;AAAA,QACrC,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,KAAK,OAAA,CAAQ;AAAA,OACd,CAAA;AAGD,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,GAAA;AAAA,UACA,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA;AAAA,UACxC,QAAA,EAAU;AAAA,YACR,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,SAAA,EAAW,OAAO,QAAA,EAAU,SAAA;AAAA,YAC5B,SAAA,EAAW,OAAO,QAAA,EAAU,SAAA;AAAA,YAC5B,aAAA,EAAe,MAAA,CAAO,QAAA,EAAU,aAAA,IAAiB,OAAO,OAAA,CAAQ,MAAA;AAAA,YAChE,WAAA,EAAa,WAAA,CAAY,MAAA,CAAO,OAAO;AAAA;AACzC,SACF;AACA,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC7C,CAAA,MAAA,IAAW,QAAQ,MAAA,EAAQ;AAEzB,QAAA,MAASK,cAAA,CAAA,SAAA,CAAU,OAAA,CAAQ,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAA;AACjD,QAAA,OAAA,CAAQ,GAAA,CAAIL,yBAAM,KAAA,CAAM,QAAG,GAAG,CAAA,WAAA,EAAc,OAAA,CAAQ,MAAM,CAAA,CAAE,CAAA;AAC5D,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI,CAAA,QAAA,EAAW,OAAO,OAAA,CAAQ,MAAM,QAAQ,CAAC,CAAA;AAC/D,QAAA,IAAI,OAAO,SAAA,EAAW;AACpB,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,iBAAiB,CAAC,CAAA;AAAA,QAC1C,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,mBAAmB,CAAC,CAAA;AAAA,QAC5C;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,IAAI,MAAA,CAAO,SAAA,IAAa,CAAC,OAAA,CAAQ,WAAA,EAAa;AAC5C,UAAA,OAAA,CAAQ,KAAA,CAAMA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAAA,CAAM,GAAA,CAAI,cAAc,CAAC,CAAA;AAAA,QAC3D,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,KAAA,CAAMA,yBAAM,KAAA,CAAM,QAAG,GAAGA,wBAAAA,CAAM,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,QACxD;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAC,CAAA;AAAA,MAC9C;AAAA,IAEF,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAGhD,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,8BAA8B,CAAA,EAAG;AAC1D,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,6DAA6D,CAAC,CAAA;AAAA,MACtF,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,cAAc,CAAA,EAAG;AACjD,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,2DAA2D,CAAC,CAAA;AAAA,MACpF,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC/E,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,0DAA0D,CAAC,CAAA;AACjF,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,2EAA2E,CAAC,CAAA;AAAA,MACpG;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;AEhHA,cAAA,EAAA;;;ACAA,cAAA,EAAA;AAeA,SAAS,UAAU,OAAA,EAAyB;AAC1C,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,MAAM,UAAU,CAAC,OAAA;AACjB,IAAA,IAAI,UAAU,EAAA,EAAI,OAAOA,yBAAM,GAAA,CAAI,CAAA,QAAA,EAAW,OAAO,CAAA,KAAA,CAAO,CAAA;AAC5D,IAAA,IAAI,OAAA,GAAU,IAAA,EAAM,OAAOA,wBAAAA,CAAM,GAAA,CAAI,CAAA,QAAA,EAAW,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAC,CAAA,KAAA,CAAO,CAAA;AAC/E,IAAA,OAAOA,wBAAAA,CAAM,IAAI,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,OAAA,GAAU,IAAI,CAAC,CAAA,KAAA,CAAO,CAAA;AAAA,EAC/D;AACA,EAAA,IAAI,UAAU,EAAA,EAAI,OAAOA,yBAAM,KAAA,CAAM,CAAA,EAAG,OAAO,CAAA,CAAA,CAAG,CAAA;AAClD,EAAA,IAAI,OAAA,GAAU,IAAA,EAAM,OAAOA,wBAAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,EAAE,CAAC,CAAA,CAAA,CAAG,CAAA;AACrE,EAAA,IAAI,OAAA,GAAU,KAAA,EAAO,OAAOA,wBAAAA,CAAM,MAAA,CAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,OAAA,GAAU,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AACzE,EAAA,OAAOA,wBAAAA,CAAM,IAAI,CAAA,EAAG,IAAA,CAAK,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AACpD;AAKA,SAAS,aAAa,MAAA,EAA+C;AACnE,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,OAAA;AACH,MAAA,OAAOA,wBAAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAC5B,KAAK,OAAA;AACH,MAAA,OAAOA,wBAAAA,CAAM,OAAO,OAAO,CAAA;AAAA,IAC7B,KAAK,SAAA;AACH,MAAA,OAAOA,wBAAAA,CAAM,IAAI,SAAS,CAAA;AAAA;AAEhC;AAEO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,GAAA,GAAM,IAAIF,iBAAAA,CAAQ,YAAY,CAAA;AAEpC,EAAA,GAAA,CACG,WAAA,CAAY,oBAAoB,CAAA,CAChC,MAAA,CAAO,UAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,mBAAA,EAAqB,+CAAA,EAAiD,KAAK,CAAA,CAClF,MAAA,CAAO,eAAe,mCAAA,EAAqC,QAAQ,CAAA,CACnE,MAAA,CAAO,gBAAA,EAAkB,iDAAA,EAAmD,KAAK,CAAA,CACjF,OAAO,QAAA,EAAU,0BAA0B,CAAA,CAC3C,MAAA,CAAO,WAAA,EAAa,iCAAiC,CAAA,CACrD,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAG/B,MAAA,MAAM,WAAA,GAAkC;AAAA,QACtC,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ,IAAA;AAAA,QAChB,aAAA,EAAe,OAAA,CAAQ,IAAA,GAAO,MAAA,GAAS;AAAA,OACzC;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,gBAAA,CAAiB,WAAW,CAAA;AAExD,MAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,EAAC,EAAG,KAAA,EAAO,CAAA,EAAG,OAAA,EAAS,gBAAA,EAAkB,CAAC,CAAA;AAAA,QAClF,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAA,CAAIE,wBAAAA,CAAM,MAAA,CAAO,iBAAiB,CAAC,CAAA;AAC3C,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,6CAA6C,CAAC,CAAA;AAAA,QACtE;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC3C,QAAA;AAAA,MACF;AAGA,MAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,IAAA,CAAK,CAAA,eAAA,EAAkB,OAAO,OAAA,CAAQ,MAAM,CAAA,IAAA,EAAO,MAAA,CAAO,KAAK,CAAA;AAAA,CAAK,CAAC,CAAA;AAGvF,MAAA,IAAI,QAAQ,OAAA,EAAS;AAEnB,QAAA,KAAA,MAAW,KAAA,IAAS,OAAO,OAAA,EAAS;AAClC,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,KAAA,CAAM,GAAG,CAAC,CAAA;AACjC,UAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmB,YAAA,CAAa,KAAA,CAAM,MAAM,CAAC,CAAA,CAAE,CAAA;AAC3D,UAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmBM,iBAAA,CAAY,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AACxD,UAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmBN,wBAAAA,CAAM,IAAI,KAAA,CAAM,WAAW,CAAC,CAAA,CAAE,CAAA;AAC7D,UAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmB,SAAA,CAAU,KAAA,CAAM,YAAY,CAAC,CAAA,CAAE,CAAA;AAC9D,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmB,KAAA,CAAM,QAAA,GAAWA,wBAAAA,CAAM,KAAA,CAAM,KAAK,CAAA,GAAIA,wBAAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AACtF,UAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,QAChB;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAM,YAAY,IAAA,CAAK,GAAA;AAAA,UACrB,EAAA;AAAA,UACA,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC;AAAA,SACrD;AAEA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACNA,wBAAAA,CAAM,GAAA;AAAA,YACJ,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,SAAS,CAAC,CAAA,EAAA,EAAK,QAAA,CAAS,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,MAAA,CAAO,EAAE,CAAC,CAAA,KAAA;AAAA;AACzE,SACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI,QAAA,CAAI,OAAO,SAAA,GAAY,EAAE,CAAC,CAAC,CAAA;AAEjD,QAAA,KAAA,MAAW,KAAA,IAAS,OAAO,OAAA,EAAS;AAClC,UAAA,MAAM,MACJ,KAAA,CAAM,GAAA,CAAI,MAAA,GAAS,SAAA,GACf,QAAQ,KAAA,CAAM,GAAA,CAAI,KAAA,CAAM,EAAE,YAAY,CAAA,CAAE,CAAA,GACxC,KAAA,CAAM,GAAA,CAAI,OAAO,SAAS,CAAA;AAEhC,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,EAAGA,wBAAAA,CAAM,IAAA,CAAK,GAAG,CAAC,KAAK,YAAA,CAAa,KAAA,CAAM,MAAM,CAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAAA,EAAA,EAAKM,iBAAA,CAAY,KAAA,CAAM,IAAI,CAAA,CAAE,MAAA,CAAO,EAAE,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,WACvI;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,QAAA,OAAA,CAAQ,GAAA;AAAA,UACNN,wBAAAA,CAAM,GAAA;AAAA,YACJ,WAAW,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,IAAA,EAAO,OAAO,KAAK,CAAA,kCAAA;AAAA;AACrD,SACF;AAAA,MACF;AAGA,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,aAAA,EAAc;AACzC,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AACrC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,wBAAAA,CAAM,GAAA;AAAA,UACJ,UAAU,KAAA,CAAM,UAAU,CAAA,UAAA,EAAaM,iBAAA,CAAY,MAAM,SAAS,CAAC,CAAA,IAAA,EAC9D,KAAA,CAAM,UAAU,CAAA,QAAA,EAAW,KAAA,CAAM,UAAU,CAAA,QAAA,EAAW,MAAM,YAAY,CAAA,QAAA;AAAA;AAC/E,OACF;AAAA,IACF,SAAS,KAAA,EAAY;AAEnB,MAAA,MAAM,YAAA,GAAe,MAAM,OAAA,IAAW,eAAA;AAEtC,MAAA,IAAI,aAAa,QAAA,CAAS,QAAQ,KAAK,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA,EAAG;AACzE,QAAA,OAAA,CAAQ,KAAA,CAAMN,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,gCAAgC,CAAA;AACnE,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,yDAAyD,CAAC,CAAA;AAAA,MACpF,CAAA,MAAA,IAAW,aAAa,QAAA,CAAS,QAAQ,KAAK,YAAA,CAAa,QAAA,CAAS,YAAY,CAAA,EAAG;AACjF,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,6CAA6C,CAAA;AAChF,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,mDAAmD,CAAC,CAAA;AAAA,MAC9E,CAAA,MAAA,IAAW,YAAA,CAAa,QAAA,CAAS,QAAQ,CAAA,EAAG;AAC1C,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,yBAAyB,CAAA;AAC5D,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,mCAAmC,CAAC,CAAA;AAAA,MAC9D,CAAA,MAAA,IAAW,aAAa,QAAA,CAAS,OAAO,KAAK,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,EAAG;AAC1E,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,gCAAgC,CAAA;AACnE,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,+DAA+D,CAAC,CAAA;AAAA,MAC1F,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,YAAY,CAAA;AAAA,MACjD;AAEA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;AC1KA,cAAA,EAAA;AAWO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,MAAM,GAAA,GAAM,IAAIF,iBAAAA,CAAQ,aAAa,CAAA;AAErC,EAAA,GAAA,CACG,YAAY,qBAAqB,CAAA,CACjC,MAAA,CAAO,OAAA,EAAS,oBAAoB,CAAA,CACpC,MAAA,CAAO,kBAAA,EAAoB,iEAAiE,EAC5F,MAAA,CAAO,WAAA,EAAa,sDAAsD,CAAA,CAC1E,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAG/B,MAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,aAAA,EAAc;AAE/C,MAAA,IAAI,WAAA,CAAY,eAAe,CAAA,EAAG;AAChC,QAAA,OAAA,CAAQ,GAAA,CAAIE,wBAAAA,CAAM,MAAA,CAAO,2CAA2C,CAAC,CAAA;AACrE,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAA;AAEJ,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,OAAA,GAAU,KAAA,CAAA;AAAA,MACZ,CAAA,MAAA,IAAW,QAAQ,OAAA,EAAS;AAC1B,QAAA,OAAA,GAAU,OAAA,CAAQ,OAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,MAAA,CAAO,+BAA+B,CAAC,CAAA;AACzD,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,mCAAmC,CAAC,CAAA;AAC1D,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,4EAA4E,CAAC,CAAA;AACnG,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,WAAW,CAAC,CAAA;AAClC,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,oCAAoC,CAAC,CAAA;AAC3D,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,iEAAiE,CAAC,CAAA;AACxF,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,0BAA0B,CAAC,CAAA;AAClD,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,WAAA,EAAc,OAAO,EAAE,CAAC,CAAA;AAC9C,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,8CAAA,CAAgD,CAAC,CAAA;AAAA,QACzE,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,wBAAwB,WAAA,CAAY,UAAU,WAAW,CAAC,CAAA;AAAA,QAClF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI;AAAA,YAAA,EAAiBM,iBAAAA,CAAY,WAAA,CAAY,SAAS,CAAC,EAAE,CAAC,CAAA;AAC5E,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,OAAA,CAAQ,GAAA,CAAIN,wBAAAA,CAAM,IAAA,CAAK,CAAA,yCAAA,EAA4C,OAAO;AAAA,CAAI,CAAC,CAAA;AAC/E,QAAA,MAAM,MAAA,CAAO,gBAAgB,OAAO,CAAA;AAAA,MACtC,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,CAAA,uBAAA,EAA0B,YAAY,UAAU,CAAA;AAAA,CAAgB,CAAC,CAAA;AACxF,QAAA,MAAM,OAAO,eAAA,EAAgB;AAAA,MAC/B;AAGA,MAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,aAAA,EAAc;AAC9C,MAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,UAAA,GAAa,UAAA,CAAW,UAAA;AAC3D,MAAA,MAAM,SAAA,GAAY,WAAA,CAAY,SAAA,GAAY,UAAA,CAAW,SAAA;AAGrD,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,KAAA,CAAM,CAAA,eAAA,EAAa,cAAc,aAAaM,iBAAAA,CAAY,SAAS,CAAC,CAAA,OAAA,CAAS,CAAC,CAAA;AAEhG,MAAA,IAAI,UAAA,CAAW,aAAa,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,GAAA,CAAIN,wBAAAA,CAAM,GAAA,CAAI,CAAA,aAAA,EAAgB,UAAA,CAAW,UAAU,CAAA,UAAA,EAAaM,iBAAAA,CAAY,UAAA,CAAW,SAAS,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;AAAA,MAC/G;AAAA,IAEF,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,MAAMN,wBAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;AC1FA,cAAA,EAAA;AAWO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,MAAM,GAAA,GAAM,IAAIF,iBAAAA,CAAQ,aAAa,CAAA;AAErC,EAAA,GAAA,CACG,WAAA,CAAY,0BAA0B,CAAA,CACtC,MAAA,CAAO,UAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAG/B,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,aAAA,EAAc;AAEzC,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAC1C,QAAA;AAAA,MACF;AAGA,MAAA,OAAA,CAAQ,GAAA,CAAIE,wBAAAA,CAAM,IAAA,CAAK,oBAAoB,CAAC,CAAA;AAE5C,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,UAAU,CAAC,CAAA;AAClC,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAwBA,wBAAAA,CAAM,IAAA,CAAK,MAAM,UAAA,CAAW,QAAA,EAAU,CAAC,CAAA,CAAE,CAAA;AAC7E,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAwBA,wBAAAA,CAAM,IAAA,CAAKM,kBAAY,KAAA,CAAM,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAwBN,wBAAAA,CAAM,KAAA,CAAM,MAAM,UAAA,CAAW,QAAA,EAAU,CAAC,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAA,CAAQ,IAAI,CAAA,qBAAA,EAAwB,KAAA,CAAM,UAAA,GAAa,CAAA,GAAIA,yBAAM,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,QAAA,EAAU,CAAA,GAAIA,wBAAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA,CAAE,CAAA;AACvH,MAAA,OAAA,CAAQ,IAAI,CAAA,qBAAA,EAAwB,KAAA,CAAM,YAAA,GAAe,CAAA,GAAIA,yBAAM,GAAA,CAAI,KAAA,CAAM,YAAA,CAAa,QAAA,EAAU,CAAA,GAAIA,wBAAAA,CAAM,GAAA,CAAI,GAAG,CAAC,CAAA,CAAE,CAAA;AACxH,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAGd,MAAA,MAAM,aAAA,GAAgB,MAAM,UAAA,GAAa,CAAA,GAAK,MAAM,UAAA,GAAa,KAAA,CAAM,aAAc,GAAA,GAAM,GAAA;AAC3F,MAAA,MAAM,WAAA,GAAc,gBAAgB,EAAA,GAAKA,wBAAAA,CAAM,QAAQ,aAAA,GAAgB,EAAA,GAAKA,wBAAAA,CAAM,MAAA,GAASA,wBAAAA,CAAM,GAAA;AACjG,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,WAAA,CAAY,CAAA,EAAG,aAAA,CAAc,QAAQ,CAAC,CAAC,CAAA,OAAA,CAAS,CAAC,CAAA,CAAE,CAAA;AAEhF,MAAA,IAAI,KAAA,CAAM,eAAe,CAAA,EAAG;AAC1B,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,6EAA6E,CAAC,CAAA;AAAA,MACtG;AAEA,MAAA,IAAI,KAAA,CAAM,eAAe,CAAA,EAAG;AAC1B,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,kEAAkE,CAAC,CAAA;AAAA,MAC3F;AAAA,IAEF,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;AC7DA,cAAA,EAAA;AAYO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,MAAM,GAAA,GAAM,IAAIF,iBAAAA,CAAQ,cAAc,CAAA;AAEtC,EAAA,GAAA,CACG,WAAA,CAAY,gCAAgC,CAAA,CAC5C,MAAA,CAAO,UAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AAEF,MAAA,MAAM,gBAAgBS,yBAAA,CAAoB;AAAA,QACxC,WAAA,EAAa,QAAQ,GAAA;AAAI,OAC1B,CAAA;AAGD,MAAA,MAAM,SAAwB,EAAC;AAE/B,MAAA,MAAA,CAAO,IAAA,CAAK,MAAM,aAAA,CAAc,kBAAA,EAAoB,CAAA;AACpD,MAAA,MAAA,CAAO,IAAA,CAAK,MAAM,aAAA,CAAc,YAAA,EAAc,CAAA;AAG9C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAG/B,QAAA,MAAM,YAAA,GAAe,OAAO,eAAA,EAAgB;AAC5C,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,YAAA;AAAA,UACN,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,sCAAA;AAAA,UACT,OAAA,EAAS,iBAAiB,YAAY,CAAA;AAAA,SACvC,CAAA;AAGD,QAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,aAAA,EAAc;AAC9C,QAAA,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,mBAAA,CAAoB,UAAU,CAAC,CAAA;AAGzD,QAAA,MAAM,QAAA,GAAW,OAAO,eAAA,EAAgB;AACxC,QAAA,MAAA,CAAO,IAAA,CAAK,aAAA,CAAc,sBAAA,CAAuB,QAAQ,CAAC,CAAA;AAAA,MAC5D,SAAS,KAAA,EAAY;AAEnB,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,YAAA;AAAA,UACN,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,kCAAA;AAAA,UACT,SAAS,KAAA,CAAM;AAAA,SAChB,CAAA;AAGD,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,OAAA;AAAA,UACN,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,qBAAA;AAAA,UACT,OAAA,EAAS;AAAA,SACV,CAAA;AAED,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,eAAA;AAAA,UACN,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,6BAAA;AAAA,UACT,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,MAAA,GAAuB,aAAA,CAAc,SAAA,CAAU,MAAM,CAAA;AAE3D,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAC3C,QAAA;AAAA,MACF;AAGA,MAAA,OAAA,CAAQ,GAAA,CAAIP,wBAAAA,CAAM,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAE9C,MAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,OACJ,KAAA,CAAM,MAAA,KAAW,MAAA,GACbA,wBAAAA,CAAM,MAAM,QAAG,CAAA,GACf,KAAA,CAAM,MAAA,KAAW,SACfA,wBAAAA,CAAM,MAAA,CAAO,QAAG,CAAA,GAChBA,wBAAAA,CAAM,IAAI,QAAG,CAAA;AAErB,QAAA,MAAM,WAAA,GACJ,KAAA,CAAM,MAAA,KAAW,MAAA,GAASA,wBAAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,KAAW,MAAA,GAASA,wBAAAA,CAAM,MAAA,GAASA,wBAAAA,CAAM,GAAA;AAEzF,QAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAI,CAAA,CAAA,EAAIA,yBAAM,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AAC/C,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,WAAA,CAAY,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,CAAA;AAC7C,QAAA,IAAI,MAAM,OAAA,EAAS;AACjB,UAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAKA,wBAAAA,CAAM,IAAI,KAAA,CAAM,OAAO,CAAC,CAAA,CAAE,CAAA;AAAA,QAC7C;AACA,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,MAChB;AAGA,MAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA;AAErC,MAAA,MAAM,gBACJ,MAAA,CAAO,OAAA,CAAQ,WAAW,WAAA,GACtBA,wBAAAA,CAAM,IAAI,WAAW,CAAA,GACrB,OAAO,OAAA,CAAQ,MAAA,KAAW,aACxBA,wBAAAA,CAAM,MAAA,CAAO,UAAU,CAAA,GACvBA,wBAAAA,CAAM,MAAM,SAAS,CAAA;AAE7B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,aAAa,CAAA,CAAE,CAAA;AACtC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACNA,wBAAAA,CAAM,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,QAAQ,MAAM,CAAA,SAAA,EAAY,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,WAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,OAAA,CAAS;AAAA,OACjH;AAEA,MAAA,IAAI,OAAO,OAAA,CAAQ,MAAA,GAAS,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC1D,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,2CAA2C,CAAC,CAAA;AAClE,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,8BAA8B,CAAC,CAAA;AAAA,MACvD;AAGA,MAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;;;AC1IA,cAAA,EAAA;;;ACAA,cAAA,EAAA;;;AD0BA,SAAS,oBAAA,CAAqB,QAAa,GAAA,EAAqB;AAC9D,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,EAAM,YAAA,IAAgB;AAAA,IAC1C,GAAA,EAAK,SAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,OAAO,MAAA,CAAO,GAAG,CAAA,IAAK,GAAA;AACxB;AAEO,SAAS,WAAA,GAAuB;AACrC,EAAA,MAAM,GAAA,GAAM,IAAIF,iBAAAA,CAAQ,MAAM,CAAA;AAE9B,EAAA,GAAA,CACG,WAAA,CAAY,2CAA2C,CAAA,CACvD,QAAA,CAAS,QAAA,EAAU,8CAA8C,CAAA,CACjE,MAAA,CAAO,aAAA,EAAe,4CAAA,EAA8C,MAAM,CAAA,CAC1E,OAAO,WAAA,EAAa,wCAAwC,CAAA,CAC5D,MAAA,CAAO,mBAAA,EAAqB,oDAAA,EAAsD,eAAe,CAAA,CACjG,OAAO,qBAAA,EAAuB,6DAAA,EAA+D,CAAC,GAAA,EAAK,IAAA,KAAmB,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,EAAG,EAAE,CAAA,CAC5I,MAAA,CAAO,qBAAA,EAAuB,6DAAA,EAA+D,CAAC,GAAA,EAAK,IAAA,KAAmB,IAAA,CAAK,MAAA,CAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA,CAC5I,MAAA,CAAO,SAAA,EAAW,wCAAwC,CAAA,CAC1D,MAAA,CAAO,UAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,gBAAA,EAAkB,6CAA6C,CAAA,CACtE,MAAA,CAAO,OAAO,MAA0B,OAAA,KAAY;AACnD,IAAA,IAAI;AAEF,MAAA,MAAM,aAAkBU,gBAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,aAAa,aAAa,CAAA;AACtE,MAAA,IAAI,MAAA;AAEJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,MAAMC,sBAAe,UAAU,CAAA;AAAA,MAC1C,SAAS,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA,CAAMT,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,wBAAwB,CAAA;AAC3D,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,uCAAuC,CAAC,CAAA;AAC9D,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,EAAE,iBAAA,EAAmB,kBAAA,EAAoB,sBAAqB,GAAI,MAAM,OAAO,iBAAiB,CAAA;AAGtG,MAAA,IAAI,WAAA,GAAc,IAAA;AAClB,MAAA,IAAI,CAAC,WAAA,EAAa;AAEhB,QAAA,WAAA,GAAc,OAAO,OAAA,IAAW,KAAA,CAAA;AAAA,MAClC;AACA,MAAA,IAAI,CAAC,WAAA,EAAa;AAEhB,QAAA,MAAM,WAAW,oBAAA,EAAqB;AACtC,QAAA,WAAA,GAAc,SAAS,OAAA,IAAW,KAAA,CAAA;AAAA,MACpC;AAEA,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,mCAAmC,CAAA;AACtE,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,8FAA8F,CAAC,CAAA;AACrH,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,eAAA,GAAmC,CAAC,UAAA,EAAY,YAAA,EAAc,eAAe,CAAA;AACnF,MAAA,IAAI,CAAC,eAAA,CAAgB,QAAA,CAAS,OAAA,CAAQ,SAA0B,CAAA,EAAG;AACjE,QAAA,OAAA,CAAQ,KAAA,CAAMA,yBAAM,GAAA,CAAI,QAAQ,GAAG,CAAA,mBAAA,EAAsB,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AAC5E,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,oDAAoD,CAAC,CAAA;AAC3E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,MAAA,MAAM,YAAA,GAAe,oBAAA,CAAqB,MAAA,EAAQ,OAAA,CAAQ,GAAG,CAAA;AAG7D,MAAA,MAAM,eAAe,kBAAA,CAAmB;AAAA,QACtC,OAAA,EAAS,QAAQ,GAAA;AAAI,OACtB,CAAA;AAGD,MAAA,MAAM,cAAc,iBAAA,CAAkB;AAAA,QACpC,YAAA;AAAA,QACA,QAAQ,MAAA,CAAO,IAAA;AAAA,QACf,cAAmBQ,gBAAA,CAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,EAAG,aAAa,2BAA2B;AAAA,OAChF,CAAA;AAKD,MAAA,MAAM,sBAAA,GAAyB;AAAA,QAC7B,cAAA;AAAA,QACA,eAAA;AAAA,QACA,wBAAA;AAAA,QACA;AAAA,OACF;AAGA,MAAA,MAAM,aAAa,MAAA,CAAO,IAAA;AAG1B,MAAA,MAAM,WAAA,GAAc,YAAY,kBAAA,EAAmB;AACnD,MAAA,MAAM,qBAAA,GAAwB,WAAA,CAAY,MAAA,GAAS,CAAA,GAC/C,WAAA,GACA,sBAAA;AACJ,MAAA,MAAM,wBAAwB,UAAA,EAAY,QAAA,EAAU,OAAA,IAAW,UAAA,EAAY,WAAW,EAAC;AAGvF,MAAA,MAAM,kBAAkB,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,QAAQ,OAAA,GAAU,qBAAA;AACvE,MAAA,MAAM,eAAA,GAAkB;AAAA,QACtB,GAAG,qBAAA;AAAA,QACH,GAAG,OAAA,CAAQ;AAAA,OACb;AAGA,MAAA,MAAM,SAAA,GAAY,QAAQ,GAAA,EAAI;AAC9B,MAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,MAAM,OAAO,MAAM,CAAA;AAG9C,MAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAY;AAEzC,MAAA,KAAA,MAAW,WAAW,eAAA,EAAiB;AACrC,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,OAAA,EAAS;AAAA,YACtC,GAAA,EAAK,SAAA;AAAA,YACL,GAAA,EAAK,IAAA;AAAA,YACL,KAAA,EAAO,IAAA;AAAA,YACP,MAAA,EAAQ;AAAA,WACT,CAAA;AACD,UAAA,OAAA,CAAQ,OAAA,CAAQ,CAAA,KAAA,KAAS,gBAAA,CAAiB,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,QACtD,SAAS,KAAA,EAAY;AACnB,UAAA,OAAA,CAAQ,KAAA,CAAMR,yBAAM,MAAA,CAAO,CAAA,0BAAA,EAA6B,OAAO,CAAA,GAAA,EAAM,KAAA,CAAM,OAAO,CAAA,CAAE,CAAC,CAAA;AAAA,QACvF;AAAA,MACF;AAGA,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,QAChC,MAAM,IAAA,CAAK,gBAAgB,CAAA,CAAE,GAAA,CAAI,OAAO,QAAA,KAAa;AACnD,UAAA,MAAM,QAAA,GAAgBQ,gBAAA,CAAA,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA;AAC9C,UAAA,MAAM,KAAA,GAAQ,MAAM,OAAO,aAAa,CAAA,CAAE,IAAA,CAAK,CAAAH,GAAAA,KAAMA,GAAAA,CAAG,IAAA,CAAK,QAAQ,CAAC,CAAA;AACtE,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,QAAA;AAAA,YACN,MAAM,KAAA,CAAM,IAAA;AAAA,YACZ,OAAO,KAAA,CAAM;AAAA,WACf;AAAA,QACF,CAAC;AAAA,OACH;AAMA,MAAA,MAAM,WAAA,GAA2B;AAAA,QAC/B,SAAA;AAAA,QACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,OAAA,EAAS,eAAA;AAAA,QACT,OAAA,EAAS,eAAA;AAAA;AAAA,QAET,WAAA,EAAa;AAAA,OACf;AAEA,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,WAAA;AACJ,MAAA,IAAI,aAAA;AAGJ,MAAA,IAAI,cAAc,YAAA,EAAc;AAE9B,QAAA,IAAI;AACF,UAAA,MAAM,EAAE,iBAAA,EAAAK,kBAAAA,EAAkB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,qBAAA,EAAA,EAAA,wBAAA,CAAA,CAAA;AAEpC,UAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAIV,wBAAAA,CAAM,IAAA,CAAK,6CAAwC,CAAC,CAAA;AAAA,UAClE;AAGA,UAAA,aAAA,GAAgB,MAAMU,mBAAkB,MAAA,EAAQ;AAAA,YAC9C,MAAA,EAAQ;AAAA,WACT,CAAA;AAED,UAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,YAAA,OAAA,CAAQ,IAAIV,wBAAAA,CAAM,GAAA,CAAI,CAAA,mBAAA,EAAsB,aAAa,EAAE,CAAC,CAAA;AAC5D,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,mDAAmD,CAAC,CAAA;AAAA,UAC5E,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU;AAAA,cACzB,IAAA,EAAM,2FAAA;AAAA,cACN,SAAA,EAAW;AAAA,aACb,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,UACb;AAAA,QACF,SAAS,KAAA,EAAY;AACnB,UAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,kCAAkC,CAAA;AACrE,UAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,KAAK,KAAA,CAAM,OAAO,EAAE,CAAC,CAAA;AAG7C,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,MAAA,CAAO,oBAAoB,CAAC,CAAA;AAC9C,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,uBAAuB,CAAA,EAAG;AACnD,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,wCAAwC,CAAC,CAAA;AAC/D,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,8CAA8C,CAAC,CAAA;AAAA,UACvE,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,uBAAuB,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,uBAAuB,CAAA,EAAG;AAC7G,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,+DAA+D,CAAC,CAAA;AACtF,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,wCAAwC,CAAC,CAAA;AAC/D,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,qCAAqC,CAAC,CAAA;AAC5D,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,+CAA+C,CAAC,CAAA;AAAA,UACxE,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA,EAAG;AACtD,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,iDAAiD,CAAC,CAAA;AACxE,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,uCAAuC,CAAC,CAAA;AAC9D,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,+CAA+C,CAAC,CAAA;AAAA,UACxE,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,KAAK,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,gBAAgB,CAAA,EAAG;AAC1F,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,wBAAA,EAA2B,MAAA,CAAO,YAAY,CAAA,CAAA,EAAK,MAAA,CAAe,UAAA,IAAc,OAAO,CAAA,CAAE,CAAC,CAAA;AAChH,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,6CAA6C,CAAC,CAAA;AACpE,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,wDAAwD,CAAC,CAAA;AAAA,UACjF,CAAA,MAAO;AAEL,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,6CAA6C,CAAC,CAAA;AACpE,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,wCAAwC,CAAC,CAAA;AAC/D,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,yBAAA,EAA4B,MAAA,CAAO,YAAY,CAAA,CAAA,EAAK,MAAA,CAAe,UAAA,IAAc,OAAO,CAAA,CAAE,CAAC,CAAA;AAAA,UACnH;AACA,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAGA,QAAA,MAAM,eAAA,GAAkB,MAAM,WAAA,CAAY,sBAAA;AAAA,UACxC,MAAA,CAAO,YAAA;AAAA,UACP,WAAA;AAAA,UACA,aAAA;AAAA,UACA;AAAA,YACE,GAAG,WAAA;AAAA,YACH,SAAA,EAAW,YAAA,IAAgB,MAAA,GAAU,MAAA,CAAmC,UAAA,GAAa,KAAA;AAAA;AACvF,SACF;AAEA,QAAA,IAAA,GAAO,eAAA;AACP,QAAA,WAAA,GAAc,eAAA,CAAgB,WAAA;AAAA,MAChC,CAAA,MAAO;AAGL,QAAA,IAAI;AACF,UAAA,MAAM,EAAE,iBAAA,EAAAU,kBAAAA,EAAkB,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,qBAAA,EAAA,EAAA,wBAAA,CAAA,CAAA;AAEpC,UAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAIV,wBAAAA,CAAM,IAAA,CAAK,6CAAwC,CAAC,CAAA;AAAA,UAClE;AAGA,UAAA,aAAA,GAAgB,MAAMU,mBAAkB,MAAA,EAAQ;AAAA,YAC9C,MAAA,EAAQ;AAAA,WACT,CAAA;AAED,UAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,YAAA,OAAA,CAAQ,IAAIV,wBAAAA,CAAM,GAAA,CAAI,CAAA,mBAAA,EAAsB,aAAa,EAAE,CAAC,CAAA;AAAA,UAC9D;AAAA,QACF,SAAS,KAAA,EAAY;AACnB,UAAA,OAAA,CAAQ,KAAA,CAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,kCAAkC,CAAA;AACrE,UAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,KAAK,KAAA,CAAM,OAAO,EAAE,CAAC,CAAA;AAC7C,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAGA,QAAA,IAAA,GAAO,MAAM,WAAA,CAAY,UAAA;AAAA,UACvB,MAAA,CAAO,YAAA;AAAA,UACP,WAAA;AAAA,UACA,SAAA;AAAA,UACA,EAAC;AAAA;AAAA,UACD;AAAA,SACF;AAKA,QAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AACd,QAAA,IAAA,CAAK,MAAA,GAAcQ,gBAAA,CAAA,IAAA,CAAK,aAAA,EAAe,UAAA,EAAY,WAAW,CAAA;AAAA,MAChE;AAEA,MAAA,IAAI,IAAA,CAAK,eAAe,CAAA,EAAG;AACzB,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU;AAAA,YACzB,OAAA,EAAS,WAAA;AAAA,YACT,cAAc,MAAA,CAAO,YAAA;AAAA,YACrB,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAA;AAAA,YAC1B,OAAO,EAAC;AAAA,YACR,MAAA,EAAQ,CAAA;AAAA,YACR,MAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS;AAAA,WACX,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,QACb,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAA,CAAIR,wBAAAA,CAAM,MAAA,CAAO,mBAAmB,CAAC,CAAA;AAAA,QAC/C;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,MAAM,MAAA,GAAS;AAAA,UACb,OAAA,EAAS,WAAA;AAAA,UACT,cAAc,MAAA,CAAO,YAAA;AAAA,UACrB,aAAa,OAAA,CAAQ,GAAA;AAAA,UACrB,MAAA,EAAQ,YAAA;AAAA,UACR,SAAA;AAAA,UACA,MAAA,EAAQ,QAAQ,MAAA,IAAU,KAAA;AAAA,UAC1B,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAA;AAAA,UAC1B,IAAA,EAAM;AAAA,YACJ,YAAY,IAAA,CAAK,UAAA;AAAA,YACjB,YAAY,IAAA,CAAK,UAAA;AAAA,YACjB,eAAe,IAAA,CAAK,aAAA;AAAA,YACpB,SAAA,EAAW,KAAK,SAAA,CAAU,MAAA;AAAA,YAC1B,OAAA,EAAS,KAAK,OAAA,CAAQ;AAAA,WACxB;AAAA,UACA,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,YAC1B,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,WAAW,CAAA,CAAE,SAAA;AAAA,YACb,MAAM,CAAA,CAAE;AAAA,WACV,CAAE;AAAA,SACJ;AAEA,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,UAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU;AAAA,YACzB,GAAG,MAAA;AAAA,YACH,MAAA,EAAQ;AAAA,WACV,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AACX,UAAA;AAAA,QACF;AAGA,QAAA,MAAMW,OAAAA,GAAS,MAAM,WAAA,CAAY,WAAA,CAAY,MAAM,WAAW,CAAA;AAG9D,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,CAACA,OAAAA,CAAO,OAAA,IAAWA,OAAAA,CAAO,WAAW,CAAA,EAAG;AAC1C,UAAA,MAAA,GAAS,SAAA;AAAA,QACX,CAAA,MAAA,IAAW,CAACA,OAAAA,CAAO,OAAA,IAAWA,OAAAA,CAAO,SAAS,CAAA,IAAK,IAAA,CAAK,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC5E,UAAA,MAAA,GAAS,SAAA;AAAA,QACX,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,SAAA;AAAA,QACX;AAEA,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU;AAAA,UACzB,GAAG,MAAA;AAAA,UACH,MAAA;AAAA,UACA,MAAA,EAAQ;AAAA,YACN,SAASA,OAAAA,CAAO,OAAA;AAAA,YAChB,QAAQA,OAAAA,CAAO,MAAA;AAAA,YACf,QAAQA,OAAAA,CAAO,MAAA;AAAA,YACf,SAASA,OAAAA,CAAO,OAAA;AAAA,YAChB,UAAUA,OAAAA,CAAO,QAAA;AAAA,YACjB,QAAQA,OAAAA,CAAO;AAAA;AACjB,SACF,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AACX,QAAA;AAAA,MACF;AAGA,MAAA,OAAA,CAAQ,GAAA,CAAIX,wBAAAA,CAAM,IAAA,CAAK,aAAa,CAAC,CAAA;AACrC,MAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmBA,wBAAAA,CAAM,IAAA,CAAK,WAAW,CAAC,CAAA,CAAE,CAAA;AACxD,MAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmBA,wBAAAA,CAAM,KAAK,MAAA,CAAO,YAAY,CAAC,CAAA,CAAE,CAAA;AAChE,MAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmBA,wBAAAA,CAAM,IAAA,CAAK,QAAQ,GAAG,CAAC,CAAA,EAAA,EAAK,YAAY,CAAA,CAAA,CAAG,CAAA;AAC1E,MAAA,OAAA,CAAQ,IAAI,CAAA,gBAAA,EAAmBA,wBAAAA,CAAM,IAAA,CAAK,SAAS,CAAC,CAAA,CAAE,CAAA;AACtD,MAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmBA,wBAAAA,CAAM,IAAA,CAAK,KAAK,UAAA,CAAW,QAAA,EAAU,CAAC,CAAA,CAAE,CAAA;AACvE,MAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmBA,wBAAAA,CAAM,IAAA,CAAKM,kBAAY,IAAA,CAAK,UAAU,CAAC,CAAC,CAAA,CAAE,CAAA;AACzE,MAAA,IAAI,KAAK,aAAA,EAAe;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmBN,wBAAAA,CAAM,GAAA,CAAIY,qBAAe,IAAA,CAAK,aAAa,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MAChF;AAGA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,QAAA,OAAA,CAAQ,GAAA,CAAIZ,wBAAAA,CAAM,IAAA,CAAK,sBAAsB,CAAC,CAAA;AAC9C,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmBA,wBAAAA,CAAM,IAAA,CAAK,WAAA,CAAY,MAAM,YAAA,CAAa,QAAA,EAAU,CAAC,CAAA,MAAA,CAAQ,CAAA;AAC5F,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmBA,wBAAAA,CAAM,IAAA,CAAK,WAAA,CAAY,MAAM,YAAA,CAAa,QAAA,EAAU,CAAC,CAAA,MAAA,CAAQ,CAAA;AAC5F,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mBAAA,EAAsBA,wBAAAA,CAAM,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,cAAA,CAAe,MAAA,CAAO,QAAA,EAAU,CAAC,CAAA,CAAE,CAAA;AAClG,QAAA,IAAI,WAAA,CAAY,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AAC/C,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,IAAA,EAAO,YAAY,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,EAAE,CAAC,CAAA;AACvF,UAAA,IAAI,WAAA,CAAY,KAAA,CAAM,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG;AAC/C,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,YAAA,EAAe,WAAA,CAAY,MAAM,cAAA,CAAe,MAAA,GAAS,CAAC,CAAA,KAAA,CAAO,CAAC,CAAA;AAAA,UAC1F;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gBAAA,EAAmBA,wBAAAA,CAAM,GAAA,CAAIY,oBAAA,CAAe,YAAY,KAAA,CAAM,UAAU,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MAC1F;AAEA,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAEd,MAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,GAAA,CAAIZ,yBAAM,MAAA,CAAO,CAAA,OAAA,EAAK,KAAK,SAAA,CAAU,MAAM,sBAAsB,CAAC,CAAA;AAC1E,QAAA,KAAA,MAAW,YAAY,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AACjD,UAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,MAAA,CAAO,YAAO,QAAA,CAAS,IAAI,EAAE,CAAC,CAAA;AAAA,QAClD;AACA,QAAA,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC7B,UAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI,CAAA,UAAA,EAAa,KAAK,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,KAAA,CAAO,CAAC,CAAA;AAAA,QACtE;AACA,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,MAChB;AAEA,MAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC3B,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI,CAAA,EAAG,KAAK,OAAA,CAAQ,MAAM,6BAA6B,CAAC,CAAA;AAC1E,QAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,MAChB;AAEA,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,yBAAyB,CAAC,CAAA;AAEjD,QAAA,MAAM,WAAA,GAAc,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAG,EAAE,CAAA;AAC1C,QAAA,KAAA,MAAW,QAAQ,WAAA,EAAa;AAC9B,UAAA,MAAM,QAAQ,SAAA,KAAc,UAAA,GAAa,QAAA,GAAM,SAAA,KAAc,eAAe,QAAA,GAAM,QAAA;AAClF,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,KAAc,QAAA,GAAWA,wBAAAA,CAAM,KAAA,GACrC,IAAA,CAAK,SAAA,KAAc,QAAA,GAAWA,wBAAAA,CAAM,MAAA,GACpCA,wBAAAA,CAAM,GAAA;AACrB,UAAA,OAAA,CAAQ,GAAA;AAAA,YACNA,wBAAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,YACtB,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,YAChC,IAAA,CAAK,IAAA;AAAA,YACLA,wBAAAA,CAAM,IAAI,CAAA,CAAA,EAAIM,iBAAAA,CAAY,KAAK,IAAA,IAAQ,CAAC,CAAC,CAAA,CAAA,CAAG;AAAA,WAC9C;AAAA,QACF;AAEA,QAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,EAAA,EAAI;AAC1B,UAAA,OAAA,CAAQ,GAAA,CAAIN,yBAAM,GAAA,CAAI,CAAA,UAAA,EAAa,KAAK,KAAA,CAAM,MAAA,GAAS,EAAE,CAAA,WAAA,CAAa,CAAC,CAAA;AAAA,QACzE;AAEA,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI;AAAA,OAAA,EAAY,IAAA,CAAK,UAAU,CAAA,QAAA,EAAWM,iBAAAA,CAAY,KAAK,UAAU,CAAC,GAAG,CAAC,CAAA;AAC5F,QAAA,OAAA,CAAQ,GAAA,CAAIN,wBAAAA,CAAM,GAAA,CAAI,wCAAwC,CAAC,CAAA;AAC/D,QAAA;AAAA,MACF;AAGA,MAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,cAAc,CAAC,CAAA;AAEtC,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,WAAA,CAAY,MAAM,WAAW,CAAA;AAC9D,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAG9B,MAAA,IAAI,SAAA,KAAc,UAAA,IAAc,aAAA,IAAiB,MAAA,CAAO,SAAS,CAAA,EAAG;AAClE,QAAA,IAAI;AACF,UAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,IAAA,CAAK,oCAAoC,CAAC,CAAA;AAAA,UAC9D;AAEA,UAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,qBAAqB,CAAA;AAC1D,UAAA,MAAM,cAAc,IAAI,WAAA,CAAY,EAAE,QAAA,EAAU,QAAA,IAAY,aAAa,CAAA;AAGzE,UAAA,WAAA,CAAY,QAAA,EAAS;AAGrB,UAAA,IAAI,WAAA,CAAY,SAAQ,EAAG;AACzB,YAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,cAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,oDAAoD,CAAC,CAAA;AAAA,YAC7E;AAAA,UACF,CAAA,MAAO;AAEL,YAAA,WAAA,CAAY,MAAA,CAAO;AAAA,cACjB,OAAA,EAAS,CAAA,KAAA,EAAQ,MAAA,CAAO,MAAM,eAAe,WAAW,CAAA;AAAA,aACzD,CAAA;AAGD,YAAA,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAEnB,YAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,cAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,sCAAsC,CAAC,CAAA;AAAA,YAC/D;AAAA,UACF;AAAA,QACF,SAAS,KAAA,EAAY;AACnB,UAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,yBAAyB,CAAA,EAAG,MAAM,OAAO,CAAA;AAAA,QACnE;AAAA,MACF;AAGA,MAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,MAAA,IAAI,OAAO,OAAA,EAAS;AAClB,QAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,KAAA,CAAM,CAAA,kCAAA,CAA+B,CAAC,CAAA;AACxD,QAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,aAAa,MAAA,CAAO,MAAM,QAAQ,CAAC,CAAA;AACzD,QAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,UAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,cAAc,MAAA,CAAO,OAAO,QAAQ,CAAC,CAAA;AAAA,QAC7D;AACA,QAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI,CAAA,YAAA,EAAeY,qBAAe,QAAQ,CAAC,EAAE,CAAC,CAAA;AAAA,MAClE,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAIZ,wBAAAA,CAAM,MAAA,CAAO,CAAA,iCAAA,CAA8B,CAAC,CAAA;AACxD,QAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,KAAA,CAAM,aAAa,MAAA,CAAO,MAAM,QAAQ,CAAC,CAAA;AAC3D,QAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,aAAa,MAAA,CAAO,MAAM,QAAQ,CAAC,CAAA;AACzD,QAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,UAAA,OAAA,CAAQ,IAAIA,wBAAAA,CAAM,GAAA,CAAI,cAAc,MAAA,CAAO,OAAO,QAAQ,CAAC,CAAA;AAAA,QAC7D;AAEA,QAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,UAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,UAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,SAAS,CAAC,CAAA;AAChC,UAAA,KAAA,MAAW,SAAS,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAC7C,YAAA,OAAA,CAAQ,GAAA,CAAIA,wBAAAA,CAAM,GAAA,CAAI,CAAA,SAAA,EAAO,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,CAAE,CAAC,CAAA;AAAA,UAC5D;AACA,UAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,YAAA,OAAA,CAAQ,GAAA,CAAIA,yBAAM,GAAA,CAAI,CAAA,UAAA,EAAa,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,YAAA,CAAc,CAAC,CAAA;AAAA,UAC5E;AAAA,QACF;AAAA,MACF;AAAA,IAEF,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,MAAMA,wBAAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,MAAM,OAAO,CAAA;AAChD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AdzfA,IAAMa,WAAAA,GAAaC,kBAAc,aAAe,CAAA;AAChD,IAAMC,WAAA,GAAYC,cAAQH,WAAU,CAAA;AACpC,IAAM,WAAA,GAAc,KAAK,KAAA,CAAMI,eAAA,CAAaC,WAAKH,WAAA,EAAW,iBAAiB,CAAA,EAAG,OAAO,CAAC,CAAA;AACxF,IAAM,UAAU,WAAA,CAAY,OAAA;AAK5B,SAAS,SAAA,GAAqB;AAC5B,EAAA,MAAM,OAAA,GAAU,IAAIjB,iBAAAA,CAAQ,gBAAgB,CAAA;AAE5C,EAAA,OAAA,CACG,WAAA,CAAY,iEAAiE,CAAA,CAC7E,OAAA,CAAQ,OAAO,CAAA;AAGlB,EAAA,OAAA,CAAQ,UAAA,CAAW,yBAAyB,CAAA;AAC5C,EAAA,OAAA,CAAQ,UAAA,CAAW,qBAAqB,CAAA;AACxC,EAAA,OAAA,CAAQ,UAAA,CAAW,uBAAuB,CAAA;AAG1C,EAAA,OAAA,CAAQ,UAAA,CAAW,sBAAsB,CAAA;AAGzC,EAAA,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AACrC,EAAA,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,EAAA,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,EAAA,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AAGvC,EAAA,OAAA,CAAQ,UAAA,CAAW,aAAa,CAAA;AAEhC,EAAA,OAAO,OAAA;AACT;AAKA,eAAe,IAAA,GAAO;AACpB,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,IAAA,MAAM,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA;AAAA,EACvC,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAC9E,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;AAGA,IAAA,EAAK","file":"cli.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\r\n * CodexClient - Re-exported from SDK\r\n *\r\n * The CodexClient facade now lives in the SDK (@fractary/codex) so both\r\n * CLI and MCP server share the same implementation. This module re-exports\r\n * for backward compatibility with existing CLI code.\r\n */\r\n\r\nexport {\r\n CodexClient,\r\n createCodexClient,\r\n type CodexClientOptions,\r\n type ClientFetchOptions,\r\n type ClientFetchResult,\r\n} from '@fractary/codex';\r\n\r\n// Re-export SDK error classes for convenience\r\nexport {\r\n CodexError,\r\n ConfigurationError,\r\n ValidationError,\r\n PermissionDeniedError\r\n} from '@fractary/codex';\r\n","/**\n * Codex Repository Utilities\n *\n * Handles cloning and updating the central codex repository for routing-aware sync.\n */\n\nimport * as path from 'path';\nimport * as os from 'os';\nimport * as fs from 'fs/promises';\nimport { spawn } from 'child_process';\nimport type { CodexYamlConfig } from '../config/config-types';\n\n/**\n * Execute a command using spawn (safer than exec)\n */\nfunction spawnAsync(command: string, args: string[], options: { cwd: string }): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n ...options,\n env: process.env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n\n child.on('close', (code) => {\n if (code !== 0) {\n const error: any = new Error(stderr || `Command exited with code ${code}`);\n error.code = code;\n reject(error);\n } else {\n resolve(stdout);\n }\n });\n });\n}\n\n/**\n * Extended config interface with codex_repo field\n */\ninterface CodexConfigWithRepo extends CodexYamlConfig {\n codex_repo?: string;\n}\n\n/**\n * Sanitize a path component to prevent path traversal attacks\n * Removes dangerous sequences like ../ and path separators\n */\nfunction sanitizePathComponent(component: string): string {\n if (!component || typeof component !== 'string') {\n throw new Error('Path component must be a non-empty string');\n }\n\n // Remove path traversal sequences and path separators\n const sanitized = component\n .replace(/\\.\\./g, '')\n .replace(/[/\\\\]/g, '')\n .trim();\n\n if (!sanitized) {\n throw new Error(`Invalid path component: ${component}`);\n }\n\n return sanitized;\n}\n\n/**\n * Validate a GitHub organization or repository name\n * Ensures it contains only safe characters\n */\nfunction validateGitHubName(name: string, type: 'organization' | 'repository'): void {\n if (!name || typeof name !== 'string') {\n throw new Error(`GitHub ${type} name must be a non-empty string`);\n }\n\n // GitHub names can only contain alphanumeric characters, hyphens, underscores, and dots\n if (!/^[a-zA-Z0-9._-]+$/.test(name)) {\n throw new Error(`Invalid GitHub ${type} name: ${name}. Must contain only alphanumeric characters, hyphens, underscores, and dots.`);\n }\n\n // Additional checks\n if (name.startsWith('.') || name.startsWith('-')) {\n throw new Error(`GitHub ${type} name cannot start with a dot or hyphen: ${name}`);\n }\n}\n\n/**\n * Get the temporary directory path for codex clone\n * Includes process ID to prevent race conditions\n */\nexport function getTempCodexPath(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repo || 'codex';\n\n // Sanitize path components to prevent path traversal\n const sanitizedOrg = sanitizePathComponent(config.organization);\n const sanitizedRepo = sanitizePathComponent(codexRepo);\n\n // Include process ID to prevent concurrent sync conflicts\n return path.join(\n os.tmpdir(),\n 'fractary-codex-clone',\n `${sanitizedOrg}-${sanitizedRepo}-${process.pid}`\n );\n}\n\n/**\n * Check if a directory is a valid git repository\n */\nexport async function isValidGitRepo(repoPath: string): Promise<boolean> {\n try {\n const gitDir = path.join(repoPath, '.git');\n const stats = await fs.stat(gitDir);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\n/**\n * Construct the git repository URL from config\n */\nexport function getCodexRepoUrl(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repo || 'codex';\n\n // Validate GitHub names to prevent URL injection\n validateGitHubName(config.organization, 'organization');\n validateGitHubName(codexRepo, 'repository');\n\n // Default to GitHub\n // Format: https://github.com/{org}/{repo}.git\n return `https://github.com/${config.organization}/${codexRepo}.git`;\n}\n\n/**\n * Execute a git command in a directory using spawn (safe from command injection)\n */\nasync function execGit(repoPath: string, args: string[]): Promise<string> {\n try {\n const stdout = await spawnAsync('git', args, {\n cwd: repoPath,\n });\n\n return stdout;\n } catch (error: any) {\n // Provide specific error messages based on error code\n if (error.code === 'ENOENT') {\n throw new Error(`Git command not found. Ensure git is installed and in PATH.`);\n }\n if (error.code === 'EACCES') {\n throw new Error(`Permission denied accessing repository at ${repoPath}`);\n }\n if (error.code === 128) {\n throw new Error(`Git authentication failed. Check your credentials and repository access.`);\n }\n // For other errors, include the original message\n throw error;\n }\n}\n\n/**\n * Clone a git repository using spawn (safe from command injection)\n */\nasync function gitClone(\n url: string,\n targetPath: string,\n options?: { branch?: string; depth?: number }\n): Promise<void> {\n // Ensure parent directory exists\n const parentDir = path.dirname(targetPath);\n await fs.mkdir(parentDir, { recursive: true });\n\n // Build args array (safe from command injection)\n const args = ['clone'];\n\n if (options?.depth) {\n // Validate depth is a positive integer\n if (!Number.isInteger(options.depth) || options.depth <= 0) {\n throw new Error(`Invalid depth parameter: ${options.depth}. Must be a positive integer.`);\n }\n args.push('--depth', String(options.depth));\n }\n\n if (options?.branch) {\n // Branch validation already done in gitCheckout, but validate here too\n if (!/^[\\w\\-./]+$/.test(options.branch)) {\n throw new Error(`Invalid branch name: ${options.branch}`);\n }\n args.push('--branch', options.branch);\n }\n\n // Add single-branch flag for performance\n args.push('--single-branch');\n\n args.push(url, targetPath);\n\n // Execute clone using spawn (parent directory is cwd)\n await spawnAsync('git', args, { cwd: parentDir });\n}\n\n/**\n * Fetch updates from remote\n */\nasync function gitFetch(repoPath: string, branch?: string): Promise<void> {\n // For shallow clones, fetch the specific branch if provided\n if (branch) {\n // Validate branch name\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['fetch', 'origin', `${branch}:${branch}`]);\n } else {\n await execGit(repoPath, ['fetch', 'origin']);\n }\n}\n\n/**\n * Checkout a branch\n */\nasync function gitCheckout(repoPath: string, branch: string): Promise<void> {\n // Validate branch name to prevent command injection\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['checkout', branch]);\n}\n\n/**\n * Pull latest changes\n */\nasync function gitPull(repoPath: string): Promise<void> {\n await execGit(repoPath, ['pull']);\n}\n\n/**\n * Ensure the codex repository is cloned and up-to-date\n *\n * This function will:\n * 1. Check if the repository already exists in temp directory\n * 2. If it exists and is valid, update it (fetch + checkout + pull)\n * 3. If it doesn't exist, clone it fresh (shallow clone for efficiency)\n * 4. Return the path to the cloned repository\n *\n * @param config - Codex configuration\n * @param options - Clone options\n * @returns Path to the cloned codex repository\n */\nexport async function ensureCodexCloned(\n config: CodexConfigWithRepo,\n options?: { force?: boolean; branch?: string }\n): Promise<string> {\n const tempPath = getTempCodexPath(config);\n const branch = options?.branch || 'main';\n\n // If already exists and not forcing a fresh clone, update it\n if (await isValidGitRepo(tempPath) && !options?.force) {\n try {\n await gitFetch(tempPath, branch);\n await gitCheckout(tempPath, branch);\n await gitPull(tempPath);\n return tempPath;\n } catch (error: any) {\n // If update fails, remove and clone fresh\n console.warn(`Failed to update existing clone: ${error.message}`);\n console.warn(`Removing and cloning fresh...`);\n await fs.rm(tempPath, { recursive: true, force: true });\n }\n }\n\n // Clone fresh\n const repoUrl = getCodexRepoUrl(config);\n\n // Remove existing directory if present\n try {\n await fs.rm(tempPath, { recursive: true, force: true });\n } catch (error: any) {\n // Log but don't fail - directory might not exist yet\n console.warn(`Could not remove existing directory ${tempPath}: ${error.message}`);\n }\n\n await gitClone(repoUrl, tempPath, {\n branch,\n depth: 1, // Shallow clone for efficiency\n });\n\n return tempPath;\n}\n","/**\n * Fractary Codex CLI - Command-line interface for knowledge management\n *\n * Pull-based document retrieval with codex:// URI scheme and intelligent caching.\n *\n * @see https://github.com/fractary/codex\n */\n\nimport { Command } from 'commander';\nimport { configInitializeCommand, configUpdateCommand, configValidateCommand } from './commands/config/index.js';\nimport { documentFetchCommand } from './commands/document/index.js';\nimport { cacheListCommand, cacheClearCommand, cacheStatsCommand, cacheHealthCommand } from './commands/cache/index.js';\nimport { syncCommand } from './commands/sync.js';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\n// Read version from package.json\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\nconst VERSION = packageJson.version;\n\n/**\n * Create and configure the CLI\n */\nfunction createCLI(): Command {\n const program = new Command('fractary-codex');\n\n program\n .description('Centralized knowledge management and distribution for AI agents')\n .version(VERSION);\n\n // Config commands (split into distinct operations)\n program.addCommand(configInitializeCommand()); // config-init: Initialize codex section\n program.addCommand(configUpdateCommand()); // Update codex section\n program.addCommand(configValidateCommand()); // Validate codex config\n\n // Document commands\n program.addCommand(documentFetchCommand()); // Fetch documents by URI\n\n // Cache commands\n program.addCommand(cacheListCommand()); // List cache entries\n program.addCommand(cacheClearCommand()); // Clear cache entries\n program.addCommand(cacheStatsCommand()); // Display cache statistics\n program.addCommand(cacheHealthCommand()); // Run diagnostics\n\n // Sync commands\n program.addCommand(syncCommand()); // Bidirectional sync\n\n return program;\n}\n\n/**\n * Main execution\n */\nasync function main() {\n try {\n const program = createCLI();\n await program.parseAsync(process.argv);\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n// Run the CLI\nmain();\n","/**\r\n * Config commands\r\n *\r\n * Three distinct operations for codex configuration management:\r\n * - config-init: Add codex section to existing base config\r\n * - config-update: Update fields in existing codex section\r\n * - config-validate: Validate codex configuration (read-only)\r\n */\r\n\r\nexport { configInitializeCommand } from './initialize.js';\r\nexport { configUpdateCommand } from './update.js';\r\nexport { configValidateCommand } from './validate.js';\r\n\r\n// Re-export SDK utilities used by the plugin\r\nexport {\r\n installMcpServer,\r\n validateNameFormat,\r\n discoverCodexRepo,\r\n type McpInstallResult,\r\n type DiscoverCodexRepoResult,\r\n} from '@fractary/codex';\r\n\r\n// Deprecated: old monolithic configure command\r\nexport { configureCommand } from './init.js';\r\n","/**\n * config-init command\n *\n * Adds the codex section to an existing .fractary/config.yaml (created by @fractary/core).\n * Sets up codex-specific directories, gitignore entries, and MCP server configuration.\n *\n * Requires: .fractary/config.yaml to exist (run `fractary config-initialize` first)\n * Fails if: codex section already exists (unless --force)\n */\n\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport * as path from 'path'\nimport {\n createConfigManager,\n validateNameFormat,\n resolveOrganization,\n type DiscoverCodexRepoResult,\n} from '@fractary/codex'\n\nexport function configInitializeCommand(): Command {\n const cmd = new Command('config-init')\n\n cmd\n .description('Initialize codex section in .fractary/config.yaml (requires base config from @fractary/core)')\n .option('--org <slug>', 'Organization slug (e.g., \"fractary\")')\n .option('--project <name>', 'Project name (default: derived from directory)')\n .option('--codex-repo <name>', 'Codex repository name (e.g., \"codex.fractary.com\")')\n .option('--sync-preset <name>', 'Sync preset (standard, minimal)', 'standard')\n .option('--force', 'Overwrite existing codex section')\n .option('--no-mcp', 'Skip MCP server installation')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const configManager = createConfigManager(process.cwd())\n\n if (!options.json) {\n console.log(chalk.blue('Initializing codex configuration...\\n'))\n }\n\n // Resolve organization\n let org = options.org\n\n if (!org) {\n org = await configManager.detectOrganization()\n }\n\n if (!org) {\n try {\n org = resolveOrganization({\n repoName: path.basename(process.cwd()),\n })\n } catch {\n // continue\n }\n }\n\n if (!org) {\n org = path.basename(process.cwd()).split('-')[0] || 'default'\n if (!options.json) {\n console.log(chalk.yellow(`⚠ Could not detect organization, using: ${org}`))\n console.log(chalk.dim(' Use --org <slug> to specify explicitly\\n'))\n }\n } else if (!options.json) {\n console.log(chalk.dim(`Organization: ${chalk.cyan(org)}\\n`))\n }\n\n // Validate organization\n const orgValidation = validateNameFormat(org, 'organization')\n if (!orgValidation.valid) {\n if (options.json) {\n console.log(JSON.stringify({ error: orgValidation.error }, null, 2))\n } else {\n console.error(chalk.red('Error:'), orgValidation.error)\n }\n process.exit(1)\n }\n\n // Resolve project\n let project = options.project\n if (!project) {\n project = configManager.detectProject()\n if (!options.json) {\n console.log(chalk.dim(`Project: ${chalk.cyan(project)}\\n`))\n }\n }\n\n // Resolve codex repository\n let codexRepo = options.codexRepo\n\n if (codexRepo) {\n const repoValidation = validateNameFormat(codexRepo, 'repository')\n if (!repoValidation.valid) {\n if (options.json) {\n console.log(JSON.stringify({ error: repoValidation.error }, null, 2))\n } else {\n console.error(chalk.red('Error:'), repoValidation.error)\n }\n process.exit(1)\n }\n if (!options.json) {\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)}\\n`))\n }\n } else {\n const discoveryResult: DiscoverCodexRepoResult = await configManager.discoverCodexRepo(org)\n if (discoveryResult.repo) {\n codexRepo = discoveryResult.repo\n if (!options.json) {\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)} (auto-discovered)\\n`))\n }\n } else if (!options.json) {\n if (discoveryResult.message) {\n console.log(chalk.dim(` Note: ${discoveryResult.message}\\n`))\n }\n }\n }\n\n if (!codexRepo) {\n codexRepo = `codex.${org}.com`\n if (!options.json) {\n console.log(chalk.yellow(`⚠ Could not discover codex repository in organization '${org}'`))\n console.log(chalk.dim(` Using default: ${chalk.cyan(codexRepo)}\\n`))\n }\n }\n\n // Initialize codex section\n const result = await configManager.initializeCodexSection({\n organization: org,\n project,\n codexRepo,\n syncPreset: options.syncPreset,\n force: options.force,\n skipMcp: options.mcp === false,\n })\n\n // JSON output\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n configPath: result.configPath,\n codexSectionCreated: result.codexSectionCreated,\n organization: org,\n project,\n codexRepo,\n directories: result.directories,\n gitignore: result.gitignore,\n mcp: result.mcp,\n },\n null,\n 2\n )\n )\n return\n }\n\n // Human-readable output\n console.log('Setting up codex directories...')\n for (const dir of result.directories.created) {\n console.log(chalk.green('✓'), chalk.dim(dir + '/'))\n }\n for (const dir of result.directories.alreadyExisted) {\n console.log(chalk.dim(' ' + dir + '/ (exists)'))\n }\n\n if (result.gitignore.created) {\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (created)'))\n } else if (result.gitignore.updated) {\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (updated)'))\n } else {\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (exists)'))\n }\n\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (codex section added)'))\n\n if (result.mcp) {\n if (result.mcp.alreadyInstalled) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (already configured)'))\n } else if (result.mcp.migrated) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (migrated from old format)'))\n } else if (result.mcp.installed) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (created)'))\n }\n }\n\n console.log(chalk.green('\\n✓ Codex configuration initialized successfully!\\n'))\n\n console.log(chalk.bold('Configuration:'))\n console.log(chalk.dim(` Organization: ${org}`))\n console.log(chalk.dim(` Project: ${project}`))\n console.log(chalk.dim(` Codex Repository: ${codexRepo}`))\n\n console.log(chalk.bold('\\nNext steps:'))\n console.log(chalk.dim(' 1. Restart Claude Code to load the MCP server'))\n console.log(chalk.dim(` 2. Verify codex repository access: gh repo view ${org}/${codexRepo}`))\n console.log(chalk.dim(' 3. Run first sync: /fractary-codex:sync --from-codex --dry-run'))\n } catch (error: any) {\n if (options.json) {\n console.log(JSON.stringify({ error: error.message }, null, 2))\n } else {\n console.error(chalk.red('Error:'), error.message)\n }\n process.exit(1)\n }\n })\n\n return cmd\n}\n","/**\n * config-update command\n *\n * Updates specific fields in the existing codex section of .fractary/config.yaml.\n * Only modifies the fields that are explicitly provided.\n *\n * Requires: codex section to exist (run `config-init` first)\n */\n\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport {\n createConfigManager,\n type CodexUpdateOptions,\n} from '@fractary/codex'\n\nexport function configUpdateCommand(): Command {\n const cmd = new Command('config-update')\n\n cmd\n .description('Update codex configuration fields in .fractary/config.yaml')\n .option('--org <slug>', 'Update organization slug')\n .option('--project <name>', 'Update project name')\n .option('--codex-repo <name>', 'Update codex repository name')\n .option('--sync-preset <name>', 'Update sync preset (standard, minimal)')\n .option('--no-mcp', 'Skip MCP server update')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const configManager = createConfigManager(process.cwd())\n\n // Build update options from provided flags\n const updateOptions: CodexUpdateOptions = {\n skipMcp: options.mcp === false,\n }\n\n let hasUpdates = false\n\n if (options.org !== undefined) {\n updateOptions.organization = options.org\n hasUpdates = true\n }\n\n if (options.project !== undefined) {\n updateOptions.project = options.project\n hasUpdates = true\n }\n\n if (options.codexRepo !== undefined) {\n updateOptions.codexRepo = options.codexRepo\n hasUpdates = true\n }\n\n if (options.syncPreset !== undefined) {\n updateOptions.syncPreset = options.syncPreset\n hasUpdates = true\n }\n\n if (!hasUpdates) {\n if (options.json) {\n console.log(JSON.stringify({ error: 'No fields to update. Provide at least one of: --org, --project, --codex-repo, --sync-preset' }, null, 2))\n } else {\n console.error(chalk.red('Error:'), 'No fields to update. Provide at least one of: --org, --project, --codex-repo, --sync-preset')\n }\n process.exit(1)\n }\n\n if (!options.json) {\n console.log(chalk.blue('Updating codex configuration...\\n'))\n }\n\n const result = await configManager.updateCodexSection(updateOptions)\n\n // JSON output\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n configPath: result.configPath,\n fieldsUpdated: result.fieldsUpdated,\n mcp: result.mcp,\n },\n null,\n 2\n )\n )\n return\n }\n\n // Human-readable output\n if (result.fieldsUpdated.length === 0) {\n console.log(chalk.yellow('No fields were updated.'))\n return\n }\n\n for (const field of result.fieldsUpdated) {\n console.log(chalk.green('✓'), chalk.dim(`Updated: ${field}`))\n }\n\n if (result.mcp) {\n if (result.mcp.alreadyInstalled) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (already configured)'))\n } else if (result.mcp.installed) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (updated)'))\n }\n }\n\n console.log(chalk.green('\\n✓ Codex configuration updated successfully!'))\n } catch (error: any) {\n if (options.json) {\n console.log(JSON.stringify({ error: error.message }, null, 2))\n } else {\n console.error(chalk.red('Error:'), error.message)\n }\n process.exit(1)\n }\n })\n\n return cmd\n}\n","/**\n * config-validate command\n *\n * Validates the codex section of .fractary/config.yaml.\n * Read-only operation - never modifies any files.\n *\n * Checks: schema structure, field formats, directory existence, MCP config, gitignore.\n */\n\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport { createConfigManager } from '@fractary/codex'\n\nexport function configValidateCommand(): Command {\n const cmd = new Command('config-validate')\n\n cmd\n .description('Validate codex configuration in .fractary/config.yaml (read-only)')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const configManager = createConfigManager(process.cwd())\n\n if (!options.json) {\n console.log(chalk.blue('Validating codex configuration...\\n'))\n }\n\n const result = await configManager.validateCodexConfig()\n\n // JSON output\n if (options.json) {\n console.log(JSON.stringify(result, null, 2))\n if (!result.valid) {\n process.exit(1)\n }\n return\n }\n\n // Human-readable output\n if (result.errors.length > 0) {\n console.log(chalk.red.bold('Errors:'))\n for (const error of result.errors) {\n console.log(chalk.red(' ✗'), `${error.field}: ${error.message}`)\n }\n console.log()\n }\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow.bold('Warnings:'))\n for (const warning of result.warnings) {\n console.log(chalk.yellow(' ⚠'), `${warning.field}: ${warning.message}`)\n }\n console.log()\n }\n\n if (result.valid) {\n if (result.warnings.length === 0) {\n console.log(chalk.green('✓ Codex configuration is valid with no warnings.'))\n } else {\n console.log(chalk.green('✓ Codex configuration is valid'), chalk.yellow(`(${result.warnings.length} warning${result.warnings.length > 1 ? 's' : ''})`))\n }\n } else {\n console.log(chalk.red(`✗ Codex configuration is invalid (${result.errors.length} error${result.errors.length > 1 ? 's' : ''})`))\n process.exit(1)\n }\n } catch (error: any) {\n if (options.json) {\n console.log(JSON.stringify({ error: error.message }, null, 2))\n } else {\n console.error(chalk.red('Error:'), error.message)\n }\n process.exit(1)\n }\n })\n\n return cmd\n}\n","/**\r\n * Configure Codex project command\r\n *\r\n * Creates .fractary/config.yaml (unified config) using SDK's ConfigManager.\r\n * This command is a thin wrapper around the SDK's centralized configuration logic.\r\n */\r\n\r\nimport { Command } from 'commander'\r\nimport chalk from 'chalk'\r\nimport * as path from 'path'\r\nimport {\r\n createConfigManager,\r\n validateNameFormat,\r\n resolveOrganization,\r\n type DiscoverCodexRepoResult,\r\n} from '@fractary/codex'\r\n\r\nexport function configureCommand(): Command {\r\n const cmd = new Command('configure')\r\n\r\n cmd\r\n .description('Initialize unified Fractary configuration (.fractary/config.yaml)')\r\n .option('--org <slug>', 'Organization slug (e.g., \"fractary\")')\r\n .option('--project <name>', 'Project name (default: derived from directory)')\r\n .option('--codex-repo <name>', 'Codex repository name (e.g., \"codex.fractary.com\")')\r\n .option('--sync-preset <name>', 'Sync preset (standard, minimal)', 'standard')\r\n .option('--force', 'Overwrite existing configuration')\r\n .option('--no-mcp', 'Skip MCP server installation')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n const configManager = createConfigManager(process.cwd())\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('Initializing unified Fractary configuration...\\n'))\r\n }\r\n\r\n // Resolve organization\r\n let org = options.org\r\n\r\n if (!org) {\r\n // Try git remote detection via SDK\r\n org = await configManager.detectOrganization()\r\n }\r\n\r\n if (!org) {\r\n // Try SDK's resolveOrganization\r\n try {\r\n org = resolveOrganization({\r\n repoName: path.basename(process.cwd()),\r\n })\r\n } catch {\r\n // SDK method failed, continue\r\n }\r\n }\r\n\r\n if (!org) {\r\n // Default fallback\r\n org = path.basename(process.cwd()).split('-')[0] || 'default'\r\n if (!options.json) {\r\n console.log(chalk.yellow(`⚠ Could not detect organization, using: ${org}`))\r\n console.log(chalk.dim(' Use --org <slug> to specify explicitly\\n'))\r\n }\r\n } else if (!options.json) {\r\n console.log(chalk.dim(`Organization: ${chalk.cyan(org)}\\n`))\r\n }\r\n\r\n // Validate organization name format\r\n const orgValidation = validateNameFormat(org, 'organization')\r\n if (!orgValidation.valid) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: orgValidation.error }, null, 2))\r\n } else {\r\n console.error(chalk.red('Error:'), orgValidation.error)\r\n }\r\n process.exit(1)\r\n }\r\n\r\n // Resolve project name\r\n let project = options.project\r\n if (!project) {\r\n project = configManager.detectProject()\r\n if (!options.json) {\r\n console.log(chalk.dim(`Project: ${chalk.cyan(project)}\\n`))\r\n }\r\n }\r\n\r\n // Resolve codex repository\r\n let codexRepo = options.codexRepo\r\n\r\n // Validate codex repo if provided via CLI\r\n if (codexRepo) {\r\n const repoValidation = validateNameFormat(codexRepo, 'repository')\r\n if (!repoValidation.valid) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: repoValidation.error }, null, 2))\r\n } else {\r\n console.error(chalk.red('Error:'), repoValidation.error)\r\n }\r\n process.exit(1)\r\n }\r\n if (!options.json) {\r\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)}\\n`))\r\n }\r\n } else {\r\n // Try to discover codex repo in the organization\r\n const discoveryResult: DiscoverCodexRepoResult = await configManager.discoverCodexRepo(org)\r\n if (discoveryResult.repo) {\r\n codexRepo = discoveryResult.repo\r\n if (!options.json) {\r\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)} (auto-discovered)\\n`))\r\n }\r\n } else if (!options.json) {\r\n // Log specific error for debugging\r\n if (discoveryResult.message) {\r\n console.log(chalk.dim(` Note: ${discoveryResult.message}\\n`))\r\n }\r\n }\r\n }\r\n\r\n if (!codexRepo) {\r\n if (!options.json) {\r\n console.log(chalk.yellow(`⚠ Could not discover codex repository in organization '${org}'`))\r\n console.log(chalk.dim(' Use --codex-repo <name> to specify explicitly'))\r\n console.log(chalk.dim(' Expected naming convention: codex.{org}.{tld} (e.g., codex.fractary.com)\\n'))\r\n }\r\n // Use a placeholder that makes it clear it needs to be configured\r\n codexRepo = `codex.${org}.com`\r\n if (!options.json) {\r\n console.log(chalk.dim(` Using default: ${chalk.cyan(codexRepo)}\\n`))\r\n }\r\n }\r\n\r\n // Check if config exists\r\n const configExists = await configManager.configExists()\r\n\r\n if (configExists && !options.force) {\r\n if (!options.json) {\r\n console.log(chalk.yellow(`⚠ Configuration already exists at .fractary/config.yaml`))\r\n console.log(chalk.dim('Merging with existing configuration...\\n'))\r\n }\r\n }\r\n\r\n // Initialize configuration using SDK's ConfigManager\r\n if (!options.json) {\r\n console.log('Creating directory structure...')\r\n }\r\n\r\n const result = await configManager.initialize({\r\n organization: org,\r\n project,\r\n codexRepo,\r\n syncPreset: options.syncPreset,\r\n force: options.force,\r\n skipMcp: options.mcp === false,\r\n includeFilePlugin: true,\r\n })\r\n\r\n // JSON output\r\n if (options.json) {\r\n console.log(\r\n JSON.stringify(\r\n {\r\n success: true,\r\n configPath: result.configPath,\r\n created: result.configCreated,\r\n merged: result.configMerged,\r\n organization: org,\r\n project,\r\n codexRepo,\r\n directories: result.directories,\r\n gitignore: result.gitignore,\r\n mcp: result.mcp,\r\n },\r\n null,\r\n 2\r\n )\r\n )\r\n return\r\n }\r\n\r\n // Human-readable output\r\n for (const dir of result.directories.created) {\r\n console.log(chalk.green('✓'), chalk.dim(dir + '/'))\r\n }\r\n for (const dir of result.directories.alreadyExisted) {\r\n console.log(chalk.dim(' ' + dir + '/ (exists)'))\r\n }\r\n\r\n if (result.gitignore.created) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (created)'))\r\n } else if (result.gitignore.updated) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (updated)'))\r\n } else {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (exists)'))\r\n }\r\n\r\n console.log('\\nInitializing configuration...')\r\n\r\n if (result.configCreated) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (created)'))\r\n } else if (result.configMerged) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (merged with existing)'))\r\n }\r\n\r\n // MCP server status\r\n if (result.mcp) {\r\n console.log('\\nConfiguring MCP server...')\r\n if (result.mcp.alreadyInstalled) {\r\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (already configured)'))\r\n } else if (result.mcp.migrated) {\r\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (migrated from old format)'))\r\n if (result.mcp.backupPath) {\r\n console.log(chalk.dim(` Backup: ${path.basename(result.mcp.backupPath)}`))\r\n }\r\n } else if (result.mcp.installed) {\r\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (created)'))\r\n }\r\n }\r\n\r\n // Success message\r\n console.log(chalk.green('\\n✓ Unified configuration initialized successfully!\\n'))\r\n\r\n console.log(chalk.bold('Configuration:'))\r\n console.log(chalk.dim(` Organization: ${org}`))\r\n console.log(chalk.dim(` Project: ${project}`))\r\n console.log(chalk.dim(` Codex Repository: ${codexRepo}`))\r\n console.log(chalk.dim(` Config: .fractary/config.yaml`))\r\n\r\n console.log(chalk.bold('\\nFile plugin sources:'))\r\n console.log(chalk.dim(' - specs: .fractary/specs/ → S3'))\r\n console.log(chalk.dim(' - logs: .fractary/logs/ → S3'))\r\n\r\n console.log(chalk.bold('\\nCodex plugin:'))\r\n console.log(chalk.dim(' - Cache: .fractary/codex/cache/'))\r\n console.log(chalk.dim(' - MCP Server: @fractary/codex-mcp (via npx)'))\r\n console.log(chalk.dim(' - Remotes: codex repo configured'))\r\n\r\n console.log(chalk.bold('\\nGit Authentication:'))\r\n console.log(chalk.dim(' Codex sync uses your existing git credentials.'))\r\n console.log(chalk.dim(' Ensure you have access to the codex repository:'))\r\n console.log(chalk.dim(` gh repo view ${org}/${codexRepo}`))\r\n console.log(chalk.dim(' Or set GITHUB_TOKEN environment variable.'))\r\n\r\n console.log(chalk.bold('\\nNext steps:'))\r\n console.log(chalk.dim(' 1. Restart Claude Code to load the MCP server'))\r\n console.log(chalk.dim(' 2. Verify codex repository access: gh repo view ' + org + '/' + codexRepo))\r\n console.log(chalk.dim(' 3. Configure AWS credentials for S3 access (if using file plugin)'))\r\n console.log(chalk.dim(' 4. Edit .fractary/config.yaml to add external project remotes'))\r\n console.log(chalk.dim(' 5. Reference docs via codex:// URIs (auto-fetched by MCP)'))\r\n } catch (error: any) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: error.message }, null, 2))\r\n } else {\r\n console.error(chalk.red('Error:'), error.message)\r\n }\r\n process.exit(1)\r\n }\r\n })\r\n\r\n return cmd\r\n}\r\n","/**\r\n * Document fetch command\r\n *\r\n * Top-level command for fetching documents by codex:// URI\r\n */\r\n\r\n// Re-export the document-fetch command\r\nexport { documentFetchCommand } from './fetch.js';\r\n","/**\r\n * Document fetch command (v3.0)\r\n *\r\n * Retrieves documents by codex:// URI reference using SDK's CodexClient:\r\n * - Cache-first retrieval for fast access\r\n * - TTL-based cache invalidation\r\n * - Multiple storage provider support\r\n * - Automatic URI validation and resolution\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as crypto from 'crypto';\r\nimport * as fs from 'fs/promises';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Calculate content hash\r\n */\r\nfunction hashContent(content: Buffer): string {\r\n return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);\r\n}\r\n\r\nexport function documentFetchCommand(): Command {\r\n const cmd = new Command('document-fetch');\r\n\r\n cmd\r\n .description('Fetch a document by codex:// URI reference')\r\n .argument('<uri>', 'Codex URI (e.g., codex://org/project/docs/file.md)')\r\n .option('--bypass-cache', 'Skip cache and fetch directly from source')\r\n .option('--ttl <seconds>', 'Override default TTL (in seconds)', parseInt)\r\n .option('--json', 'Output as JSON with metadata')\r\n .option('--output <file>', 'Write content to file instead of stdout')\r\n .action(async (uri: string, options) => {\r\n try {\r\n // Dynamically import validateUri to avoid loading SDK at module time\r\n const { validateUri } = await import('@fractary/codex');\r\n\r\n // Validate URI format\r\n if (!validateUri(uri)) {\r\n console.error(chalk.red('Error: Invalid URI format'));\r\n console.log(chalk.dim('Expected: codex://org/project/path/to/file.md'));\r\n console.log(chalk.dim('Example: codex://fractary/codex/docs/api.md'));\r\n process.exit(1);\r\n }\r\n\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Show fetching message (unless JSON output)\r\n if (!options.json && !options.bypassCache) {\r\n console.error(chalk.dim(`Fetching ${uri}...`));\r\n }\r\n\r\n // Fetch using CodexClient\r\n const result = await client.fetch(uri, {\r\n bypassCache: options.bypassCache,\r\n ttl: options.ttl\r\n });\r\n\r\n // Output handling\r\n if (options.json) {\r\n const output = {\r\n uri,\r\n content: result.content.toString('utf-8'),\r\n metadata: {\r\n fromCache: result.fromCache,\r\n fetchedAt: result.metadata?.fetchedAt,\r\n expiresAt: result.metadata?.expiresAt,\r\n contentLength: result.metadata?.contentLength || result.content.length,\r\n contentHash: hashContent(result.content)\r\n }\r\n };\r\n console.log(JSON.stringify(output, null, 2));\r\n } else if (options.output) {\r\n // Write to file\r\n await fs.writeFile(options.output, result.content);\r\n console.log(chalk.green('✓'), `Written to ${options.output}`);\r\n console.log(chalk.dim(` Size: ${result.content.length} bytes`));\r\n if (result.fromCache) {\r\n console.log(chalk.dim(' Source: cache'));\r\n } else {\r\n console.log(chalk.dim(' Source: storage'));\r\n }\r\n } else {\r\n // Print to stdout\r\n if (result.fromCache && !options.bypassCache) {\r\n console.error(chalk.green('✓'), chalk.dim('from cache\\n'));\r\n } else {\r\n console.error(chalk.green('✓'), chalk.dim('fetched\\n'));\r\n }\r\n console.log(result.content.toString('utf-8'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n\r\n // Provide helpful error messages\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary-codex configure\" to create a configuration.'));\r\n } else if (error.message.includes('GITHUB_TOKEN')) {\r\n console.log(chalk.dim('\\nSet your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n } else if (error.message.includes('not found') || error.message.includes('404')) {\r\n console.log(chalk.dim('\\nThe document may not exist or you may not have access.'));\r\n console.log(chalk.dim('Check the URI and ensure your storage providers are configured correctly.'));\r\n }\r\n\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Singleton getter for CodexClient\r\n *\r\n * Provides lazy initialization of the CodexClient instance.\r\n * This ensures we only create one client instance across all command invocations,\r\n * avoiding repeated configuration loading and manager initialization.\r\n *\r\n * Uses dynamic imports to avoid loading @fractary/codex SDK at module load time,\r\n * which prevents CLI hangs when running simple commands like --help.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { getClient } from './get-client';\r\n *\r\n * export async function fetchCommand(uri: string) {\r\n * const client = await getClient();\r\n * const result = await client.fetch(uri);\r\n * console.log(result.content.toString());\r\n * }\r\n * ```\r\n */\r\n\r\n// Import types only\r\nimport type { CodexClient, CodexClientOptions } from './codex-client';\r\n\r\n/**\r\n * Singleton instance\r\n */\r\nlet clientInstance: CodexClient | null = null;\r\n\r\n/**\r\n * Get the CodexClient singleton instance\r\n *\r\n * On first call, creates and initializes the client.\r\n * Subsequent calls return the same instance.\r\n *\r\n * @param options - Optional configuration (only used on first call)\r\n * @returns Promise resolving to CodexClient instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const client = await getClient();\r\n * const stats = await client.getCacheStats();\r\n * ```\r\n */\r\nexport async function getClient(options?: CodexClientOptions): Promise<CodexClient> {\r\n if (!clientInstance) {\r\n // Dynamic import to avoid loading SDK at module time\r\n const { CodexClient } = await import('./codex-client');\r\n clientInstance = await CodexClient.create(options);\r\n }\r\n return clientInstance;\r\n}\r\n\r\n/**\r\n * Reset the singleton instance\r\n *\r\n * Useful for testing or when configuration changes require a fresh client.\r\n *\r\n * @example\r\n * ```typescript\r\n * // After changing configuration\r\n * resetClient();\r\n * const client = await getClient(); // Will create new instance\r\n * ```\r\n */\r\nexport function resetClient(): void {\r\n clientInstance = null;\r\n}\r\n\r\n/**\r\n * Check if client has been initialized\r\n *\r\n * @returns true if client instance exists\r\n */\r\nexport function isClientInitialized(): boolean {\r\n return clientInstance !== null;\r\n}\r\n","/**\r\n * Cache commands\r\n *\r\n * Top-level commands for managing the codex document cache:\r\n * - cache-list: View cached entries\r\n * - cache-clear: Remove cache entries\r\n * - cache-stats: Display cache statistics\r\n * - cache-health: Diagnostics and auto-repair\r\n */\r\n\r\n// Re-export cache commands\r\nexport { cacheListCommand } from './list.js';\r\nexport { cacheClearCommand } from './clear.js';\r\nexport { cacheStatsCommand } from './stats.js';\r\nexport { cacheHealthCommand } from './health.js';\r\n","/**\r\n * Cache list command (v3.0)\r\n *\r\n * Lists cache entries using SDK's CacheManager.listEntries()\r\n * Now provides detailed information about each cached entry.\r\n */\r\n\r\nimport { Command } from 'commander'\r\nimport chalk from 'chalk'\r\nimport { formatBytes, type ListEntriesOptions } from '@fractary/codex'\r\nimport { getClient } from '../../client/get-client'\r\n\r\n/**\r\n * Format remaining TTL for display\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 0) {\r\n const expired = -seconds\r\n if (expired < 60) return chalk.red(`expired ${expired}s ago`)\r\n if (expired < 3600) return chalk.red(`expired ${Math.floor(expired / 60)}m ago`)\r\n return chalk.red(`expired ${Math.floor(expired / 3600)}h ago`)\r\n }\r\n if (seconds < 60) return chalk.green(`${seconds}s`)\r\n if (seconds < 3600) return chalk.green(`${Math.floor(seconds / 60)}m`)\r\n if (seconds < 86400) return chalk.yellow(`${Math.floor(seconds / 3600)}h`)\r\n return chalk.dim(`${Math.floor(seconds / 86400)}d`)\r\n}\r\n\r\n/**\r\n * Format status with color\r\n */\r\nfunction formatStatus(status: 'fresh' | 'stale' | 'expired'): string {\r\n switch (status) {\r\n case 'fresh':\r\n return chalk.green('fresh')\r\n case 'stale':\r\n return chalk.yellow('stale')\r\n case 'expired':\r\n return chalk.red('expired')\r\n }\r\n}\r\n\r\nexport function cacheListCommand(): Command {\r\n const cmd = new Command('cache-list')\r\n\r\n cmd\r\n .description('List cache entries')\r\n .option('--json', 'Output as JSON')\r\n .option('--status <status>', 'Filter by status (fresh, stale, expired, all)', 'all')\r\n .option('--limit <n>', 'Maximum number of entries to show', parseInt)\r\n .option('--sort <field>', 'Sort by field (uri, size, createdAt, expiresAt)', 'uri')\r\n .option('--desc', 'Sort in descending order')\r\n .option('--verbose', 'Show detailed entry information')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient()\r\n\r\n // Build list options\r\n const listOptions: ListEntriesOptions = {\r\n status: options.status as 'fresh' | 'stale' | 'expired' | 'all',\r\n limit: options.limit,\r\n sortBy: options.sort as 'uri' | 'size' | 'createdAt' | 'expiresAt',\r\n sortDirection: options.desc ? 'desc' : 'asc',\r\n }\r\n\r\n // Get entries from SDK\r\n const result = await client.listCacheEntries(listOptions)\r\n\r\n if (result.total === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ entries: [], total: 0, message: 'Cache is empty' }))\r\n } else {\r\n console.log(chalk.yellow('Cache is empty.'))\r\n console.log(chalk.dim('Fetch some documents to populate the cache.'))\r\n }\r\n return\r\n }\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(result, null, 2))\r\n return\r\n }\r\n\r\n // Display header\r\n console.log(chalk.bold(`Cache Entries (${result.entries.length} of ${result.total})\\n`))\r\n\r\n // Display entries\r\n if (options.verbose) {\r\n // Detailed view\r\n for (const entry of result.entries) {\r\n console.log(chalk.cyan(entry.uri))\r\n console.log(` Status: ${formatStatus(entry.status)}`)\r\n console.log(` Size: ${formatBytes(entry.size)}`)\r\n console.log(` Content-Type: ${chalk.dim(entry.contentType)}`)\r\n console.log(` TTL: ${formatTtl(entry.remainingTtl)}`)\r\n console.log(` In Memory: ${entry.inMemory ? chalk.green('yes') : chalk.dim('no')}`)\r\n console.log('')\r\n }\r\n } else {\r\n // Compact view - table format\r\n const maxUriLen = Math.min(\r\n 60,\r\n Math.max(...result.entries.map((e) => e.uri.length))\r\n )\r\n\r\n console.log(\r\n chalk.dim(\r\n `${'URI'.padEnd(maxUriLen)} ${'STATUS'.padEnd(8)} ${'SIZE'.padEnd(10)} TTL`\r\n )\r\n )\r\n console.log(chalk.dim('─'.repeat(maxUriLen + 35)))\r\n\r\n for (const entry of result.entries) {\r\n const uri =\r\n entry.uri.length > maxUriLen\r\n ? '...' + entry.uri.slice(-(maxUriLen - 3))\r\n : entry.uri.padEnd(maxUriLen)\r\n\r\n console.log(\r\n `${chalk.cyan(uri)} ${formatStatus(entry.status).padEnd(17)} ${formatBytes(entry.size).padEnd(10)} ${formatTtl(entry.remainingTtl)}`\r\n )\r\n }\r\n }\r\n\r\n // Show pagination info\r\n if (result.hasMore) {\r\n console.log('')\r\n console.log(\r\n chalk.dim(\r\n `Showing ${result.entries.length} of ${result.total} entries. Use --limit to see more.`\r\n )\r\n )\r\n }\r\n\r\n // Show stats summary\r\n const stats = await client.getCacheStats()\r\n console.log('')\r\n console.log(chalk.dim('─'.repeat(60)))\r\n console.log(\r\n chalk.dim(\r\n `Total: ${stats.entryCount} entries (${formatBytes(stats.totalSize)}) | ` +\r\n `${stats.freshCount} fresh, ${stats.staleCount} stale, ${stats.expiredCount} expired`\r\n )\r\n )\r\n } catch (error: any) {\r\n // Provide specific error messages based on error type\r\n const errorMessage = error.message || 'Unknown error'\r\n\r\n if (errorMessage.includes('ENOENT') || errorMessage.includes('not found')) {\r\n console.error(chalk.red('Error:'), 'Cache directory not accessible')\r\n console.error(chalk.dim('Run \"fractary-codex configure\" to initialize the cache.'))\r\n } else if (errorMessage.includes('EACCES') || errorMessage.includes('permission')) {\r\n console.error(chalk.red('Error:'), 'Permission denied accessing cache directory')\r\n console.error(chalk.dim('Check file permissions for .fractary/codex/cache/'))\r\n } else if (errorMessage.includes('ENOSPC')) {\r\n console.error(chalk.red('Error:'), 'No space left on device')\r\n console.error(chalk.dim('Free up disk space and try again.'))\r\n } else if (errorMessage.includes('parse') || errorMessage.includes('JSON')) {\r\n console.error(chalk.red('Error:'), 'Failed to parse cache metadata')\r\n console.error(chalk.dim('The cache may be corrupted. Try \"fractary-codex cache-clear\".'))\r\n } else {\r\n console.error(chalk.red('Error:'), errorMessage)\r\n }\r\n\r\n process.exit(1)\r\n }\r\n })\r\n\r\n return cmd\r\n}\r\n","/**\r\n * Cache clear command (v3.0)\r\n *\r\n * Clears cache entries using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { formatBytes } from '@fractary/codex';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function cacheClearCommand(): Command {\r\n const cmd = new Command('cache-clear');\r\n\r\n cmd\r\n .description('Clear cache entries')\r\n .option('--all', 'Clear entire cache')\r\n .option('--pattern <glob>', 'Clear entries matching URI pattern (e.g., \"codex://fractary/*\")')\r\n .option('--dry-run', 'Show what would be cleared without actually clearing')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get stats before clearing (for reporting)\r\n const statsBefore = await client.getCacheStats();\r\n\r\n if (statsBefore.entryCount === 0) {\r\n console.log(chalk.yellow('Cache is already empty. Nothing to clear.'));\r\n return;\r\n }\r\n\r\n // Determine what to clear\r\n let pattern: string | undefined;\r\n\r\n if (options.all) {\r\n pattern = undefined; // Clear all\r\n } else if (options.pattern) {\r\n pattern = options.pattern;\r\n } else {\r\n console.log(chalk.yellow('Please specify what to clear:'));\r\n console.log(chalk.dim(' --all Clear entire cache'));\r\n console.log(chalk.dim(' --pattern Clear entries matching pattern (e.g., \"codex://fractary/*\")'));\r\n console.log('');\r\n console.log(chalk.dim('Examples:'));\r\n console.log(chalk.dim(' fractary-codex cache-clear --all'));\r\n console.log(chalk.dim(' fractary-codex cache-clear --pattern \"codex://fractary/cli/*\"'));\r\n return;\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would clear:\\n'));\r\n if (pattern) {\r\n console.log(chalk.dim(` Pattern: ${pattern}`));\r\n console.log(chalk.dim(` This would invalidate matching cache entries`));\r\n } else {\r\n console.log(chalk.dim(` All cache entries (${statsBefore.entryCount} entries)`));\r\n }\r\n console.log(chalk.dim(`\\nTotal size: ${formatBytes(statsBefore.totalSize)}`));\r\n return;\r\n }\r\n\r\n // Perform invalidation\r\n if (pattern) {\r\n console.log(chalk.blue(`Clearing cache entries matching pattern: ${pattern}\\n`));\r\n await client.invalidateCache(pattern);\r\n } else {\r\n console.log(chalk.blue(`Clearing entire cache (${statsBefore.entryCount} entries)...\\n`));\r\n await client.invalidateCache();\r\n }\r\n\r\n // Get stats after clearing\r\n const statsAfter = await client.getCacheStats();\r\n const entriesCleared = statsBefore.entryCount - statsAfter.entryCount;\r\n const sizeFreed = statsBefore.totalSize - statsAfter.totalSize;\r\n\r\n // Summary\r\n console.log(chalk.green(`✓ Cleared ${entriesCleared} entries (${formatBytes(sizeFreed)} freed)`));\r\n\r\n if (statsAfter.entryCount > 0) {\r\n console.log(chalk.dim(` Remaining: ${statsAfter.entryCount} entries (${formatBytes(statsAfter.totalSize)})`));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Cache stats command (v3.0)\r\n *\r\n * Display cache statistics using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { formatBytes } from '@fractary/codex';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function cacheStatsCommand(): Command {\r\n const cmd = new Command('cache-stats');\r\n\r\n cmd\r\n .description('Display cache statistics')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get cache stats from SDK\r\n const stats = await client.getCacheStats();\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(stats, null, 2));\r\n return;\r\n }\r\n\r\n // Display formatted output\r\n console.log(chalk.bold('Cache Statistics\\n'));\r\n\r\n console.log(chalk.bold('Overview'));\r\n console.log(` Total entries: ${chalk.cyan(stats.entryCount.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatBytes(stats.totalSize))}`);\r\n console.log(` Fresh entries: ${chalk.green(stats.freshCount.toString())}`);\r\n console.log(` Stale entries: ${stats.staleCount > 0 ? chalk.yellow(stats.staleCount.toString()) : chalk.dim('0')}`);\r\n console.log(` Expired entries: ${stats.expiredCount > 0 ? chalk.red(stats.expiredCount.toString()) : chalk.dim('0')}`);\r\n console.log('');\r\n\r\n // Health indicator based on fresh vs total ratio\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n const healthColor = healthPercent > 80 ? chalk.green : healthPercent > 50 ? chalk.yellow : chalk.red;\r\n console.log(`Cache health: ${healthColor(`${healthPercent.toFixed(0)}% fresh`)}`);\r\n\r\n if (stats.expiredCount > 0) {\r\n console.log(chalk.dim('\\nRun \"fractary-codex cache-clear --pattern <pattern>\" to clean up entries.'));\r\n }\r\n\r\n if (stats.entryCount === 0) {\r\n console.log(chalk.dim('\\nNo cached entries. Fetch some documents to populate the cache.'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Health command (v3.0)\r\n *\r\n * Comprehensive diagnostics for codex SDK setup using SDK's HealthChecker.\r\n * This is a thin wrapper around the centralized health checking logic in the SDK.\r\n */\r\n\r\nimport { Command } from 'commander'\r\nimport chalk from 'chalk'\r\nimport { createHealthChecker, type HealthCheck, type HealthResult } from '@fractary/codex'\r\nimport { getClient } from '../../client/get-client'\r\n\r\nexport function cacheHealthCommand(): Command {\r\n const cmd = new Command('cache-health')\r\n\r\n cmd\r\n .description('Run diagnostics on codex setup')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Create health checker\r\n const healthChecker = createHealthChecker({\r\n projectRoot: process.cwd(),\r\n })\r\n\r\n // Run configuration and storage checks (don't require client)\r\n const checks: HealthCheck[] = []\r\n\r\n checks.push(await healthChecker.checkConfiguration())\r\n checks.push(await healthChecker.checkStorage())\r\n\r\n // Try to get client for cache and type registry checks\r\n try {\r\n const client = await getClient()\r\n\r\n // Check SDK client initialization\r\n const organization = client.getOrganization()\r\n checks.push({\r\n name: 'SDK Client',\r\n status: 'pass',\r\n message: 'CodexClient initialized successfully',\r\n details: `Organization: ${organization}`,\r\n })\r\n\r\n // Check cache using client's stats\r\n const cacheStats = await client.getCacheStats()\r\n checks.push(healthChecker.checkCacheFromStats(cacheStats))\r\n\r\n // Check type registry using client's registry\r\n const registry = client.getTypeRegistry()\r\n checks.push(healthChecker.checkTypesFromRegistry(registry))\r\n } catch (error: any) {\r\n // Client initialization failed\r\n checks.push({\r\n name: 'SDK Client',\r\n status: 'fail',\r\n message: 'Failed to initialize CodexClient',\r\n details: error.message,\r\n })\r\n\r\n // Add placeholder checks for cache and types\r\n checks.push({\r\n name: 'Cache',\r\n status: 'warn',\r\n message: 'Cache check skipped',\r\n details: 'SDK client not available',\r\n })\r\n\r\n checks.push({\r\n name: 'Type Registry',\r\n status: 'warn',\r\n message: 'Type registry check skipped',\r\n details: 'SDK client not available',\r\n })\r\n }\r\n\r\n // Summarize results\r\n const result: HealthResult = healthChecker.summarize(checks)\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(result, null, 2))\r\n return\r\n }\r\n\r\n // Display results\r\n console.log(chalk.bold('Codex Health Check\\n'))\r\n\r\n for (const check of result.checks) {\r\n const icon =\r\n check.status === 'pass'\r\n ? chalk.green('✓')\r\n : check.status === 'warn'\r\n ? chalk.yellow('⚠')\r\n : chalk.red('✗')\r\n\r\n const statusColor =\r\n check.status === 'pass' ? chalk.green : check.status === 'warn' ? chalk.yellow : chalk.red\r\n\r\n console.log(`${icon} ${chalk.bold(check.name)}`)\r\n console.log(` ${statusColor(check.message)}`)\r\n if (check.details) {\r\n console.log(` ${chalk.dim(check.details)}`)\r\n }\r\n console.log('')\r\n }\r\n\r\n // Summary\r\n console.log(chalk.dim('─'.repeat(60)))\r\n\r\n const overallStatus =\r\n result.summary.status === 'unhealthy'\r\n ? chalk.red('UNHEALTHY')\r\n : result.summary.status === 'degraded'\r\n ? chalk.yellow('DEGRADED')\r\n : chalk.green('HEALTHY')\r\n\r\n console.log(`Status: ${overallStatus}`)\r\n console.log(\r\n chalk.dim(`${result.summary.passed} passed, ${result.summary.warned} warnings, ${result.summary.failed} failed`)\r\n )\r\n\r\n if (result.summary.failed > 0 || result.summary.warned > 0) {\r\n console.log('')\r\n console.log(chalk.dim('Run checks individually for more details:'))\r\n console.log(chalk.dim(' fractary-codex cache-stats'))\r\n }\r\n\r\n // Exit with error if any checks failed\r\n if (result.summary.failed > 0) {\r\n process.exit(1)\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message)\r\n process.exit(1)\r\n }\r\n })\r\n\r\n return cmd\r\n}\r\n","/**\r\n * Sync command (v3.0)\r\n *\r\n * Synchronizes project with the codex repository using SDK SyncManager:\r\n * - Multi-directional sync (to-codex, from-codex, bidirectional)\r\n * - Manifest tracking for sync state\r\n * - Conflict detection and resolution\r\n * - Pattern-based file filtering\r\n * - Dry-run mode\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\n// Import types only\r\nimport type {\r\n SyncDirection,\r\n SyncOptions,\r\n SyncConfig\r\n} from '@fractary/codex';\r\nimport { formatBytes, formatDuration } from '@fractary/codex';\r\nimport { readYamlConfig } from '../config/migrate-config';\r\n\r\n/**\r\n * Get environment branch mapping\r\n */\r\nfunction getEnvironmentBranch(config: any, env: string): string {\r\n const envMap = config.sync?.environments || {\r\n dev: 'develop',\r\n test: 'test',\r\n staging: 'staging',\r\n prod: 'main'\r\n };\r\n\r\n return envMap[env] || env;\r\n}\r\n\r\nexport function syncCommand(): Command {\r\n const cmd = new Command('sync');\r\n\r\n cmd\r\n .description('Sync single project with codex repository')\r\n .argument('[name]', 'Project name (auto-detected if not provided)')\r\n .option('--env <env>', 'Target environment (dev/test/staging/prod)', 'prod')\r\n .option('--dry-run', 'Show what would sync without executing')\r\n .option('--direction <dir>', 'Sync direction (to-codex/from-codex/bidirectional)', 'bidirectional')\r\n .option('--include <pattern>', 'Include files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--exclude <pattern>', 'Exclude files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--force', 'Force sync without checking timestamps')\r\n .option('--json', 'Output as JSON')\r\n .option('--work-id <id>', 'GitHub issue number or URL to scope sync to')\r\n .action(async (name: string | undefined, options) => {\r\n try {\r\n // Load YAML config (unified config path)\r\n const configPath = path.join(process.cwd(), '.fractary', 'config.yaml');\r\n let config;\r\n\r\n try {\r\n config = await readYamlConfig(configPath);\r\n } catch (error) {\r\n console.error(chalk.red('Error:'), 'Codex not initialized.');\r\n console.log(chalk.dim('Run \"fractary-codex configure\" first.'));\r\n process.exit(1);\r\n }\r\n\r\n // Dynamic import to avoid loading SDK at module time\r\n const { createSyncManager, createLocalStorage, detectCurrentProject } = await import('@fractary/codex');\r\n\r\n // Determine project name (priority: CLI arg > config > git detection)\r\n let projectName = name;\r\n if (!projectName) {\r\n // First try config file (readYamlConfig extracts the codex section)\r\n projectName = config.project || undefined;\r\n }\r\n if (!projectName) {\r\n // Fall back to git remote detection\r\n const detected = detectCurrentProject();\r\n projectName = detected.project || undefined;\r\n }\r\n\r\n if (!projectName) {\r\n console.error(chalk.red('Error:'), 'Could not determine project name.');\r\n console.log(chalk.dim('Provide project name as argument, set codex.project in config, or run from a git repository.'));\r\n process.exit(1);\r\n }\r\n\r\n // Validate direction\r\n const validDirections: SyncDirection[] = ['to-codex', 'from-codex', 'bidirectional'];\r\n if (!validDirections.includes(options.direction as SyncDirection)) {\r\n console.error(chalk.red('Error:'), `Invalid direction: ${options.direction}`);\r\n console.log(chalk.dim('Valid options: to-codex, from-codex, bidirectional'));\r\n process.exit(1);\r\n }\r\n\r\n const direction = options.direction as SyncDirection;\r\n const targetBranch = getEnvironmentBranch(config, options.env);\r\n\r\n // Create LocalStorage instance\r\n const localStorage = createLocalStorage({\r\n baseDir: process.cwd()\r\n });\r\n\r\n // Create SyncManager\r\n const syncManager = createSyncManager({\r\n localStorage,\r\n config: config.sync as Partial<SyncConfig>,\r\n manifestPath: path.join(process.cwd(), '.fractary', '.codex-sync-manifest.json')\r\n });\r\n\r\n // Get include patterns from config or use defaults\r\n // For to-codex: use config.sync.to_codex if available\r\n // For from-codex: config.sync.from_codex is handled by routing scanner\r\n const defaultToCodexPatterns = [\r\n 'docs/**/*.md',\r\n 'specs/**/*.md',\r\n '.fractary/standards/**',\r\n '.fractary/templates/**'\r\n ];\r\n\r\n // Use proper type for sync config\r\n const syncConfig = config.sync as Partial<SyncConfig> | undefined;\r\n\r\n // Use SDK to resolve patterns (handles both new and legacy formats)\r\n const sdkPatterns = syncManager.getToCodexPatterns();\r\n const configIncludePatterns = sdkPatterns.length > 0\r\n ? sdkPatterns\r\n : defaultToCodexPatterns;\r\n const configExcludePatterns = syncConfig?.to_codex?.exclude || syncConfig?.exclude || [];\r\n\r\n // CLI options override config\r\n const includePatterns = options.include.length > 0 ? options.include : configIncludePatterns;\r\n const excludePatterns = [\r\n ...configExcludePatterns,\r\n ...options.exclude\r\n ];\r\n\r\n // Scan local files using proper glob pattern matching\r\n const sourceDir = process.cwd();\r\n const { glob: globSync } = await import('glob');\r\n\r\n // Match files using glob patterns\r\n const matchedFilePaths = new Set<string>();\r\n\r\n for (const pattern of includePatterns) {\r\n try {\r\n const matches = await globSync(pattern, {\r\n cwd: sourceDir,\r\n dot: true,\r\n nodir: true,\r\n ignore: excludePatterns\r\n });\r\n matches.forEach(match => matchedFilePaths.add(match));\r\n } catch (error: any) {\r\n console.error(chalk.yellow(`Warning: Invalid pattern \"${pattern}\": ${error.message}`));\r\n }\r\n }\r\n\r\n // Convert matched paths to file objects with stat info\r\n const targetFiles = await Promise.all(\r\n Array.from(matchedFilePaths).map(async (filePath) => {\r\n const fullPath = path.join(sourceDir, filePath);\r\n const stats = await import('fs/promises').then(fs => fs.stat(fullPath));\r\n return {\r\n path: filePath,\r\n size: stats.size,\r\n mtime: stats.mtimeMs\r\n };\r\n })\r\n );\r\n\r\n // Create sync plan with options\r\n // Note: include/exclude patterns are used for to-codex direction.\r\n // For from-codex (routing-aware), these patterns are ignored to avoid\r\n // double filtering, since routing rules already determine which files sync.\r\n const syncOptions: SyncOptions = {\r\n direction,\r\n dryRun: options.dryRun,\r\n force: options.force,\r\n include: includePatterns,\r\n exclude: excludePatterns,\r\n // Pass pre-matched files to SDK (bypasses SDK's internal non-recursive scanning)\r\n sourceFiles: targetFiles\r\n };\r\n\r\n let plan;\r\n let routingScan;\r\n let codexRepoPath: string | undefined;\r\n\r\n // Use routing-aware sync for from-codex direction\r\n if (direction === 'from-codex') {\r\n\r\n try {\r\n const { ensureCodexCloned } = await import('../utils/codex-repository.js');\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('ℹ Cloning/updating codex repository...'));\r\n }\r\n\r\n // Clone codex to temp directory\r\n codexRepoPath = await ensureCodexCloned(config, {\r\n branch: targetBranch\r\n });\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(` Codex cloned to: ${codexRepoPath}`));\r\n console.log(chalk.dim(' Scanning for files routing to this project...\\n'));\r\n } else {\r\n console.log(JSON.stringify({\r\n info: 'Routing-aware sync: cloned codex repository and scanning for files targeting this project',\r\n codexPath: codexRepoPath\r\n }, null, 2));\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), 'Failed to clone codex repository');\r\n console.error(chalk.dim(` ${error.message}`));\r\n\r\n // Provide error-specific troubleshooting\r\n console.log(chalk.yellow('\\nTroubleshooting:'));\r\n if (error.message.includes('Git command not found')) {\r\n console.log(chalk.dim(' Git is not installed or not in PATH.'));\r\n console.log(chalk.dim(' Install git: https://git-scm.com/downloads'));\r\n } else if (error.message.includes('authentication failed') || error.message.includes('Authentication failed')) {\r\n console.log(chalk.dim(' GitHub authentication is required for private repositories.'));\r\n console.log(chalk.dim(' 1. Check auth status: gh auth status'));\r\n console.log(chalk.dim(' 2. Login if needed: gh auth login'));\r\n console.log(chalk.dim(' 3. Or set GITHUB_TOKEN environment variable'));\r\n } else if (error.message.includes('Permission denied')) {\r\n console.log(chalk.dim(' Permission denied accessing repository files.'));\r\n console.log(chalk.dim(' 1. Check file/directory permissions'));\r\n console.log(chalk.dim(' 2. Ensure you have access to the repository'));\r\n } else if (error.message.includes('not found') || error.message.includes('does not exist')) {\r\n console.log(chalk.dim(` Repository not found: ${config.organization}/${(config as any).codex_repo || 'codex'}`));\r\n console.log(chalk.dim(' 1. Verify the repository exists on GitHub'));\r\n console.log(chalk.dim(' 2. Check organization and repository names in config'));\r\n } else {\r\n // Generic troubleshooting for other errors\r\n console.log(chalk.dim(' 1. Ensure git is installed: git --version'));\r\n console.log(chalk.dim(' 2. Check GitHub auth: gh auth status'));\r\n console.log(chalk.dim(` 3. Verify repo exists: ${config.organization}/${(config as any).codex_repo || 'codex'}`));\r\n }\r\n process.exit(1);\r\n }\r\n\r\n // Use temp clone path for routing scan\r\n const planWithRouting = await syncManager.createRoutingAwarePlan(\r\n config.organization,\r\n projectName,\r\n codexRepoPath,\r\n {\r\n ...syncOptions,\r\n codexRepo: 'codex_repo' in config ? (config as { codex_repo?: string }).codex_repo : undefined,\r\n }\r\n );\r\n\r\n plan = planWithRouting;\r\n routingScan = planWithRouting.routingScan;\r\n } else {\r\n // To-codex direction: clone codex, copy files, commit, push\r\n\r\n try {\r\n const { ensureCodexCloned } = await import('../utils/codex-repository.js');\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('ℹ Cloning/updating codex repository...'));\r\n }\r\n\r\n // Clone codex to temp directory\r\n codexRepoPath = await ensureCodexCloned(config, {\r\n branch: targetBranch\r\n });\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(` Codex cloned to: ${codexRepoPath}`));\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), 'Failed to clone codex repository');\r\n console.error(chalk.dim(` ${error.message}`));\r\n process.exit(1);\r\n }\r\n\r\n // For to-codex: sourceFiles = local files to upload, targetFiles = empty (assume all files are new)\r\n plan = await syncManager.createPlan(\r\n config.organization,\r\n projectName,\r\n sourceDir,\r\n [], // Empty target - treat all files as creates\r\n syncOptions\r\n );\r\n\r\n // Set actual paths for execution\r\n // Source: local project directory\r\n // Target: codex repo / projects / project\r\n plan.source = sourceDir;\r\n plan.target = path.join(codexRepoPath, 'projects', projectName);\r\n }\r\n\r\n if (plan.totalFiles === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n project: projectName,\r\n organization: config.organization,\r\n workId: options.workId || null,\r\n files: [],\r\n synced: 0,\r\n status: 'success',\r\n message: 'No files to sync'\r\n }, null, 2));\r\n } else {\r\n console.log(chalk.yellow('No files to sync.'));\r\n }\r\n return;\r\n }\r\n\r\n if (options.json) {\r\n const output = {\r\n project: projectName,\r\n organization: config.organization,\r\n environment: options.env,\r\n branch: targetBranch,\r\n direction,\r\n dryRun: options.dryRun || false,\r\n workId: options.workId || null,\r\n plan: {\r\n totalFiles: plan.totalFiles,\r\n totalBytes: plan.totalBytes,\r\n estimatedTime: plan.estimatedTime,\r\n conflicts: plan.conflicts.length,\r\n skipped: plan.skipped.length\r\n },\r\n files: plan.files.map(f => ({\r\n path: f.path,\r\n operation: f.operation,\r\n size: f.size\r\n }))\r\n };\r\n\r\n if (options.dryRun) {\r\n console.log(JSON.stringify({\r\n ...output,\r\n status: 'success'\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Execute and add results\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n\r\n // Determine status: success, warning, or failure\r\n let status: 'success' | 'warning' | 'failure';\r\n if (!result.success && result.synced === 0) {\r\n status = 'failure';\r\n } else if (!result.success || result.failed > 0 || plan.conflicts.length > 0) {\r\n status = 'warning';\r\n } else {\r\n status = 'success';\r\n }\r\n\r\n console.log(JSON.stringify({\r\n ...output,\r\n status,\r\n result: {\r\n success: result.success,\r\n synced: result.synced,\r\n failed: result.failed,\r\n skipped: result.skipped,\r\n duration: result.duration,\r\n errors: result.errors\r\n }\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display sync plan\r\n console.log(chalk.bold('Sync Plan\\n'));\r\n console.log(` Project: ${chalk.cyan(projectName)}`);\r\n console.log(` Organization: ${chalk.cyan(config.organization)}`);\r\n console.log(` Environment: ${chalk.cyan(options.env)} (${targetBranch})`);\r\n console.log(` Direction: ${chalk.cyan(direction)}`);\r\n console.log(` Files: ${chalk.cyan(plan.totalFiles.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatBytes(plan.totalBytes))}`);\r\n if (plan.estimatedTime) {\r\n console.log(` Est. time: ${chalk.dim(formatDuration(plan.estimatedTime))}`);\r\n }\r\n\r\n // Display routing statistics if using routing-aware sync\r\n if (routingScan) {\r\n console.log('');\r\n console.log(chalk.bold('Routing Statistics\\n'));\r\n console.log(` Scanned: ${chalk.cyan(routingScan.stats.totalScanned.toString())} files`);\r\n console.log(` Matched: ${chalk.cyan(routingScan.stats.totalMatched.toString())} files`);\r\n console.log(` Source projects: ${chalk.cyan(routingScan.stats.sourceProjects.length.toString())}`);\r\n if (routingScan.stats.sourceProjects.length > 0) {\r\n console.log(chalk.dim(` ${routingScan.stats.sourceProjects.slice(0, 5).join(', ')}`));\r\n if (routingScan.stats.sourceProjects.length > 5) {\r\n console.log(chalk.dim(` ... and ${routingScan.stats.sourceProjects.length - 5} more`));\r\n }\r\n }\r\n console.log(` Scan time: ${chalk.dim(formatDuration(routingScan.stats.durationMs))}`);\r\n }\r\n\r\n console.log('');\r\n\r\n if (plan.conflicts.length > 0) {\r\n console.log(chalk.yellow(`⚠ ${plan.conflicts.length} conflicts detected:`));\r\n for (const conflict of plan.conflicts.slice(0, 5)) {\r\n console.log(chalk.yellow(` • ${conflict.path}`));\r\n }\r\n if (plan.conflicts.length > 5) {\r\n console.log(chalk.dim(` ... and ${plan.conflicts.length - 5} more`));\r\n }\r\n console.log('');\r\n }\r\n\r\n if (plan.skipped.length > 0) {\r\n console.log(chalk.dim(`${plan.skipped.length} files skipped (no changes)`));\r\n console.log('');\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would sync:\\n'));\r\n\r\n const filesToShow = plan.files.slice(0, 10);\r\n for (const file of filesToShow) {\r\n const arrow = direction === 'to-codex' ? '→' : direction === 'from-codex' ? '←' : '↔';\r\n const opColor = file.operation === 'create' ? chalk.green :\r\n file.operation === 'update' ? chalk.yellow :\r\n chalk.dim;\r\n console.log(\r\n chalk.dim(` ${arrow}`),\r\n opColor(file.operation.padEnd(7)),\r\n file.path,\r\n chalk.dim(`(${formatBytes(file.size || 0)})`)\r\n );\r\n }\r\n\r\n if (plan.files.length > 10) {\r\n console.log(chalk.dim(` ... and ${plan.files.length - 10} more files`));\r\n }\r\n\r\n console.log(chalk.dim(`\\nTotal: ${plan.totalFiles} files (${formatBytes(plan.totalBytes)})`));\r\n console.log(chalk.dim('Run without --dry-run to execute sync.'));\r\n return;\r\n }\r\n\r\n // Execute sync\r\n console.log(chalk.blue('Syncing...\\n'));\r\n\r\n const startTime = Date.now();\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n const duration = Date.now() - startTime;\r\n\r\n // For to-codex: commit and push changes using @fractary/core RepoManager\r\n if (direction === 'to-codex' && codexRepoPath && result.synced > 0) {\r\n try {\r\n if (!options.json) {\r\n console.log(chalk.blue('Committing and pushing to codex...'));\r\n }\r\n\r\n const { RepoManager } = await import('@fractary/core/repo');\r\n const repoManager = new RepoManager({ platform: 'github' }, codexRepoPath);\r\n\r\n // Stage all changes\r\n repoManager.stageAll();\r\n\r\n // Check if there are any changes to commit\r\n if (repoManager.isClean()) {\r\n if (!options.json) {\r\n console.log(chalk.dim(' No changes to push - codex is already up to date'));\r\n }\r\n } else {\r\n // Commit with conventional format\r\n repoManager.commit({\r\n message: `Sync ${result.synced} files from ${projectName}`,\r\n });\r\n\r\n // Push to remote\r\n repoManager.push({});\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(' Changes pushed to codex repository'));\r\n }\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error pushing to codex:'), error.message);\r\n }\r\n }\r\n\r\n // Summary\r\n console.log('');\r\n if (result.success) {\r\n console.log(chalk.green(`✓ Sync completed successfully`));\r\n console.log(chalk.dim(` Synced: ${result.synced} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n console.log(chalk.dim(` Duration: ${formatDuration(duration)}`));\r\n } else {\r\n console.log(chalk.yellow(`⚠ Sync completed with errors`));\r\n console.log(chalk.green(` Synced: ${result.synced} files`));\r\n console.log(chalk.red(` Failed: ${result.failed} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n\r\n if (result.errors.length > 0) {\r\n console.log('');\r\n console.log(chalk.red('Errors:'));\r\n for (const error of result.errors.slice(0, 5)) {\r\n console.log(chalk.red(` • ${error.path}: ${error.error}`));\r\n }\r\n if (result.errors.length > 5) {\r\n console.log(chalk.dim(` ... and ${result.errors.length - 5} more errors`));\r\n }\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Configuration migration utility\r\n *\r\n * Converts legacy v2.x JSON config to v3.0 YAML format.\r\n * Uses SDK utilities where possible to avoid code duplication.\r\n */\r\n\r\nimport * as fs from 'fs/promises'\r\nimport * as path from 'path'\r\nimport * as yaml from 'js-yaml'\r\nimport {\r\n type CodexYamlConfig,\r\n type LegacyCodexConfig,\r\n} from './config-types'\r\n// Re-export readCodexConfig from SDK for backward compatibility\r\nexport { readCodexConfig as readYamlConfig } from '@fractary/codex'\r\n\r\n/**\r\n * Migration result\r\n */\r\nexport interface MigrationResult {\r\n success: boolean;\r\n yamlConfig: CodexYamlConfig;\r\n warnings: string[];\r\n backupPath?: string;\r\n}\r\n\r\n/**\r\n * Detect if a config file is legacy JSON format\r\n */\r\nexport async function isLegacyConfig(configPath: string): Promise<boolean> {\r\n try {\r\n const content = await fs.readFile(configPath, 'utf-8');\r\n const config = JSON.parse(content);\r\n\r\n // Check for legacy v2.x structure\r\n return (\r\n config.version === '3.0' ||\r\n config.organizationSlug !== undefined ||\r\n config.directories !== undefined ||\r\n config.rules !== undefined\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Migrate legacy JSON config to v3.0 YAML format\r\n */\r\nexport async function migrateConfig(\r\n legacyConfigPath: string,\r\n options?: {\r\n createBackup?: boolean;\r\n backupSuffix?: string;\r\n }\r\n): Promise<MigrationResult> {\r\n const warnings: string[] = [];\r\n\r\n try {\r\n // Read legacy config\r\n const content = await fs.readFile(legacyConfigPath, 'utf-8');\r\n const legacy: LegacyCodexConfig = JSON.parse(content);\r\n\r\n // Create backup if requested\r\n let backupPath: string | undefined;\r\n if (options?.createBackup !== false) {\r\n const suffix = options?.backupSuffix || new Date().toISOString().replace(/[:.]/g, '-');\r\n backupPath = `${legacyConfigPath}.backup-${suffix}`;\r\n await fs.writeFile(backupPath, content, 'utf-8');\r\n }\r\n\r\n // Build YAML config\r\n const yamlConfig: CodexYamlConfig = {\r\n organization: legacy.organization || legacy.organizationSlug || 'default'\r\n };\r\n\r\n // Migrate cache configuration\r\n if (legacy.cache) {\r\n yamlConfig.cacheDir = legacy.cache.directory || '.fractary/codex/cache';\r\n\r\n // Note: Legacy config had cache.defaultTtl, cache.maxSize with string formats\r\n // These are now handled by CacheManager config separately\r\n }\r\n\r\n // Migrate storage providers\r\n if (legacy.storage?.providers) {\r\n yamlConfig.storage = [];\r\n\r\n // Convert providers object to array\r\n for (const [type, config] of Object.entries(legacy.storage.providers)) {\r\n if (type === 'github') {\r\n const githubConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: githubConfig.token || '${GITHUB_TOKEN}',\r\n apiBaseUrl: githubConfig.baseUrl || 'https://api.github.com',\r\n branch: githubConfig.branch || 'main',\r\n priority: 50\r\n });\r\n } else if (type === 'http') {\r\n const httpConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'http',\r\n baseUrl: httpConfig.baseUrl,\r\n headers: httpConfig.headers,\r\n timeout: httpConfig.timeout || 30000,\r\n priority: 100\r\n });\r\n } else if (type === 'local') {\r\n const localConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'local',\r\n basePath: localConfig.basePath || './knowledge',\r\n followSymlinks: localConfig.followSymlinks || false,\r\n priority: 10\r\n });\r\n } else {\r\n warnings.push(`Unknown storage provider type: ${type}`);\r\n }\r\n }\r\n\r\n // If no providers configured, add default GitHub\r\n if (yamlConfig.storage.length === 0) {\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n });\r\n warnings.push('No storage providers found, added default GitHub provider');\r\n }\r\n }\r\n\r\n // Migrate custom types\r\n if (legacy.types?.custom && Array.isArray(legacy.types.custom)) {\r\n yamlConfig.types = {\r\n custom: {}\r\n };\r\n\r\n for (const customType of legacy.types.custom) {\r\n const ct = customType as any;\r\n if (ct.name) {\r\n yamlConfig.types!.custom![ct.name] = {\r\n description: ct.description,\r\n patterns: ct.patterns || [],\r\n defaultTtl: ct.defaultTtl,\r\n archiveAfterDays: ct.archiveAfterDays,\r\n archiveStorage: ct.archiveStorage\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Migrate sync configuration\r\n if (legacy.sync) {\r\n yamlConfig.sync = {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n };\r\n\r\n if (legacy.sync.environments) {\r\n warnings.push('Sync environments are not directly supported in v3.0 - please configure sync rules manually');\r\n }\r\n }\r\n\r\n // Migrate MCP configuration\r\n if (legacy.mcp) {\r\n yamlConfig.mcp = {\r\n enabled: legacy.mcp.enabled || false,\r\n port: legacy.mcp.port || 3000\r\n };\r\n }\r\n\r\n return {\r\n success: true,\r\n yamlConfig,\r\n warnings,\r\n backupPath\r\n };\r\n } catch (error) {\r\n throw new Error(\r\n `Migration failed: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Write YAML config to file\r\n */\r\nexport async function writeYamlConfig(\r\n config: CodexYamlConfig,\r\n outputPath: string\r\n): Promise<void> {\r\n // Ensure directory exists\r\n const dir = path.dirname(outputPath);\r\n await fs.mkdir(dir, { recursive: true });\r\n\r\n // Convert to YAML with nice formatting\r\n const yamlContent = yaml.dump(config, {\r\n indent: 2,\r\n lineWidth: 80,\r\n noRefs: true,\r\n sortKeys: false\r\n });\r\n\r\n // Write to file\r\n await fs.writeFile(outputPath, yamlContent, 'utf-8');\r\n}\r\n\r\n/**\r\n * Get default YAML config (v4.0 standard)\r\n */\r\nexport function getDefaultYamlConfig(organization: string): CodexYamlConfig {\r\n return {\r\n organization,\r\n cacheDir: '.fractary/codex/cache',\r\n\r\n storage: [\r\n {\r\n type: 'local',\r\n basePath: './knowledge',\r\n followSymlinks: false,\r\n priority: 10\r\n },\r\n {\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n },\r\n {\r\n type: 'http',\r\n baseUrl: 'https://codex.example.com',\r\n timeout: 30000,\r\n priority: 100\r\n }\r\n ],\r\n\r\n types: {\r\n custom: {}\r\n },\r\n\r\n permissions: {\r\n default: 'read',\r\n rules: [\r\n {\r\n pattern: 'internal/**',\r\n permission: 'none'\r\n },\r\n {\r\n pattern: 'public/**',\r\n permission: 'read'\r\n }\r\n ]\r\n },\r\n\r\n sync: {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n },\r\n\r\n mcp: {\r\n enabled: false,\r\n port: 3000\r\n }\r\n };\r\n}\r\n\r\n"]}
1
+ {"version":3,"sources":["../../node_modules/tsup/assets/cjs_shims.js","../src/client/codex-client.ts","../src/utils/codex-repository.ts","../src/cli.ts","../src/commands/config/index.ts","../src/commands/config/initialize.ts","../src/commands/config/update.ts","../src/commands/config/validate.ts","../src/commands/config/init.ts","../src/commands/document/index.ts","../src/commands/document/fetch.ts","../src/client/get-client.ts","../src/commands/cache/index.ts","../src/commands/cache/list.ts","../src/commands/cache/clear.ts","../src/commands/cache/stats.ts","../src/commands/cache/health.ts","../src/commands/sync.ts","../src/config/migrate-config.ts"],"names":["CodexClient","CodexError","ConfigurationError","PermissionDeniedError","ValidationError","createCodexClient","spawn","path2","os","fs2","Command","createConfigManager","chalk","resolveOrganization","path","validateNameFormat","crypto","fs","formatBytes","createHealthChecker","path3","readCodexConfig","ensureCodexCloned","result","formatDuration","__filename","fileURLToPath","__dirname","dirname","readFileSync","join"],"mappings":"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","file":"cli.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\r\n * CodexClient - Re-exported from SDK\r\n *\r\n * The CodexClient facade now lives in the SDK (@fractary/codex) so both\r\n * CLI and MCP server share the same implementation. This module re-exports\r\n * for backward compatibility with existing CLI code.\r\n */\r\n\r\nexport {\r\n CodexClient,\r\n createCodexClient,\r\n type CodexClientOptions,\r\n type ClientFetchOptions,\r\n type ClientFetchResult,\r\n} from '@fractary/codex';\r\n\r\n// Re-export SDK error classes for convenience\r\nexport {\r\n CodexError,\r\n ConfigurationError,\r\n ValidationError,\r\n PermissionDeniedError\r\n} from '@fractary/codex';\r\n","/**\n * Codex Repository Utilities\n *\n * Handles cloning and updating the central codex repository for routing-aware sync.\n */\n\nimport * as path from 'path';\nimport * as os from 'os';\nimport * as fs from 'fs/promises';\nimport { spawn } from 'child_process';\nimport type { CodexYamlConfig } from '../config/config-types';\n\n/**\n * Execute a command using spawn (safer than exec)\n */\nfunction spawnAsync(command: string, args: string[], options: { cwd: string }): Promise<string> {\n return new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n ...options,\n env: process.env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('error', (error) => {\n reject(error);\n });\n\n child.on('close', (code) => {\n if (code !== 0) {\n const error: any = new Error(stderr || `Command exited with code ${code}`);\n error.code = code;\n reject(error);\n } else {\n resolve(stdout);\n }\n });\n });\n}\n\n/**\n * Extended config interface with codex_repo field\n */\ninterface CodexConfigWithRepo extends CodexYamlConfig {\n codex_repo?: string;\n}\n\n/**\n * Sanitize a path component to prevent path traversal attacks\n * Removes dangerous sequences like ../ and path separators\n */\nfunction sanitizePathComponent(component: string): string {\n if (!component || typeof component !== 'string') {\n throw new Error('Path component must be a non-empty string');\n }\n\n // Remove path traversal sequences and path separators\n const sanitized = component\n .replace(/\\.\\./g, '')\n .replace(/[/\\\\]/g, '')\n .trim();\n\n if (!sanitized) {\n throw new Error(`Invalid path component: ${component}`);\n }\n\n return sanitized;\n}\n\n/**\n * Validate a GitHub organization or repository name\n * Ensures it contains only safe characters\n */\nfunction validateGitHubName(name: string, type: 'organization' | 'repository'): void {\n if (!name || typeof name !== 'string') {\n throw new Error(`GitHub ${type} name must be a non-empty string`);\n }\n\n // GitHub names can only contain alphanumeric characters, hyphens, underscores, and dots\n if (!/^[a-zA-Z0-9._-]+$/.test(name)) {\n throw new Error(`Invalid GitHub ${type} name: ${name}. Must contain only alphanumeric characters, hyphens, underscores, and dots.`);\n }\n\n // Additional checks\n if (name.startsWith('.') || name.startsWith('-')) {\n throw new Error(`GitHub ${type} name cannot start with a dot or hyphen: ${name}`);\n }\n}\n\n/**\n * Get the temporary directory path for codex clone\n * Includes process ID to prevent race conditions\n */\nexport function getTempCodexPath(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repo || 'codex';\n\n // Sanitize path components to prevent path traversal\n const sanitizedOrg = sanitizePathComponent(config.organization);\n const sanitizedRepo = sanitizePathComponent(codexRepo);\n\n // Include process ID to prevent concurrent sync conflicts\n return path.join(\n os.tmpdir(),\n 'fractary-codex-clone',\n `${sanitizedOrg}-${sanitizedRepo}-${process.pid}`\n );\n}\n\n/**\n * Check if a directory is a valid git repository\n */\nexport async function isValidGitRepo(repoPath: string): Promise<boolean> {\n try {\n const gitDir = path.join(repoPath, '.git');\n const stats = await fs.stat(gitDir);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\n/**\n * Construct the git repository URL from config\n */\nexport function getCodexRepoUrl(config: CodexConfigWithRepo): string {\n const codexRepo = config.codex_repo || 'codex';\n\n // Validate GitHub names to prevent URL injection\n validateGitHubName(config.organization, 'organization');\n validateGitHubName(codexRepo, 'repository');\n\n // Default to GitHub\n // Format: https://github.com/{org}/{repo}.git\n return `https://github.com/${config.organization}/${codexRepo}.git`;\n}\n\n/**\n * Execute a git command in a directory using spawn (safe from command injection)\n */\nasync function execGit(repoPath: string, args: string[]): Promise<string> {\n try {\n const stdout = await spawnAsync('git', args, {\n cwd: repoPath,\n });\n\n return stdout;\n } catch (error: any) {\n // Provide specific error messages based on error code\n if (error.code === 'ENOENT') {\n throw new Error(`Git command not found. Ensure git is installed and in PATH.`);\n }\n if (error.code === 'EACCES') {\n throw new Error(`Permission denied accessing repository at ${repoPath}`);\n }\n if (error.code === 128) {\n throw new Error(`Git authentication failed. Check your credentials and repository access.`);\n }\n // For other errors, include the original message\n throw error;\n }\n}\n\n/**\n * Clone a git repository using spawn (safe from command injection)\n */\nasync function gitClone(\n url: string,\n targetPath: string,\n options?: { branch?: string; depth?: number }\n): Promise<void> {\n // Ensure parent directory exists\n const parentDir = path.dirname(targetPath);\n await fs.mkdir(parentDir, { recursive: true });\n\n // Build args array (safe from command injection)\n const args = ['clone'];\n\n if (options?.depth) {\n // Validate depth is a positive integer\n if (!Number.isInteger(options.depth) || options.depth <= 0) {\n throw new Error(`Invalid depth parameter: ${options.depth}. Must be a positive integer.`);\n }\n args.push('--depth', String(options.depth));\n }\n\n if (options?.branch) {\n // Branch validation already done in gitCheckout, but validate here too\n if (!/^[\\w\\-./]+$/.test(options.branch)) {\n throw new Error(`Invalid branch name: ${options.branch}`);\n }\n args.push('--branch', options.branch);\n }\n\n // Add single-branch flag for performance\n args.push('--single-branch');\n\n args.push(url, targetPath);\n\n // Execute clone using spawn (parent directory is cwd)\n await spawnAsync('git', args, { cwd: parentDir });\n}\n\n/**\n * Fetch updates from remote\n */\nasync function gitFetch(repoPath: string, branch?: string): Promise<void> {\n // For shallow clones, fetch the specific branch if provided\n if (branch) {\n // Validate branch name\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['fetch', 'origin', `${branch}:${branch}`]);\n } else {\n await execGit(repoPath, ['fetch', 'origin']);\n }\n}\n\n/**\n * Checkout a branch\n */\nasync function gitCheckout(repoPath: string, branch: string): Promise<void> {\n // Validate branch name to prevent command injection\n if (!/^[\\w\\-./]+$/.test(branch)) {\n throw new Error(`Invalid branch name: ${branch}`);\n }\n await execGit(repoPath, ['checkout', branch]);\n}\n\n/**\n * Pull latest changes\n */\nasync function gitPull(repoPath: string): Promise<void> {\n await execGit(repoPath, ['pull']);\n}\n\n/**\n * Ensure the codex repository is cloned and up-to-date\n *\n * This function will:\n * 1. Check if the repository already exists in temp directory\n * 2. If it exists and is valid, update it (fetch + checkout + pull)\n * 3. If it doesn't exist, clone it fresh (shallow clone for efficiency)\n * 4. Return the path to the cloned repository\n *\n * @param config - Codex configuration\n * @param options - Clone options\n * @returns Path to the cloned codex repository\n */\nexport async function ensureCodexCloned(\n config: CodexConfigWithRepo,\n options?: { force?: boolean; branch?: string }\n): Promise<string> {\n const tempPath = getTempCodexPath(config);\n const branch = options?.branch || 'main';\n\n // If already exists and not forcing a fresh clone, update it\n if (await isValidGitRepo(tempPath) && !options?.force) {\n try {\n await gitFetch(tempPath, branch);\n await gitCheckout(tempPath, branch);\n await gitPull(tempPath);\n return tempPath;\n } catch (error: any) {\n // If update fails, remove and clone fresh\n console.warn(`Failed to update existing clone: ${error.message}`);\n console.warn(`Removing and cloning fresh...`);\n await fs.rm(tempPath, { recursive: true, force: true });\n }\n }\n\n // Clone fresh\n const repoUrl = getCodexRepoUrl(config);\n\n // Remove existing directory if present\n try {\n await fs.rm(tempPath, { recursive: true, force: true });\n } catch (error: any) {\n // Log but don't fail - directory might not exist yet\n console.warn(`Could not remove existing directory ${tempPath}: ${error.message}`);\n }\n\n await gitClone(repoUrl, tempPath, {\n branch,\n depth: 1, // Shallow clone for efficiency\n });\n\n return tempPath;\n}\n","/**\n * Fractary Codex CLI - Command-line interface for knowledge management\n *\n * Pull-based document retrieval with codex:// URI scheme and intelligent caching.\n *\n * @see https://github.com/fractary/codex\n */\n\nimport { Command } from 'commander';\nimport { configInitializeCommand, configUpdateCommand, configValidateCommand } from './commands/config/index.js';\nimport { documentFetchCommand } from './commands/document/index.js';\nimport { cacheListCommand, cacheClearCommand, cacheStatsCommand, cacheHealthCommand } from './commands/cache/index.js';\nimport { syncCommand } from './commands/sync.js';\nimport { readFileSync } from 'fs';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\n// Read version from package.json\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8'));\nconst VERSION = packageJson.version;\n\n/**\n * Create and configure the CLI\n */\nfunction createCLI(): Command {\n const program = new Command('fractary-codex');\n\n program\n .description('Centralized knowledge management and distribution for AI agents')\n .version(VERSION);\n\n // Config commands (split into distinct operations)\n program.addCommand(configInitializeCommand()); // config-init: Initialize codex section\n program.addCommand(configUpdateCommand()); // Update codex section\n program.addCommand(configValidateCommand()); // Validate codex config\n\n // Document commands\n program.addCommand(documentFetchCommand()); // Fetch documents by URI\n\n // Cache commands\n program.addCommand(cacheListCommand()); // List cache entries\n program.addCommand(cacheClearCommand()); // Clear cache entries\n program.addCommand(cacheStatsCommand()); // Display cache statistics\n program.addCommand(cacheHealthCommand()); // Run diagnostics\n\n // Sync commands\n program.addCommand(syncCommand()); // Bidirectional sync\n\n return program;\n}\n\n/**\n * Main execution\n */\nasync function main() {\n try {\n const program = createCLI();\n await program.parseAsync(process.argv);\n } catch (error) {\n console.error('Error:', error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n}\n\n// Run the CLI\nmain();\n","/**\r\n * Config commands\r\n *\r\n * Three distinct operations for codex configuration management:\r\n * - config-init: Add codex section to existing base config\r\n * - config-update: Update fields in existing codex section\r\n * - config-validate: Validate codex configuration (read-only)\r\n */\r\n\r\nexport { configInitializeCommand } from './initialize.js';\r\nexport { configUpdateCommand } from './update.js';\r\nexport { configValidateCommand } from './validate.js';\r\n\r\n// Re-export SDK utilities used by the plugin\r\nexport {\r\n installMcpServer,\r\n validateNameFormat,\r\n discoverCodexRepo,\r\n type McpInstallResult,\r\n type DiscoverCodexRepoResult,\r\n} from '@fractary/codex';\r\n\r\n// Deprecated: old monolithic configure command\r\nexport { configureCommand } from './init.js';\r\n","/**\n * config-init command\n *\n * Adds the codex section to an existing .fractary/config.yaml (created by @fractary/core).\n * Sets up codex-specific directories, gitignore entries, and MCP server configuration.\n *\n * Requires: .fractary/config.yaml to exist (run `fractary config-initialize` first)\n * Fails if: codex section already exists (unless --force)\n */\n\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport * as path from 'path'\nimport {\n createConfigManager,\n validateNameFormat,\n resolveOrganization,\n type DiscoverCodexRepoResult,\n} from '@fractary/codex'\n\nexport function configInitializeCommand(): Command {\n const cmd = new Command('config-init')\n\n cmd\n .description('Initialize codex section in .fractary/config.yaml (requires base config from @fractary/core)')\n .option('--org <slug>', 'Organization slug (e.g., \"fractary\")')\n .option('--project <name>', 'Project name (default: derived from directory)')\n .option('--codex-repo <name>', 'Codex repository name (e.g., \"codex.fractary.com\")')\n .option('--sync-preset <name>', 'Sync preset (standard, minimal)', 'standard')\n .option('--force', 'Overwrite existing codex section')\n .option('--no-mcp', 'Skip MCP server installation')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const configManager = createConfigManager(process.cwd())\n\n if (!options.json) {\n console.log(chalk.blue('Initializing codex configuration...\\n'))\n }\n\n // Resolve organization\n let org = options.org\n\n if (!org) {\n org = await configManager.detectOrganization()\n }\n\n if (!org) {\n try {\n org = resolveOrganization({\n repoName: path.basename(process.cwd()),\n })\n } catch {\n // continue\n }\n }\n\n if (!org) {\n org = path.basename(process.cwd()).split('-')[0] || 'default'\n if (!options.json) {\n console.log(chalk.yellow(`⚠ Could not detect organization, using: ${org}`))\n console.log(chalk.dim(' Use --org <slug> to specify explicitly\\n'))\n }\n } else if (!options.json) {\n console.log(chalk.dim(`Organization: ${chalk.cyan(org)}\\n`))\n }\n\n // Validate organization\n const orgValidation = validateNameFormat(org, 'organization')\n if (!orgValidation.valid) {\n if (options.json) {\n console.log(JSON.stringify({ error: orgValidation.error }, null, 2))\n } else {\n console.error(chalk.red('Error:'), orgValidation.error)\n }\n process.exit(1)\n }\n\n // Resolve project\n let project = options.project\n if (!project) {\n project = configManager.detectProject()\n if (!options.json) {\n console.log(chalk.dim(`Project: ${chalk.cyan(project)}\\n`))\n }\n }\n\n // Resolve codex repository\n let codexRepo = options.codexRepo\n\n if (codexRepo) {\n const repoValidation = validateNameFormat(codexRepo, 'repository')\n if (!repoValidation.valid) {\n if (options.json) {\n console.log(JSON.stringify({ error: repoValidation.error }, null, 2))\n } else {\n console.error(chalk.red('Error:'), repoValidation.error)\n }\n process.exit(1)\n }\n if (!options.json) {\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)}\\n`))\n }\n } else {\n const discoveryResult: DiscoverCodexRepoResult = await configManager.discoverCodexRepo(org)\n if (discoveryResult.repo) {\n codexRepo = discoveryResult.repo\n if (!options.json) {\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)} (auto-discovered)\\n`))\n }\n } else if (!options.json) {\n if (discoveryResult.message) {\n console.log(chalk.dim(` Note: ${discoveryResult.message}\\n`))\n }\n }\n }\n\n if (!codexRepo) {\n codexRepo = `codex.${org}.com`\n if (!options.json) {\n console.log(chalk.yellow(`⚠ Could not discover codex repository in organization '${org}'`))\n console.log(chalk.dim(` Using default: ${chalk.cyan(codexRepo)}\\n`))\n }\n }\n\n // Initialize codex section\n const result = await configManager.initializeCodexSection({\n organization: org,\n project,\n codexRepo,\n syncPreset: options.syncPreset,\n force: options.force,\n skipMcp: options.mcp === false,\n })\n\n // JSON output\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n configPath: result.configPath,\n codexSectionCreated: result.codexSectionCreated,\n organization: org,\n project,\n codexRepo,\n directories: result.directories,\n gitignore: result.gitignore,\n mcp: result.mcp,\n },\n null,\n 2\n )\n )\n return\n }\n\n // Human-readable output\n console.log('Setting up codex directories...')\n for (const dir of result.directories.created) {\n console.log(chalk.green('✓'), chalk.dim(dir + '/'))\n }\n for (const dir of result.directories.alreadyExisted) {\n console.log(chalk.dim(' ' + dir + '/ (exists)'))\n }\n\n if (result.gitignore.created) {\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (created)'))\n } else if (result.gitignore.updated) {\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (updated)'))\n } else {\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (exists)'))\n }\n\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (codex section added)'))\n\n if (result.mcp) {\n if (result.mcp.alreadyInstalled) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (already configured)'))\n } else if (result.mcp.migrated) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (migrated from old format)'))\n } else if (result.mcp.installed) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (created)'))\n }\n }\n\n console.log(chalk.green('\\n✓ Codex configuration initialized successfully!\\n'))\n\n console.log(chalk.bold('Configuration:'))\n console.log(chalk.dim(` Organization: ${org}`))\n console.log(chalk.dim(` Project: ${project}`))\n console.log(chalk.dim(` Codex Repository: ${codexRepo}`))\n\n console.log(chalk.bold('\\nNext steps:'))\n console.log(chalk.dim(' 1. Restart Claude Code to load the MCP server'))\n console.log(chalk.dim(` 2. Verify codex repository access: gh repo view ${org}/${codexRepo}`))\n console.log(chalk.dim(' 3. Run first sync: /fractary-codex:sync --from-codex --dry-run'))\n } catch (error: any) {\n if (options.json) {\n console.log(JSON.stringify({ error: error.message }, null, 2))\n } else {\n console.error(chalk.red('Error:'), error.message)\n }\n process.exit(1)\n }\n })\n\n return cmd\n}\n","/**\n * config-update command\n *\n * Updates specific fields in the existing codex section of .fractary/config.yaml.\n * Only modifies the fields that are explicitly provided.\n *\n * Requires: codex section to exist (run `config-init` first)\n */\n\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport {\n createConfigManager,\n type CodexUpdateOptions,\n} from '@fractary/codex'\n\nexport function configUpdateCommand(): Command {\n const cmd = new Command('config-update')\n\n cmd\n .description('Update codex configuration fields in .fractary/config.yaml')\n .option('--org <slug>', 'Update organization slug')\n .option('--project <name>', 'Update project name')\n .option('--codex-repo <name>', 'Update codex repository name')\n .option('--sync-preset <name>', 'Update sync preset (standard, minimal)')\n .option('--no-mcp', 'Skip MCP server update')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const configManager = createConfigManager(process.cwd())\n\n // Build update options from provided flags\n const updateOptions: CodexUpdateOptions = {\n skipMcp: options.mcp === false,\n }\n\n let hasUpdates = false\n\n if (options.org !== undefined) {\n updateOptions.organization = options.org\n hasUpdates = true\n }\n\n if (options.project !== undefined) {\n updateOptions.project = options.project\n hasUpdates = true\n }\n\n if (options.codexRepo !== undefined) {\n updateOptions.codexRepo = options.codexRepo\n hasUpdates = true\n }\n\n if (options.syncPreset !== undefined) {\n updateOptions.syncPreset = options.syncPreset\n hasUpdates = true\n }\n\n if (!hasUpdates) {\n if (options.json) {\n console.log(JSON.stringify({ error: 'No fields to update. Provide at least one of: --org, --project, --codex-repo, --sync-preset' }, null, 2))\n } else {\n console.error(chalk.red('Error:'), 'No fields to update. Provide at least one of: --org, --project, --codex-repo, --sync-preset')\n }\n process.exit(1)\n }\n\n if (!options.json) {\n console.log(chalk.blue('Updating codex configuration...\\n'))\n }\n\n const result = await configManager.updateCodexSection(updateOptions)\n\n // JSON output\n if (options.json) {\n console.log(\n JSON.stringify(\n {\n success: true,\n configPath: result.configPath,\n fieldsUpdated: result.fieldsUpdated,\n mcp: result.mcp,\n },\n null,\n 2\n )\n )\n return\n }\n\n // Human-readable output\n if (result.fieldsUpdated.length === 0) {\n console.log(chalk.yellow('No fields were updated.'))\n return\n }\n\n for (const field of result.fieldsUpdated) {\n console.log(chalk.green('✓'), chalk.dim(`Updated: ${field}`))\n }\n\n if (result.mcp) {\n if (result.mcp.alreadyInstalled) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (already configured)'))\n } else if (result.mcp.installed) {\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (updated)'))\n }\n }\n\n console.log(chalk.green('\\n✓ Codex configuration updated successfully!'))\n } catch (error: any) {\n if (options.json) {\n console.log(JSON.stringify({ error: error.message }, null, 2))\n } else {\n console.error(chalk.red('Error:'), error.message)\n }\n process.exit(1)\n }\n })\n\n return cmd\n}\n","/**\n * config-validate command\n *\n * Validates the codex section of .fractary/config.yaml.\n * Read-only operation - never modifies any files.\n *\n * Checks: schema structure, field formats, directory existence, MCP config, gitignore.\n */\n\nimport { Command } from 'commander'\nimport chalk from 'chalk'\nimport { createConfigManager } from '@fractary/codex'\n\nexport function configValidateCommand(): Command {\n const cmd = new Command('config-validate')\n\n cmd\n .description('Validate codex configuration in .fractary/config.yaml (read-only)')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const configManager = createConfigManager(process.cwd())\n\n if (!options.json) {\n console.log(chalk.blue('Validating codex configuration...\\n'))\n }\n\n const result = await configManager.validateCodexConfig()\n\n // JSON output\n if (options.json) {\n console.log(JSON.stringify(result, null, 2))\n if (!result.valid) {\n process.exit(1)\n }\n return\n }\n\n // Human-readable output\n if (result.errors.length > 0) {\n console.log(chalk.red.bold('Errors:'))\n for (const error of result.errors) {\n console.log(chalk.red(' ✗'), `${error.field}: ${error.message}`)\n }\n console.log()\n }\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow.bold('Warnings:'))\n for (const warning of result.warnings) {\n console.log(chalk.yellow(' ⚠'), `${warning.field}: ${warning.message}`)\n }\n console.log()\n }\n\n if (result.valid) {\n if (result.warnings.length === 0) {\n console.log(chalk.green('✓ Codex configuration is valid with no warnings.'))\n } else {\n console.log(chalk.green('✓ Codex configuration is valid'), chalk.yellow(`(${result.warnings.length} warning${result.warnings.length > 1 ? 's' : ''})`))\n }\n } else {\n console.log(chalk.red(`✗ Codex configuration is invalid (${result.errors.length} error${result.errors.length > 1 ? 's' : ''})`))\n process.exit(1)\n }\n } catch (error: any) {\n if (options.json) {\n console.log(JSON.stringify({ error: error.message }, null, 2))\n } else {\n console.error(chalk.red('Error:'), error.message)\n }\n process.exit(1)\n }\n })\n\n return cmd\n}\n","/**\r\n * Configure Codex project command\r\n *\r\n * Creates .fractary/config.yaml (unified config) using SDK's ConfigManager.\r\n * This command is a thin wrapper around the SDK's centralized configuration logic.\r\n */\r\n\r\nimport { Command } from 'commander'\r\nimport chalk from 'chalk'\r\nimport * as path from 'path'\r\nimport {\r\n createConfigManager,\r\n validateNameFormat,\r\n resolveOrganization,\r\n type DiscoverCodexRepoResult,\r\n} from '@fractary/codex'\r\n\r\nexport function configureCommand(): Command {\r\n const cmd = new Command('configure')\r\n\r\n cmd\r\n .description('Initialize unified Fractary configuration (.fractary/config.yaml)')\r\n .option('--org <slug>', 'Organization slug (e.g., \"fractary\")')\r\n .option('--project <name>', 'Project name (default: derived from directory)')\r\n .option('--codex-repo <name>', 'Codex repository name (e.g., \"codex.fractary.com\")')\r\n .option('--sync-preset <name>', 'Sync preset (standard, minimal)', 'standard')\r\n .option('--force', 'Overwrite existing configuration')\r\n .option('--no-mcp', 'Skip MCP server installation')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n const configManager = createConfigManager(process.cwd())\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('Initializing unified Fractary configuration...\\n'))\r\n }\r\n\r\n // Resolve organization\r\n let org = options.org\r\n\r\n if (!org) {\r\n // Try git remote detection via SDK\r\n org = await configManager.detectOrganization()\r\n }\r\n\r\n if (!org) {\r\n // Try SDK's resolveOrganization\r\n try {\r\n org = resolveOrganization({\r\n repoName: path.basename(process.cwd()),\r\n })\r\n } catch {\r\n // SDK method failed, continue\r\n }\r\n }\r\n\r\n if (!org) {\r\n // Default fallback\r\n org = path.basename(process.cwd()).split('-')[0] || 'default'\r\n if (!options.json) {\r\n console.log(chalk.yellow(`⚠ Could not detect organization, using: ${org}`))\r\n console.log(chalk.dim(' Use --org <slug> to specify explicitly\\n'))\r\n }\r\n } else if (!options.json) {\r\n console.log(chalk.dim(`Organization: ${chalk.cyan(org)}\\n`))\r\n }\r\n\r\n // Validate organization name format\r\n const orgValidation = validateNameFormat(org, 'organization')\r\n if (!orgValidation.valid) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: orgValidation.error }, null, 2))\r\n } else {\r\n console.error(chalk.red('Error:'), orgValidation.error)\r\n }\r\n process.exit(1)\r\n }\r\n\r\n // Resolve project name\r\n let project = options.project\r\n if (!project) {\r\n project = configManager.detectProject()\r\n if (!options.json) {\r\n console.log(chalk.dim(`Project: ${chalk.cyan(project)}\\n`))\r\n }\r\n }\r\n\r\n // Resolve codex repository\r\n let codexRepo = options.codexRepo\r\n\r\n // Validate codex repo if provided via CLI\r\n if (codexRepo) {\r\n const repoValidation = validateNameFormat(codexRepo, 'repository')\r\n if (!repoValidation.valid) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: repoValidation.error }, null, 2))\r\n } else {\r\n console.error(chalk.red('Error:'), repoValidation.error)\r\n }\r\n process.exit(1)\r\n }\r\n if (!options.json) {\r\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)}\\n`))\r\n }\r\n } else {\r\n // Try to discover codex repo in the organization\r\n const discoveryResult: DiscoverCodexRepoResult = await configManager.discoverCodexRepo(org)\r\n if (discoveryResult.repo) {\r\n codexRepo = discoveryResult.repo\r\n if (!options.json) {\r\n console.log(chalk.dim(`Codex repository: ${chalk.cyan(codexRepo)} (auto-discovered)\\n`))\r\n }\r\n } else if (!options.json) {\r\n // Log specific error for debugging\r\n if (discoveryResult.message) {\r\n console.log(chalk.dim(` Note: ${discoveryResult.message}\\n`))\r\n }\r\n }\r\n }\r\n\r\n if (!codexRepo) {\r\n if (!options.json) {\r\n console.log(chalk.yellow(`⚠ Could not discover codex repository in organization '${org}'`))\r\n console.log(chalk.dim(' Use --codex-repo <name> to specify explicitly'))\r\n console.log(chalk.dim(' Expected naming convention: codex.{org}.{tld} (e.g., codex.fractary.com)\\n'))\r\n }\r\n // Use a placeholder that makes it clear it needs to be configured\r\n codexRepo = `codex.${org}.com`\r\n if (!options.json) {\r\n console.log(chalk.dim(` Using default: ${chalk.cyan(codexRepo)}\\n`))\r\n }\r\n }\r\n\r\n // Check if config exists\r\n const configExists = await configManager.configExists()\r\n\r\n if (configExists && !options.force) {\r\n if (!options.json) {\r\n console.log(chalk.yellow(`⚠ Configuration already exists at .fractary/config.yaml`))\r\n console.log(chalk.dim('Merging with existing configuration...\\n'))\r\n }\r\n }\r\n\r\n // Initialize configuration using SDK's ConfigManager\r\n if (!options.json) {\r\n console.log('Creating directory structure...')\r\n }\r\n\r\n const result = await configManager.initialize({\r\n organization: org,\r\n project,\r\n codexRepo,\r\n syncPreset: options.syncPreset,\r\n force: options.force,\r\n skipMcp: options.mcp === false,\r\n includeFilePlugin: true,\r\n })\r\n\r\n // JSON output\r\n if (options.json) {\r\n console.log(\r\n JSON.stringify(\r\n {\r\n success: true,\r\n configPath: result.configPath,\r\n created: result.configCreated,\r\n merged: result.configMerged,\r\n organization: org,\r\n project,\r\n codexRepo,\r\n directories: result.directories,\r\n gitignore: result.gitignore,\r\n mcp: result.mcp,\r\n },\r\n null,\r\n 2\r\n )\r\n )\r\n return\r\n }\r\n\r\n // Human-readable output\r\n for (const dir of result.directories.created) {\r\n console.log(chalk.green('✓'), chalk.dim(dir + '/'))\r\n }\r\n for (const dir of result.directories.alreadyExisted) {\r\n console.log(chalk.dim(' ' + dir + '/ (exists)'))\r\n }\r\n\r\n if (result.gitignore.created) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (created)'))\r\n } else if (result.gitignore.updated) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (updated)'))\r\n } else {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/.gitignore (exists)'))\r\n }\r\n\r\n console.log('\\nInitializing configuration...')\r\n\r\n if (result.configCreated) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (created)'))\r\n } else if (result.configMerged) {\r\n console.log(chalk.green('✓'), chalk.dim('.fractary/config.yaml (merged with existing)'))\r\n }\r\n\r\n // MCP server status\r\n if (result.mcp) {\r\n console.log('\\nConfiguring MCP server...')\r\n if (result.mcp.alreadyInstalled) {\r\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (already configured)'))\r\n } else if (result.mcp.migrated) {\r\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (migrated from old format)'))\r\n if (result.mcp.backupPath) {\r\n console.log(chalk.dim(` Backup: ${path.basename(result.mcp.backupPath)}`))\r\n }\r\n } else if (result.mcp.installed) {\r\n console.log(chalk.green('✓'), chalk.dim('.mcp.json (created)'))\r\n }\r\n }\r\n\r\n // Success message\r\n console.log(chalk.green('\\n✓ Unified configuration initialized successfully!\\n'))\r\n\r\n console.log(chalk.bold('Configuration:'))\r\n console.log(chalk.dim(` Organization: ${org}`))\r\n console.log(chalk.dim(` Project: ${project}`))\r\n console.log(chalk.dim(` Codex Repository: ${codexRepo}`))\r\n console.log(chalk.dim(` Config: .fractary/config.yaml`))\r\n\r\n console.log(chalk.bold('\\nFile plugin sources:'))\r\n console.log(chalk.dim(' - specs: .fractary/specs/ → S3'))\r\n console.log(chalk.dim(' - logs: .fractary/logs/ → S3'))\r\n\r\n console.log(chalk.bold('\\nCodex plugin:'))\r\n console.log(chalk.dim(' - Cache: .fractary/codex/cache/'))\r\n console.log(chalk.dim(' - MCP Server: @fractary/codex-mcp (via npx)'))\r\n console.log(chalk.dim(' - Remotes: codex repo configured'))\r\n\r\n console.log(chalk.bold('\\nGit Authentication:'))\r\n console.log(chalk.dim(' Codex sync uses your existing git credentials.'))\r\n console.log(chalk.dim(' Ensure you have access to the codex repository:'))\r\n console.log(chalk.dim(` gh repo view ${org}/${codexRepo}`))\r\n console.log(chalk.dim(' Or set GITHUB_TOKEN environment variable.'))\r\n\r\n console.log(chalk.bold('\\nNext steps:'))\r\n console.log(chalk.dim(' 1. Restart Claude Code to load the MCP server'))\r\n console.log(chalk.dim(' 2. Verify codex repository access: gh repo view ' + org + '/' + codexRepo))\r\n console.log(chalk.dim(' 3. Configure AWS credentials for S3 access (if using file plugin)'))\r\n console.log(chalk.dim(' 4. Edit .fractary/config.yaml to add external project remotes'))\r\n console.log(chalk.dim(' 5. Reference docs via codex:// URIs (auto-fetched by MCP)'))\r\n } catch (error: any) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ error: error.message }, null, 2))\r\n } else {\r\n console.error(chalk.red('Error:'), error.message)\r\n }\r\n process.exit(1)\r\n }\r\n })\r\n\r\n return cmd\r\n}\r\n","/**\r\n * Document fetch command\r\n *\r\n * Top-level command for fetching documents by codex:// URI\r\n */\r\n\r\n// Re-export the document-fetch command\r\nexport { documentFetchCommand } from './fetch.js';\r\n","/**\r\n * Document fetch command (v3.0)\r\n *\r\n * Retrieves documents by codex:// URI reference using SDK's CodexClient:\r\n * - Cache-first retrieval for fast access\r\n * - TTL-based cache invalidation\r\n * - Multiple storage provider support\r\n * - Automatic URI validation and resolution\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as crypto from 'crypto';\r\nimport * as fs from 'fs/promises';\r\nimport { getClient } from '../../client/get-client';\r\n\r\n/**\r\n * Calculate content hash\r\n */\r\nfunction hashContent(content: Buffer): string {\r\n return crypto.createHash('sha256').update(content).digest('hex').slice(0, 16);\r\n}\r\n\r\nexport function documentFetchCommand(): Command {\r\n const cmd = new Command('document-fetch');\r\n\r\n cmd\r\n .description('Fetch a document by codex:// URI reference')\r\n .argument('<uri>', 'Codex URI (e.g., codex://org/project/docs/file.md)')\r\n .option('--bypass-cache', 'Skip cache and fetch directly from source')\r\n .option('--ttl <seconds>', 'Override default TTL (in seconds)', parseInt)\r\n .option('--json', 'Output as JSON with metadata')\r\n .option('--output <file>', 'Write content to file instead of stdout')\r\n .action(async (uri: string, options) => {\r\n try {\r\n // Dynamically import validateUri to avoid loading SDK at module time\r\n const { validateUri } = await import('@fractary/codex');\r\n\r\n // Validate URI format\r\n if (!validateUri(uri)) {\r\n console.error(chalk.red('Error: Invalid URI format'));\r\n console.log(chalk.dim('Expected: codex://org/project/path/to/file.md'));\r\n console.log(chalk.dim('Example: codex://fractary/codex/docs/api.md'));\r\n process.exit(1);\r\n }\r\n\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Show fetching message (unless JSON output)\r\n if (!options.json && !options.bypassCache) {\r\n console.error(chalk.dim(`Fetching ${uri}...`));\r\n }\r\n\r\n // Fetch using CodexClient\r\n const result = await client.fetch(uri, {\r\n bypassCache: options.bypassCache,\r\n ttl: options.ttl\r\n });\r\n\r\n // Output handling\r\n if (options.json) {\r\n const output = {\r\n uri,\r\n content: result.content.toString('utf-8'),\r\n metadata: {\r\n fromCache: result.fromCache,\r\n fetchedAt: result.metadata?.fetchedAt,\r\n expiresAt: result.metadata?.expiresAt,\r\n contentLength: result.metadata?.contentLength || result.content.length,\r\n contentHash: hashContent(result.content)\r\n }\r\n };\r\n console.log(JSON.stringify(output, null, 2));\r\n } else if (options.output) {\r\n // Write to file\r\n await fs.writeFile(options.output, result.content);\r\n console.log(chalk.green('✓'), `Written to ${options.output}`);\r\n console.log(chalk.dim(` Size: ${result.content.length} bytes`));\r\n if (result.fromCache) {\r\n console.log(chalk.dim(' Source: cache'));\r\n } else {\r\n console.log(chalk.dim(' Source: storage'));\r\n }\r\n } else {\r\n // Print to stdout\r\n if (result.fromCache && !options.bypassCache) {\r\n console.error(chalk.green('✓'), chalk.dim('from cache\\n'));\r\n } else {\r\n console.error(chalk.green('✓'), chalk.dim('fetched\\n'));\r\n }\r\n console.log(result.content.toString('utf-8'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n\r\n // Provide helpful error messages\r\n if (error.message.includes('Failed to load configuration')) {\r\n console.log(chalk.dim('\\nRun \"fractary-codex configure\" to create a configuration.'));\r\n } else if (error.message.includes('GITHUB_TOKEN')) {\r\n console.log(chalk.dim('\\nSet your GitHub token: export GITHUB_TOKEN=\"your_token\"'));\r\n } else if (error.message.includes('not found') || error.message.includes('404')) {\r\n console.log(chalk.dim('\\nThe document may not exist or you may not have access.'));\r\n console.log(chalk.dim('Check the URI and ensure your storage providers are configured correctly.'));\r\n }\r\n\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Singleton getter for CodexClient\r\n *\r\n * Provides lazy initialization of the CodexClient instance.\r\n * This ensures we only create one client instance across all command invocations,\r\n * avoiding repeated configuration loading and manager initialization.\r\n *\r\n * Uses dynamic imports to avoid loading @fractary/codex SDK at module load time,\r\n * which prevents CLI hangs when running simple commands like --help.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { getClient } from './get-client';\r\n *\r\n * export async function fetchCommand(uri: string) {\r\n * const client = await getClient();\r\n * const result = await client.fetch(uri);\r\n * console.log(result.content.toString());\r\n * }\r\n * ```\r\n */\r\n\r\n// Import types only\r\nimport type { CodexClient, CodexClientOptions } from './codex-client';\r\n\r\n/**\r\n * Singleton instance\r\n */\r\nlet clientInstance: CodexClient | null = null;\r\n\r\n/**\r\n * Get the CodexClient singleton instance\r\n *\r\n * On first call, creates and initializes the client.\r\n * Subsequent calls return the same instance.\r\n *\r\n * @param options - Optional configuration (only used on first call)\r\n * @returns Promise resolving to CodexClient instance\r\n *\r\n * @example\r\n * ```typescript\r\n * const client = await getClient();\r\n * const stats = await client.getCacheStats();\r\n * ```\r\n */\r\nexport async function getClient(options?: CodexClientOptions): Promise<CodexClient> {\r\n if (!clientInstance) {\r\n // Dynamic import to avoid loading SDK at module time\r\n const { CodexClient } = await import('./codex-client');\r\n clientInstance = await CodexClient.create(options);\r\n }\r\n return clientInstance;\r\n}\r\n\r\n/**\r\n * Reset the singleton instance\r\n *\r\n * Useful for testing or when configuration changes require a fresh client.\r\n *\r\n * @example\r\n * ```typescript\r\n * // After changing configuration\r\n * resetClient();\r\n * const client = await getClient(); // Will create new instance\r\n * ```\r\n */\r\nexport function resetClient(): void {\r\n clientInstance = null;\r\n}\r\n\r\n/**\r\n * Check if client has been initialized\r\n *\r\n * @returns true if client instance exists\r\n */\r\nexport function isClientInitialized(): boolean {\r\n return clientInstance !== null;\r\n}\r\n","/**\r\n * Cache commands\r\n *\r\n * Top-level commands for managing the codex document cache:\r\n * - cache-list: View cached entries\r\n * - cache-clear: Remove cache entries\r\n * - cache-stats: Display cache statistics\r\n * - cache-health: Diagnostics and auto-repair\r\n */\r\n\r\n// Re-export cache commands\r\nexport { cacheListCommand } from './list.js';\r\nexport { cacheClearCommand } from './clear.js';\r\nexport { cacheStatsCommand } from './stats.js';\r\nexport { cacheHealthCommand } from './health.js';\r\n","/**\r\n * Cache list command (v3.0)\r\n *\r\n * Lists cache entries using SDK's CacheManager.listEntries()\r\n * Now provides detailed information about each cached entry.\r\n */\r\n\r\nimport { Command } from 'commander'\r\nimport chalk from 'chalk'\r\nimport { formatBytes, type ListEntriesOptions } from '@fractary/codex'\r\nimport { getClient } from '../../client/get-client'\r\n\r\n/**\r\n * Format remaining TTL for display\r\n */\r\nfunction formatTtl(seconds: number): string {\r\n if (seconds < 0) {\r\n const expired = -seconds\r\n if (expired < 60) return chalk.red(`expired ${expired}s ago`)\r\n if (expired < 3600) return chalk.red(`expired ${Math.floor(expired / 60)}m ago`)\r\n return chalk.red(`expired ${Math.floor(expired / 3600)}h ago`)\r\n }\r\n if (seconds < 60) return chalk.green(`${seconds}s`)\r\n if (seconds < 3600) return chalk.green(`${Math.floor(seconds / 60)}m`)\r\n if (seconds < 86400) return chalk.yellow(`${Math.floor(seconds / 3600)}h`)\r\n return chalk.dim(`${Math.floor(seconds / 86400)}d`)\r\n}\r\n\r\n/**\r\n * Format status with color\r\n */\r\nfunction formatStatus(status: 'fresh' | 'stale' | 'expired'): string {\r\n switch (status) {\r\n case 'fresh':\r\n return chalk.green('fresh')\r\n case 'stale':\r\n return chalk.yellow('stale')\r\n case 'expired':\r\n return chalk.red('expired')\r\n }\r\n}\r\n\r\nexport function cacheListCommand(): Command {\r\n const cmd = new Command('cache-list')\r\n\r\n cmd\r\n .description('List cache entries')\r\n .option('--json', 'Output as JSON')\r\n .option('--status <status>', 'Filter by status (fresh, stale, expired, all)', 'all')\r\n .option('--limit <n>', 'Maximum number of entries to show', parseInt)\r\n .option('--sort <field>', 'Sort by field (uri, size, createdAt, expiresAt)', 'uri')\r\n .option('--desc', 'Sort in descending order')\r\n .option('--verbose', 'Show detailed entry information')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient()\r\n\r\n // Build list options\r\n const listOptions: ListEntriesOptions = {\r\n status: options.status as 'fresh' | 'stale' | 'expired' | 'all',\r\n limit: options.limit,\r\n sortBy: options.sort as 'uri' | 'size' | 'createdAt' | 'expiresAt',\r\n sortDirection: options.desc ? 'desc' : 'asc',\r\n }\r\n\r\n // Get entries from SDK\r\n const result = await client.listCacheEntries(listOptions)\r\n\r\n if (result.total === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({ entries: [], total: 0, message: 'Cache is empty' }))\r\n } else {\r\n console.log(chalk.yellow('Cache is empty.'))\r\n console.log(chalk.dim('Fetch some documents to populate the cache.'))\r\n }\r\n return\r\n }\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(result, null, 2))\r\n return\r\n }\r\n\r\n // Display header\r\n console.log(chalk.bold(`Cache Entries (${result.entries.length} of ${result.total})\\n`))\r\n\r\n // Display entries\r\n if (options.verbose) {\r\n // Detailed view\r\n for (const entry of result.entries) {\r\n console.log(chalk.cyan(entry.uri))\r\n console.log(` Status: ${formatStatus(entry.status)}`)\r\n console.log(` Size: ${formatBytes(entry.size)}`)\r\n console.log(` Content-Type: ${chalk.dim(entry.contentType)}`)\r\n console.log(` TTL: ${formatTtl(entry.remainingTtl)}`)\r\n console.log(` In Memory: ${entry.inMemory ? chalk.green('yes') : chalk.dim('no')}`)\r\n console.log('')\r\n }\r\n } else {\r\n // Compact view - table format\r\n const maxUriLen = Math.min(\r\n 60,\r\n Math.max(...result.entries.map((e) => e.uri.length))\r\n )\r\n\r\n console.log(\r\n chalk.dim(\r\n `${'URI'.padEnd(maxUriLen)} ${'STATUS'.padEnd(8)} ${'SIZE'.padEnd(10)} TTL`\r\n )\r\n )\r\n console.log(chalk.dim('─'.repeat(maxUriLen + 35)))\r\n\r\n for (const entry of result.entries) {\r\n const uri =\r\n entry.uri.length > maxUriLen\r\n ? '...' + entry.uri.slice(-(maxUriLen - 3))\r\n : entry.uri.padEnd(maxUriLen)\r\n\r\n console.log(\r\n `${chalk.cyan(uri)} ${formatStatus(entry.status).padEnd(17)} ${formatBytes(entry.size).padEnd(10)} ${formatTtl(entry.remainingTtl)}`\r\n )\r\n }\r\n }\r\n\r\n // Show pagination info\r\n if (result.hasMore) {\r\n console.log('')\r\n console.log(\r\n chalk.dim(\r\n `Showing ${result.entries.length} of ${result.total} entries. Use --limit to see more.`\r\n )\r\n )\r\n }\r\n\r\n // Show stats summary\r\n const stats = await client.getCacheStats()\r\n console.log('')\r\n console.log(chalk.dim('─'.repeat(60)))\r\n console.log(\r\n chalk.dim(\r\n `Total: ${stats.entryCount} entries (${formatBytes(stats.totalSize)}) | ` +\r\n `${stats.freshCount} fresh, ${stats.staleCount} stale, ${stats.expiredCount} expired`\r\n )\r\n )\r\n } catch (error: any) {\r\n // Provide specific error messages based on error type\r\n const errorMessage = error.message || 'Unknown error'\r\n\r\n if (errorMessage.includes('ENOENT') || errorMessage.includes('not found')) {\r\n console.error(chalk.red('Error:'), 'Cache directory not accessible')\r\n console.error(chalk.dim('Run \"fractary-codex configure\" to initialize the cache.'))\r\n } else if (errorMessage.includes('EACCES') || errorMessage.includes('permission')) {\r\n console.error(chalk.red('Error:'), 'Permission denied accessing cache directory')\r\n console.error(chalk.dim('Check file permissions for .fractary/codex/cache/'))\r\n } else if (errorMessage.includes('ENOSPC')) {\r\n console.error(chalk.red('Error:'), 'No space left on device')\r\n console.error(chalk.dim('Free up disk space and try again.'))\r\n } else if (errorMessage.includes('parse') || errorMessage.includes('JSON')) {\r\n console.error(chalk.red('Error:'), 'Failed to parse cache metadata')\r\n console.error(chalk.dim('The cache may be corrupted. Try \"fractary-codex cache-clear\".'))\r\n } else {\r\n console.error(chalk.red('Error:'), errorMessage)\r\n }\r\n\r\n process.exit(1)\r\n }\r\n })\r\n\r\n return cmd\r\n}\r\n","/**\r\n * Cache clear command (v3.0)\r\n *\r\n * Clears cache entries using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { formatBytes } from '@fractary/codex';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function cacheClearCommand(): Command {\r\n const cmd = new Command('cache-clear');\r\n\r\n cmd\r\n .description('Clear cache entries')\r\n .option('--all', 'Clear entire cache')\r\n .option('--pattern <glob>', 'Clear entries matching URI pattern (e.g., \"codex://fractary/*\")')\r\n .option('--dry-run', 'Show what would be cleared without actually clearing')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get stats before clearing (for reporting)\r\n const statsBefore = await client.getCacheStats();\r\n\r\n if (statsBefore.entryCount === 0) {\r\n console.log(chalk.yellow('Cache is already empty. Nothing to clear.'));\r\n return;\r\n }\r\n\r\n // Determine what to clear\r\n let pattern: string | undefined;\r\n\r\n if (options.all) {\r\n pattern = undefined; // Clear all\r\n } else if (options.pattern) {\r\n pattern = options.pattern;\r\n } else {\r\n console.log(chalk.yellow('Please specify what to clear:'));\r\n console.log(chalk.dim(' --all Clear entire cache'));\r\n console.log(chalk.dim(' --pattern Clear entries matching pattern (e.g., \"codex://fractary/*\")'));\r\n console.log('');\r\n console.log(chalk.dim('Examples:'));\r\n console.log(chalk.dim(' fractary-codex cache-clear --all'));\r\n console.log(chalk.dim(' fractary-codex cache-clear --pattern \"codex://fractary/cli/*\"'));\r\n return;\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would clear:\\n'));\r\n if (pattern) {\r\n console.log(chalk.dim(` Pattern: ${pattern}`));\r\n console.log(chalk.dim(` This would invalidate matching cache entries`));\r\n } else {\r\n console.log(chalk.dim(` All cache entries (${statsBefore.entryCount} entries)`));\r\n }\r\n console.log(chalk.dim(`\\nTotal size: ${formatBytes(statsBefore.totalSize)}`));\r\n return;\r\n }\r\n\r\n // Perform invalidation\r\n if (pattern) {\r\n console.log(chalk.blue(`Clearing cache entries matching pattern: ${pattern}\\n`));\r\n await client.invalidateCache(pattern);\r\n } else {\r\n console.log(chalk.blue(`Clearing entire cache (${statsBefore.entryCount} entries)...\\n`));\r\n await client.invalidateCache();\r\n }\r\n\r\n // Get stats after clearing\r\n const statsAfter = await client.getCacheStats();\r\n const entriesCleared = statsBefore.entryCount - statsAfter.entryCount;\r\n const sizeFreed = statsBefore.totalSize - statsAfter.totalSize;\r\n\r\n // Summary\r\n console.log(chalk.green(`✓ Cleared ${entriesCleared} entries (${formatBytes(sizeFreed)} freed)`));\r\n\r\n if (statsAfter.entryCount > 0) {\r\n console.log(chalk.dim(` Remaining: ${statsAfter.entryCount} entries (${formatBytes(statsAfter.totalSize)})`));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Cache stats command (v3.0)\r\n *\r\n * Display cache statistics using SDK's CacheManager\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport { formatBytes } from '@fractary/codex';\r\nimport { getClient } from '../../client/get-client';\r\n\r\nexport function cacheStatsCommand(): Command {\r\n const cmd = new Command('cache-stats');\r\n\r\n cmd\r\n .description('Display cache statistics')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Get CodexClient instance\r\n const client = await getClient();\r\n\r\n // Get cache stats from SDK\r\n const stats = await client.getCacheStats();\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(stats, null, 2));\r\n return;\r\n }\r\n\r\n // Display formatted output\r\n console.log(chalk.bold('Cache Statistics\\n'));\r\n\r\n console.log(chalk.bold('Overview'));\r\n console.log(` Total entries: ${chalk.cyan(stats.entryCount.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatBytes(stats.totalSize))}`);\r\n console.log(` Fresh entries: ${chalk.green(stats.freshCount.toString())}`);\r\n console.log(` Stale entries: ${stats.staleCount > 0 ? chalk.yellow(stats.staleCount.toString()) : chalk.dim('0')}`);\r\n console.log(` Expired entries: ${stats.expiredCount > 0 ? chalk.red(stats.expiredCount.toString()) : chalk.dim('0')}`);\r\n console.log('');\r\n\r\n // Health indicator based on fresh vs total ratio\r\n const healthPercent = stats.entryCount > 0 ? (stats.freshCount / stats.entryCount) * 100 : 100;\r\n const healthColor = healthPercent > 80 ? chalk.green : healthPercent > 50 ? chalk.yellow : chalk.red;\r\n console.log(`Cache health: ${healthColor(`${healthPercent.toFixed(0)}% fresh`)}`);\r\n\r\n if (stats.expiredCount > 0) {\r\n console.log(chalk.dim('\\nRun \"fractary-codex cache-clear --pattern <pattern>\" to clean up entries.'));\r\n }\r\n\r\n if (stats.entryCount === 0) {\r\n console.log(chalk.dim('\\nNo cached entries. Fetch some documents to populate the cache.'));\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Health command (v3.0)\r\n *\r\n * Comprehensive diagnostics for codex SDK setup using SDK's HealthChecker.\r\n * This is a thin wrapper around the centralized health checking logic in the SDK.\r\n */\r\n\r\nimport { Command } from 'commander'\r\nimport chalk from 'chalk'\r\nimport { createHealthChecker, type HealthCheck, type HealthResult } from '@fractary/codex'\r\nimport { getClient } from '../../client/get-client'\r\n\r\nexport function cacheHealthCommand(): Command {\r\n const cmd = new Command('cache-health')\r\n\r\n cmd\r\n .description('Run diagnostics on codex setup')\r\n .option('--json', 'Output as JSON')\r\n .action(async (options) => {\r\n try {\r\n // Create health checker\r\n const healthChecker = createHealthChecker({\r\n projectRoot: process.cwd(),\r\n })\r\n\r\n // Run configuration and storage checks (don't require client)\r\n const checks: HealthCheck[] = []\r\n\r\n checks.push(await healthChecker.checkConfiguration())\r\n checks.push(await healthChecker.checkStorage())\r\n\r\n // Try to get client for cache and type registry checks\r\n try {\r\n const client = await getClient()\r\n\r\n // Check SDK client initialization\r\n const organization = client.getOrganization()\r\n checks.push({\r\n name: 'SDK Client',\r\n status: 'pass',\r\n message: 'CodexClient initialized successfully',\r\n details: `Organization: ${organization}`,\r\n })\r\n\r\n // Check cache using client's stats\r\n const cacheStats = await client.getCacheStats()\r\n checks.push(healthChecker.checkCacheFromStats(cacheStats))\r\n\r\n // Check type registry using client's registry\r\n const registry = client.getTypeRegistry()\r\n checks.push(healthChecker.checkTypesFromRegistry(registry))\r\n } catch (error: any) {\r\n // Client initialization failed\r\n checks.push({\r\n name: 'SDK Client',\r\n status: 'fail',\r\n message: 'Failed to initialize CodexClient',\r\n details: error.message,\r\n })\r\n\r\n // Add placeholder checks for cache and types\r\n checks.push({\r\n name: 'Cache',\r\n status: 'warn',\r\n message: 'Cache check skipped',\r\n details: 'SDK client not available',\r\n })\r\n\r\n checks.push({\r\n name: 'Type Registry',\r\n status: 'warn',\r\n message: 'Type registry check skipped',\r\n details: 'SDK client not available',\r\n })\r\n }\r\n\r\n // Summarize results\r\n const result: HealthResult = healthChecker.summarize(checks)\r\n\r\n if (options.json) {\r\n console.log(JSON.stringify(result, null, 2))\r\n return\r\n }\r\n\r\n // Display results\r\n console.log(chalk.bold('Codex Health Check\\n'))\r\n\r\n for (const check of result.checks) {\r\n const icon =\r\n check.status === 'pass'\r\n ? chalk.green('✓')\r\n : check.status === 'warn'\r\n ? chalk.yellow('⚠')\r\n : chalk.red('✗')\r\n\r\n const statusColor =\r\n check.status === 'pass' ? chalk.green : check.status === 'warn' ? chalk.yellow : chalk.red\r\n\r\n console.log(`${icon} ${chalk.bold(check.name)}`)\r\n console.log(` ${statusColor(check.message)}`)\r\n if (check.details) {\r\n console.log(` ${chalk.dim(check.details)}`)\r\n }\r\n console.log('')\r\n }\r\n\r\n // Summary\r\n console.log(chalk.dim('─'.repeat(60)))\r\n\r\n const overallStatus =\r\n result.summary.status === 'unhealthy'\r\n ? chalk.red('UNHEALTHY')\r\n : result.summary.status === 'degraded'\r\n ? chalk.yellow('DEGRADED')\r\n : chalk.green('HEALTHY')\r\n\r\n console.log(`Status: ${overallStatus}`)\r\n console.log(\r\n chalk.dim(`${result.summary.passed} passed, ${result.summary.warned} warnings, ${result.summary.failed} failed`)\r\n )\r\n\r\n if (result.summary.failed > 0 || result.summary.warned > 0) {\r\n console.log('')\r\n console.log(chalk.dim('Run checks individually for more details:'))\r\n console.log(chalk.dim(' fractary-codex cache-stats'))\r\n }\r\n\r\n // Exit with error if any checks failed\r\n if (result.summary.failed > 0) {\r\n process.exit(1)\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message)\r\n process.exit(1)\r\n }\r\n })\r\n\r\n return cmd\r\n}\r\n","/**\r\n * Sync command (v3.0)\r\n *\r\n * Synchronizes project with the codex repository using SDK SyncManager:\r\n * - Multi-directional sync (to-codex, from-codex, bidirectional)\r\n * - Manifest tracking for sync state\r\n * - Conflict detection and resolution\r\n * - Pattern-based file filtering\r\n * - Dry-run mode\r\n */\r\n\r\nimport { Command } from 'commander';\r\nimport chalk from 'chalk';\r\nimport * as path from 'path';\r\n// Import types only\r\nimport type {\r\n SyncDirection,\r\n SyncOptions,\r\n SyncConfig\r\n} from '@fractary/codex';\r\nimport { formatBytes, formatDuration } from '@fractary/codex';\r\nimport { readYamlConfig } from '../config/migrate-config';\r\n\r\n/**\r\n * Get environment branch mapping\r\n */\r\nfunction getEnvironmentBranch(config: any, env: string): string {\r\n const envMap = config.sync?.environments || {\r\n dev: 'develop',\r\n test: 'test',\r\n staging: 'staging',\r\n prod: 'main'\r\n };\r\n\r\n return envMap[env] || env;\r\n}\r\n\r\n/**\r\n * Commit and push synced files to the codex repository.\r\n * Shared by both JSON and human-readable output paths.\r\n */\r\nasync function commitAndPushToCodex(\r\n codexRepoPath: string,\r\n projectName: string,\r\n syncedCount: number,\r\n): Promise<{ pushed: boolean; message: string }> {\r\n try {\r\n const { RepoManager } = await import('@fractary/core/repo');\r\n const repoManager = new RepoManager({ platform: 'github' }, codexRepoPath);\r\n\r\n repoManager.stageAll();\r\n\r\n if (repoManager.isClean()) {\r\n return { pushed: false, message: 'No changes to push - codex is already up to date' };\r\n }\r\n\r\n repoManager.commit({\r\n message: `Sync ${syncedCount} files from ${projectName}`,\r\n });\r\n\r\n repoManager.push({});\r\n\r\n return { pushed: true, message: 'Changes pushed to codex repository' };\r\n } catch (error: any) {\r\n return { pushed: false, message: error.message };\r\n }\r\n}\r\n\r\nexport function syncCommand(): Command {\r\n const cmd = new Command('sync');\r\n\r\n cmd\r\n .description('Sync single project with codex repository')\r\n .argument('[name]', 'Project name (auto-detected if not provided)')\r\n .option('--env <env>', 'Target environment (dev/test/staging/prod)', 'prod')\r\n .option('--dry-run', 'Show what would sync without executing')\r\n .option('--direction <dir>', 'Sync direction (to-codex/from-codex/bidirectional)', 'bidirectional')\r\n .option('--include <pattern>', 'Include files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--exclude <pattern>', 'Exclude files matching pattern (can be used multiple times)', (val, prev: string[]) => prev.concat([val]), [])\r\n .option('--force', 'Force sync without checking timestamps')\r\n .option('--json', 'Output as JSON')\r\n .option('--work-id <id>', 'GitHub issue number or URL to scope sync to')\r\n .action(async (name: string | undefined, options) => {\r\n try {\r\n // Load YAML config (unified config path)\r\n const configPath = path.join(process.cwd(), '.fractary', 'config.yaml');\r\n let config;\r\n\r\n try {\r\n config = await readYamlConfig(configPath);\r\n } catch (error) {\r\n console.error(chalk.red('Error:'), 'Codex not initialized.');\r\n console.log(chalk.dim('Run \"fractary-codex configure\" first.'));\r\n process.exit(1);\r\n }\r\n\r\n // Dynamic import to avoid loading SDK at module time\r\n const { createSyncManager, createLocalStorage, detectCurrentProject } = await import('@fractary/codex');\r\n\r\n // Determine project name (priority: CLI arg > config > git detection)\r\n let projectName = name;\r\n if (!projectName) {\r\n // First try config file (readYamlConfig extracts the codex section)\r\n projectName = config.project || undefined;\r\n }\r\n if (!projectName) {\r\n // Fall back to git remote detection\r\n const detected = detectCurrentProject();\r\n projectName = detected.project || undefined;\r\n }\r\n\r\n if (!projectName) {\r\n console.error(chalk.red('Error:'), 'Could not determine project name.');\r\n console.log(chalk.dim('Provide project name as argument, set codex.project in config, or run from a git repository.'));\r\n process.exit(1);\r\n }\r\n\r\n // Validate direction\r\n const validDirections: SyncDirection[] = ['to-codex', 'from-codex', 'bidirectional'];\r\n if (!validDirections.includes(options.direction as SyncDirection)) {\r\n console.error(chalk.red('Error:'), `Invalid direction: ${options.direction}`);\r\n console.log(chalk.dim('Valid options: to-codex, from-codex, bidirectional'));\r\n process.exit(1);\r\n }\r\n\r\n const direction = options.direction as SyncDirection;\r\n const targetBranch = getEnvironmentBranch(config, options.env);\r\n\r\n // Create LocalStorage instance\r\n const localStorage = createLocalStorage({\r\n baseDir: process.cwd()\r\n });\r\n\r\n // Create SyncManager\r\n const syncManager = createSyncManager({\r\n localStorage,\r\n config: config.sync as Partial<SyncConfig>,\r\n manifestPath: path.join(process.cwd(), '.fractary', '.codex-sync-manifest.json')\r\n });\r\n\r\n // Get include patterns from config or use defaults\r\n // For to-codex: use config.sync.to_codex if available\r\n // For from-codex: config.sync.from_codex is handled by routing scanner\r\n const defaultToCodexPatterns = [\r\n 'docs/**/*.md',\r\n 'specs/**/*.md',\r\n '.fractary/standards/**',\r\n '.fractary/templates/**'\r\n ];\r\n\r\n // Use proper type for sync config\r\n const syncConfig = config.sync as Partial<SyncConfig> | undefined;\r\n\r\n // Use SDK to resolve patterns (handles both new and legacy formats)\r\n const sdkPatterns = syncManager.getToCodexPatterns();\r\n const configIncludePatterns = sdkPatterns.length > 0\r\n ? sdkPatterns\r\n : defaultToCodexPatterns;\r\n const configExcludePatterns = syncConfig?.to_codex?.exclude || syncConfig?.exclude || [];\r\n\r\n // CLI options override config\r\n const includePatterns = options.include.length > 0 ? options.include : configIncludePatterns;\r\n const excludePatterns = [\r\n ...configExcludePatterns,\r\n ...options.exclude\r\n ];\r\n\r\n // Scan local files using proper glob pattern matching\r\n const sourceDir = process.cwd();\r\n const { glob: globSync } = await import('glob');\r\n\r\n // Match files using glob patterns\r\n const matchedFilePaths = new Set<string>();\r\n\r\n for (const pattern of includePatterns) {\r\n try {\r\n const matches = await globSync(pattern, {\r\n cwd: sourceDir,\r\n dot: true,\r\n nodir: true,\r\n ignore: excludePatterns\r\n });\r\n matches.forEach(match => matchedFilePaths.add(match));\r\n } catch (error: any) {\r\n console.error(chalk.yellow(`Warning: Invalid pattern \"${pattern}\": ${error.message}`));\r\n }\r\n }\r\n\r\n // Convert matched paths to file objects with stat info\r\n const targetFiles = await Promise.all(\r\n Array.from(matchedFilePaths).map(async (filePath) => {\r\n const fullPath = path.join(sourceDir, filePath);\r\n const stats = await import('fs/promises').then(fs => fs.stat(fullPath));\r\n return {\r\n path: filePath,\r\n size: stats.size,\r\n mtime: stats.mtimeMs\r\n };\r\n })\r\n );\r\n\r\n // Create sync plan with options\r\n // Note: include/exclude patterns are used for to-codex direction.\r\n // For from-codex (routing-aware), these patterns are ignored to avoid\r\n // double filtering, since routing rules already determine which files sync.\r\n const syncOptions: SyncOptions = {\r\n direction,\r\n dryRun: options.dryRun,\r\n force: options.force,\r\n include: includePatterns,\r\n exclude: excludePatterns,\r\n // Pass pre-matched files to SDK (bypasses SDK's internal non-recursive scanning)\r\n sourceFiles: targetFiles\r\n };\r\n\r\n let plan;\r\n let routingScan;\r\n let codexRepoPath: string | undefined;\r\n\r\n // Use routing-aware sync for from-codex direction\r\n if (direction === 'from-codex') {\r\n\r\n try {\r\n const { ensureCodexCloned } = await import('../utils/codex-repository.js');\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('ℹ Cloning/updating codex repository...'));\r\n }\r\n\r\n // Clone codex to temp directory\r\n codexRepoPath = await ensureCodexCloned(config, {\r\n branch: targetBranch\r\n });\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(` Codex cloned to: ${codexRepoPath}`));\r\n console.log(chalk.dim(' Scanning for files routing to this project...\\n'));\r\n } else {\r\n console.log(JSON.stringify({\r\n info: 'Routing-aware sync: cloned codex repository and scanning for files targeting this project',\r\n codexPath: codexRepoPath\r\n }, null, 2));\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), 'Failed to clone codex repository');\r\n console.error(chalk.dim(` ${error.message}`));\r\n\r\n // Provide error-specific troubleshooting\r\n console.log(chalk.yellow('\\nTroubleshooting:'));\r\n if (error.message.includes('Git command not found')) {\r\n console.log(chalk.dim(' Git is not installed or not in PATH.'));\r\n console.log(chalk.dim(' Install git: https://git-scm.com/downloads'));\r\n } else if (error.message.includes('authentication failed') || error.message.includes('Authentication failed')) {\r\n console.log(chalk.dim(' GitHub authentication is required for private repositories.'));\r\n console.log(chalk.dim(' 1. Check auth status: gh auth status'));\r\n console.log(chalk.dim(' 2. Login if needed: gh auth login'));\r\n console.log(chalk.dim(' 3. Or set GITHUB_TOKEN environment variable'));\r\n } else if (error.message.includes('Permission denied')) {\r\n console.log(chalk.dim(' Permission denied accessing repository files.'));\r\n console.log(chalk.dim(' 1. Check file/directory permissions'));\r\n console.log(chalk.dim(' 2. Ensure you have access to the repository'));\r\n } else if (error.message.includes('not found') || error.message.includes('does not exist')) {\r\n console.log(chalk.dim(` Repository not found: ${config.organization}/${(config as any).codex_repo || 'codex'}`));\r\n console.log(chalk.dim(' 1. Verify the repository exists on GitHub'));\r\n console.log(chalk.dim(' 2. Check organization and repository names in config'));\r\n } else {\r\n // Generic troubleshooting for other errors\r\n console.log(chalk.dim(' 1. Ensure git is installed: git --version'));\r\n console.log(chalk.dim(' 2. Check GitHub auth: gh auth status'));\r\n console.log(chalk.dim(` 3. Verify repo exists: ${config.organization}/${(config as any).codex_repo || 'codex'}`));\r\n }\r\n process.exit(1);\r\n }\r\n\r\n // Use temp clone path for routing scan\r\n const planWithRouting = await syncManager.createRoutingAwarePlan(\r\n config.organization,\r\n projectName,\r\n codexRepoPath,\r\n {\r\n ...syncOptions,\r\n codexRepo: 'codex_repo' in config ? (config as { codex_repo?: string }).codex_repo : undefined,\r\n }\r\n );\r\n\r\n plan = planWithRouting;\r\n routingScan = planWithRouting.routingScan;\r\n } else {\r\n // To-codex direction: clone codex, copy files, commit, push\r\n\r\n try {\r\n const { ensureCodexCloned } = await import('../utils/codex-repository.js');\r\n\r\n if (!options.json) {\r\n console.log(chalk.blue('ℹ Cloning/updating codex repository...'));\r\n }\r\n\r\n // Clone codex to temp directory\r\n codexRepoPath = await ensureCodexCloned(config, {\r\n branch: targetBranch\r\n });\r\n\r\n if (!options.json) {\r\n console.log(chalk.dim(` Codex cloned to: ${codexRepoPath}`));\r\n }\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), 'Failed to clone codex repository');\r\n console.error(chalk.dim(` ${error.message}`));\r\n process.exit(1);\r\n }\r\n\r\n // For to-codex: scan existing files in codex target for proper change detection\r\n const codexProjectDir = path.join(codexRepoPath, 'projects', projectName);\r\n let existingCodexFiles: Array<{ path: string; size: number; mtime: number }> = [];\r\n try {\r\n const codexGlobMatches = await globSync('**/*', {\r\n cwd: codexProjectDir,\r\n dot: true,\r\n nodir: true,\r\n });\r\n const fsPromises = await import('fs/promises');\r\n existingCodexFiles = await Promise.all(\r\n codexGlobMatches.map(async (filePath: string) => {\r\n const fullPath = path.join(codexProjectDir, filePath);\r\n const stats = await fsPromises.stat(fullPath);\r\n return {\r\n path: filePath,\r\n size: stats.size,\r\n mtime: stats.mtimeMs,\r\n };\r\n })\r\n );\r\n } catch {\r\n // Directory may not exist yet (first sync) — treat as empty\r\n }\r\n\r\n plan = await syncManager.createPlan(\r\n config.organization,\r\n projectName,\r\n sourceDir,\r\n existingCodexFiles,\r\n syncOptions\r\n );\r\n\r\n // Set actual paths for execution\r\n // Source: local project directory\r\n // Target: codex repo / projects / project\r\n plan.source = sourceDir;\r\n plan.target = path.join(codexRepoPath, 'projects', projectName);\r\n }\r\n\r\n if (plan.totalFiles === 0) {\r\n if (options.json) {\r\n console.log(JSON.stringify({\r\n project: projectName,\r\n organization: config.organization,\r\n workId: options.workId || null,\r\n files: [],\r\n synced: 0,\r\n status: 'success',\r\n message: 'No files to sync'\r\n }, null, 2));\r\n } else {\r\n console.log(chalk.yellow('No files to sync.'));\r\n }\r\n return;\r\n }\r\n\r\n if (options.json) {\r\n const output = {\r\n project: projectName,\r\n organization: config.organization,\r\n environment: options.env,\r\n branch: targetBranch,\r\n direction,\r\n dryRun: options.dryRun || false,\r\n workId: options.workId || null,\r\n plan: {\r\n totalFiles: plan.totalFiles,\r\n totalBytes: plan.totalBytes,\r\n estimatedTime: plan.estimatedTime,\r\n conflicts: plan.conflicts.length,\r\n skipped: plan.skipped.length\r\n },\r\n files: plan.files.map(f => ({\r\n path: f.path,\r\n operation: f.operation,\r\n size: f.size\r\n }))\r\n };\r\n\r\n if (options.dryRun) {\r\n console.log(JSON.stringify({\r\n ...output,\r\n status: 'success'\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Execute and add results\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n\r\n // For to-codex: commit and push changes to codex repository\r\n let pushResult: { pushed: boolean; message: string } | undefined;\r\n if (direction === 'to-codex' && codexRepoPath && result.synced > 0) {\r\n pushResult = await commitAndPushToCodex(codexRepoPath, projectName, result.synced);\r\n }\r\n\r\n // Determine status: success, warning, or failure\r\n let status: 'success' | 'warning' | 'failure';\r\n if (!result.success && result.synced === 0) {\r\n status = 'failure';\r\n } else if (!result.success || result.failed > 0 || plan.conflicts.length > 0) {\r\n status = 'warning';\r\n } else {\r\n status = 'success';\r\n }\r\n\r\n console.log(JSON.stringify({\r\n ...output,\r\n status,\r\n result: {\r\n success: result.success,\r\n synced: result.synced,\r\n failed: result.failed,\r\n skipped: result.skipped,\r\n duration: result.duration,\r\n errors: result.errors\r\n },\r\n ...(pushResult ? { pushed: pushResult.pushed, pushMessage: pushResult.message } : {}),\r\n }, null, 2));\r\n return;\r\n }\r\n\r\n // Display sync plan\r\n console.log(chalk.bold('Sync Plan\\n'));\r\n console.log(` Project: ${chalk.cyan(projectName)}`);\r\n console.log(` Organization: ${chalk.cyan(config.organization)}`);\r\n console.log(` Environment: ${chalk.cyan(options.env)} (${targetBranch})`);\r\n console.log(` Direction: ${chalk.cyan(direction)}`);\r\n console.log(` Files: ${chalk.cyan(plan.totalFiles.toString())}`);\r\n console.log(` Total size: ${chalk.cyan(formatBytes(plan.totalBytes))}`);\r\n if (plan.estimatedTime) {\r\n console.log(` Est. time: ${chalk.dim(formatDuration(plan.estimatedTime))}`);\r\n }\r\n\r\n // Display routing statistics if using routing-aware sync\r\n if (routingScan) {\r\n console.log('');\r\n console.log(chalk.bold('Routing Statistics\\n'));\r\n console.log(` Scanned: ${chalk.cyan(routingScan.stats.totalScanned.toString())} files`);\r\n console.log(` Matched: ${chalk.cyan(routingScan.stats.totalMatched.toString())} files`);\r\n console.log(` Source projects: ${chalk.cyan(routingScan.stats.sourceProjects.length.toString())}`);\r\n if (routingScan.stats.sourceProjects.length > 0) {\r\n console.log(chalk.dim(` ${routingScan.stats.sourceProjects.slice(0, 5).join(', ')}`));\r\n if (routingScan.stats.sourceProjects.length > 5) {\r\n console.log(chalk.dim(` ... and ${routingScan.stats.sourceProjects.length - 5} more`));\r\n }\r\n }\r\n console.log(` Scan time: ${chalk.dim(formatDuration(routingScan.stats.durationMs))}`);\r\n }\r\n\r\n console.log('');\r\n\r\n if (plan.conflicts.length > 0) {\r\n console.log(chalk.yellow(`⚠ ${plan.conflicts.length} conflicts detected:`));\r\n for (const conflict of plan.conflicts.slice(0, 5)) {\r\n console.log(chalk.yellow(` • ${conflict.path}`));\r\n }\r\n if (plan.conflicts.length > 5) {\r\n console.log(chalk.dim(` ... and ${plan.conflicts.length - 5} more`));\r\n }\r\n console.log('');\r\n }\r\n\r\n if (plan.skipped.length > 0) {\r\n console.log(chalk.dim(`${plan.skipped.length} files skipped (no changes)`));\r\n console.log('');\r\n }\r\n\r\n if (options.dryRun) {\r\n console.log(chalk.blue('Dry run - would sync:\\n'));\r\n\r\n const filesToShow = plan.files.slice(0, 10);\r\n for (const file of filesToShow) {\r\n const arrow = direction === 'to-codex' ? '→' : direction === 'from-codex' ? '←' : '↔';\r\n const opColor = file.operation === 'create' ? chalk.green :\r\n file.operation === 'update' ? chalk.yellow :\r\n chalk.dim;\r\n console.log(\r\n chalk.dim(` ${arrow}`),\r\n opColor(file.operation.padEnd(7)),\r\n file.path,\r\n chalk.dim(`(${formatBytes(file.size || 0)})`)\r\n );\r\n }\r\n\r\n if (plan.files.length > 10) {\r\n console.log(chalk.dim(` ... and ${plan.files.length - 10} more files`));\r\n }\r\n\r\n console.log(chalk.dim(`\\nTotal: ${plan.totalFiles} files (${formatBytes(plan.totalBytes)})`));\r\n console.log(chalk.dim('Run without --dry-run to execute sync.'));\r\n return;\r\n }\r\n\r\n // Execute sync\r\n console.log(chalk.blue('Syncing...\\n'));\r\n\r\n const startTime = Date.now();\r\n const result = await syncManager.executePlan(plan, syncOptions);\r\n const duration = Date.now() - startTime;\r\n\r\n // For to-codex: commit and push changes to codex repository\r\n if (direction === 'to-codex' && codexRepoPath && result.synced > 0) {\r\n console.log(chalk.blue('Committing and pushing to codex...'));\r\n const pushResult = await commitAndPushToCodex(codexRepoPath, projectName, result.synced);\r\n if (pushResult.pushed) {\r\n console.log(chalk.dim(` ${pushResult.message}`));\r\n } else {\r\n console.log(chalk.dim(` ${pushResult.message}`));\r\n }\r\n }\r\n\r\n // Summary\r\n console.log('');\r\n if (result.success) {\r\n console.log(chalk.green(`✓ Sync completed successfully`));\r\n console.log(chalk.dim(` Synced: ${result.synced} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n console.log(chalk.dim(` Duration: ${formatDuration(duration)}`));\r\n } else {\r\n console.log(chalk.yellow(`⚠ Sync completed with errors`));\r\n console.log(chalk.green(` Synced: ${result.synced} files`));\r\n console.log(chalk.red(` Failed: ${result.failed} files`));\r\n if (result.skipped > 0) {\r\n console.log(chalk.dim(` Skipped: ${result.skipped} files`));\r\n }\r\n\r\n if (result.errors.length > 0) {\r\n console.log('');\r\n console.log(chalk.red('Errors:'));\r\n for (const error of result.errors.slice(0, 5)) {\r\n console.log(chalk.red(` • ${error.path}: ${error.error}`));\r\n }\r\n if (result.errors.length > 5) {\r\n console.log(chalk.dim(` ... and ${result.errors.length - 5} more errors`));\r\n }\r\n }\r\n }\r\n\r\n } catch (error: any) {\r\n console.error(chalk.red('Error:'), error.message);\r\n process.exit(1);\r\n }\r\n });\r\n\r\n return cmd;\r\n}\r\n","/**\r\n * Configuration migration utility\r\n *\r\n * Converts legacy v2.x JSON config to v3.0 YAML format.\r\n * Uses SDK utilities where possible to avoid code duplication.\r\n */\r\n\r\nimport * as fs from 'fs/promises'\r\nimport * as path from 'path'\r\nimport * as yaml from 'js-yaml'\r\nimport {\r\n type CodexYamlConfig,\r\n type LegacyCodexConfig,\r\n} from './config-types'\r\n// Re-export readCodexConfig from SDK for backward compatibility\r\nexport { readCodexConfig as readYamlConfig } from '@fractary/codex'\r\n\r\n/**\r\n * Migration result\r\n */\r\nexport interface MigrationResult {\r\n success: boolean;\r\n yamlConfig: CodexYamlConfig;\r\n warnings: string[];\r\n backupPath?: string;\r\n}\r\n\r\n/**\r\n * Detect if a config file is legacy JSON format\r\n */\r\nexport async function isLegacyConfig(configPath: string): Promise<boolean> {\r\n try {\r\n const content = await fs.readFile(configPath, 'utf-8');\r\n const config = JSON.parse(content);\r\n\r\n // Check for legacy v2.x structure\r\n return (\r\n config.version === '3.0' ||\r\n config.organizationSlug !== undefined ||\r\n config.directories !== undefined ||\r\n config.rules !== undefined\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Migrate legacy JSON config to v3.0 YAML format\r\n */\r\nexport async function migrateConfig(\r\n legacyConfigPath: string,\r\n options?: {\r\n createBackup?: boolean;\r\n backupSuffix?: string;\r\n }\r\n): Promise<MigrationResult> {\r\n const warnings: string[] = [];\r\n\r\n try {\r\n // Read legacy config\r\n const content = await fs.readFile(legacyConfigPath, 'utf-8');\r\n const legacy: LegacyCodexConfig = JSON.parse(content);\r\n\r\n // Create backup if requested\r\n let backupPath: string | undefined;\r\n if (options?.createBackup !== false) {\r\n const suffix = options?.backupSuffix || new Date().toISOString().replace(/[:.]/g, '-');\r\n backupPath = `${legacyConfigPath}.backup-${suffix}`;\r\n await fs.writeFile(backupPath, content, 'utf-8');\r\n }\r\n\r\n // Build YAML config\r\n const yamlConfig: CodexYamlConfig = {\r\n organization: legacy.organization || legacy.organizationSlug || 'default'\r\n };\r\n\r\n // Migrate cache configuration\r\n if (legacy.cache) {\r\n yamlConfig.cacheDir = legacy.cache.directory || '.fractary/codex/cache';\r\n\r\n // Note: Legacy config had cache.defaultTtl, cache.maxSize with string formats\r\n // These are now handled by CacheManager config separately\r\n }\r\n\r\n // Migrate storage providers\r\n if (legacy.storage?.providers) {\r\n yamlConfig.storage = [];\r\n\r\n // Convert providers object to array\r\n for (const [type, config] of Object.entries(legacy.storage.providers)) {\r\n if (type === 'github') {\r\n const githubConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: githubConfig.token || '${GITHUB_TOKEN}',\r\n apiBaseUrl: githubConfig.baseUrl || 'https://api.github.com',\r\n branch: githubConfig.branch || 'main',\r\n priority: 50\r\n });\r\n } else if (type === 'http') {\r\n const httpConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'http',\r\n baseUrl: httpConfig.baseUrl,\r\n headers: httpConfig.headers,\r\n timeout: httpConfig.timeout || 30000,\r\n priority: 100\r\n });\r\n } else if (type === 'local') {\r\n const localConfig = config as any;\r\n yamlConfig.storage.push({\r\n type: 'local',\r\n basePath: localConfig.basePath || './knowledge',\r\n followSymlinks: localConfig.followSymlinks || false,\r\n priority: 10\r\n });\r\n } else {\r\n warnings.push(`Unknown storage provider type: ${type}`);\r\n }\r\n }\r\n\r\n // If no providers configured, add default GitHub\r\n if (yamlConfig.storage.length === 0) {\r\n yamlConfig.storage.push({\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n });\r\n warnings.push('No storage providers found, added default GitHub provider');\r\n }\r\n }\r\n\r\n // Migrate custom types\r\n if (legacy.types?.custom && Array.isArray(legacy.types.custom)) {\r\n yamlConfig.types = {\r\n custom: {}\r\n };\r\n\r\n for (const customType of legacy.types.custom) {\r\n const ct = customType as any;\r\n if (ct.name) {\r\n yamlConfig.types!.custom![ct.name] = {\r\n description: ct.description,\r\n patterns: ct.patterns || [],\r\n defaultTtl: ct.defaultTtl,\r\n archiveAfterDays: ct.archiveAfterDays,\r\n archiveStorage: ct.archiveStorage\r\n };\r\n }\r\n }\r\n }\r\n\r\n // Migrate sync configuration\r\n if (legacy.sync) {\r\n yamlConfig.sync = {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n };\r\n\r\n if (legacy.sync.environments) {\r\n warnings.push('Sync environments are not directly supported in v3.0 - please configure sync rules manually');\r\n }\r\n }\r\n\r\n // Migrate MCP configuration\r\n if (legacy.mcp) {\r\n yamlConfig.mcp = {\r\n enabled: legacy.mcp.enabled || false,\r\n port: legacy.mcp.port || 3000\r\n };\r\n }\r\n\r\n return {\r\n success: true,\r\n yamlConfig,\r\n warnings,\r\n backupPath\r\n };\r\n } catch (error) {\r\n throw new Error(\r\n `Migration failed: ${error instanceof Error ? error.message : String(error)}`\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Write YAML config to file\r\n */\r\nexport async function writeYamlConfig(\r\n config: CodexYamlConfig,\r\n outputPath: string\r\n): Promise<void> {\r\n // Ensure directory exists\r\n const dir = path.dirname(outputPath);\r\n await fs.mkdir(dir, { recursive: true });\r\n\r\n // Convert to YAML with nice formatting\r\n const yamlContent = yaml.dump(config, {\r\n indent: 2,\r\n lineWidth: 80,\r\n noRefs: true,\r\n sortKeys: false\r\n });\r\n\r\n // Write to file\r\n await fs.writeFile(outputPath, yamlContent, 'utf-8');\r\n}\r\n\r\n/**\r\n * Get default YAML config (v4.0 standard)\r\n */\r\nexport function getDefaultYamlConfig(organization: string): CodexYamlConfig {\r\n return {\r\n organization,\r\n cacheDir: '.fractary/codex/cache',\r\n\r\n storage: [\r\n {\r\n type: 'local',\r\n basePath: './knowledge',\r\n followSymlinks: false,\r\n priority: 10\r\n },\r\n {\r\n type: 'github',\r\n token: '${GITHUB_TOKEN}',\r\n apiBaseUrl: 'https://api.github.com',\r\n branch: 'main',\r\n priority: 50\r\n },\r\n {\r\n type: 'http',\r\n baseUrl: 'https://codex.example.com',\r\n timeout: 30000,\r\n priority: 100\r\n }\r\n ],\r\n\r\n types: {\r\n custom: {}\r\n },\r\n\r\n permissions: {\r\n default: 'read',\r\n rules: [\r\n {\r\n pattern: 'internal/**',\r\n permission: 'none'\r\n },\r\n {\r\n pattern: 'public/**',\r\n permission: 'read'\r\n }\r\n ]\r\n },\r\n\r\n sync: {\r\n bidirectional: true,\r\n conflictResolution: 'prompt',\r\n exclude: [\r\n 'node_modules/**',\r\n '.git/**',\r\n '**/*.log',\r\n '.env'\r\n ]\r\n },\r\n\r\n mcp: {\r\n enabled: false,\r\n port: 3000\r\n }\r\n };\r\n}\r\n\r\n"]}