@kb-labs/release-manager-cli 2.119.0 → 2.119.1-canary.b53bbee1d

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.
Files changed (80) hide show
  1. package/dist/cli/commands/build.js.map +1 -1
  2. package/dist/cli/commands/changelog.js.map +1 -1
  3. package/dist/cli/commands/checks.js.map +1 -1
  4. package/dist/cli/commands/deliver.js.map +1 -1
  5. package/dist/cli/commands/git.d.ts +2 -0
  6. package/dist/cli/commands/git.js +11 -4
  7. package/dist/cli/commands/git.js.map +1 -1
  8. package/dist/cli/commands/pack.js.map +1 -1
  9. package/dist/cli/commands/plan.js.map +1 -1
  10. package/dist/cli/commands/promote.js.map +1 -1
  11. package/dist/cli/commands/publish.js.map +1 -1
  12. package/dist/cli/commands/report.js.map +1 -1
  13. package/dist/cli/commands/rollback.js.map +1 -1
  14. package/dist/cli/commands/run.js.map +1 -1
  15. package/dist/cli/commands/stage-plan.js.map +1 -1
  16. package/dist/cli/commands/stage.js.map +1 -1
  17. package/dist/cli/commands/status.js.map +1 -1
  18. package/dist/cli/commands/verify-clean-install.js.map +1 -1
  19. package/dist/cli/commands/verify.js.map +1 -1
  20. package/dist/cli/commands/version.d.ts +2 -0
  21. package/dist/cli/commands/version.js +11 -4
  22. package/dist/cli/commands/version.js.map +1 -1
  23. package/dist/contracts/release.schema.js.map +1 -1
  24. package/dist/index.js +13 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/manifest.js +13 -0
  27. package/dist/manifest.js.map +1 -1
  28. package/dist/manifest.json +1309 -0
  29. package/dist/rest/handlers/build-handler.js.map +1 -1
  30. package/dist/rest/handlers/changelog-generate-handler.js.map +1 -1
  31. package/dist/rest/handlers/changelog-handler.js.map +1 -1
  32. package/dist/rest/handlers/changelog-save-handler.js.map +1 -1
  33. package/dist/rest/handlers/checklist-handler.js.map +1 -1
  34. package/dist/rest/handlers/generate-handler.d.ts +2 -2
  35. package/dist/rest/handlers/generate-handler.js.map +1 -1
  36. package/dist/rest/handlers/get-checks-handler.js.map +1 -1
  37. package/dist/rest/handlers/git-timeline-handler.js.map +1 -1
  38. package/dist/rest/handlers/history-changelog-handler.js.map +1 -1
  39. package/dist/rest/handlers/history-handler.js.map +1 -1
  40. package/dist/rest/handlers/history-plan-handler.d.ts +1 -1
  41. package/dist/rest/handlers/history-plan-handler.js.map +1 -1
  42. package/dist/rest/handlers/history-report-handler.d.ts +1 -1
  43. package/dist/rest/handlers/history-report-handler.js.map +1 -1
  44. package/dist/rest/handlers/plan-handler.d.ts +1 -1
  45. package/dist/rest/handlers/plan-handler.js.map +1 -1
  46. package/dist/rest/handlers/preview-handler.js.map +1 -1
  47. package/dist/rest/handlers/report-handler.d.ts +1 -1
  48. package/dist/rest/handlers/report-handler.js.map +1 -1
  49. package/dist/rest/handlers/reset-handler.js.map +1 -1
  50. package/dist/rest/handlers/run-checks-handler.js.map +1 -1
  51. package/dist/rest/handlers/run-handler.d.ts +1 -1
  52. package/dist/rest/handlers/run-handler.js.map +1 -1
  53. package/dist/rest/handlers/scopes-handler.js.map +1 -1
  54. package/dist/rest/handlers/status-handler.js.map +1 -1
  55. package/dist/setup/handler.js.map +1 -1
  56. package/dist/widgets/117.js +32 -0
  57. package/dist/widgets/165.js +1 -0
  58. package/dist/widgets/326.js +1 -0
  59. package/dist/widgets/370.js +1 -0
  60. package/dist/widgets/405.js +1 -0
  61. package/dist/widgets/46.js +445 -0
  62. package/dist/widgets/50.js +1 -0
  63. package/dist/widgets/546.js +1 -0
  64. package/dist/widgets/648.js +1 -0
  65. package/dist/widgets/669.js +1 -0
  66. package/dist/widgets/707.js +1 -0
  67. package/dist/widgets/775.js +1 -0
  68. package/dist/widgets/78.js +1 -0
  69. package/dist/widgets/832.js +96 -0
  70. package/dist/widgets/875.js +25 -0
  71. package/dist/widgets/945.js +1 -0
  72. package/dist/widgets/968.js +9 -0
  73. package/dist/widgets/__federation_expose_ReleasePage.js +1 -0
  74. package/dist/widgets/mf-manifest.json +229 -0
  75. package/dist/widgets/mf-stats.json +256 -0
  76. package/dist/widgets/remoteEntry.js +7 -0
  77. package/dist/workflows/templates/dry-run.yaml +37 -0
  78. package/dist/workflows/templates/full-release.yaml +58 -0
  79. package/dist/workflows/templates/hotfix.yaml +40 -0
  80. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../home/runner/work/kb-labs/kb-labs/plugins/release/manager-cli/src/shared/changelog-factory.ts","../../../../home/runner/work/kb-labs/kb-labs/plugins/release/manager-cli/src/shared/dep-rewrite.ts","../../../../home/runner/work/kb-labs/kb-labs/plugins/release/manager-cli/src/shared/publish-programmatic.ts","../../../../home/runner/work/kb-labs/kb-labs/plugins/release/manager-cli/src/shared/publish-with-otp.ts","../../../../home/runner/work/kb-labs/kb-labs/plugins/release/manager-cli/src/cli/commands/run.ts"],"names":["join","readFileSync","writeFileSync","MAX_RETRIES","RETRY_BASE_DELAYS_MS","RETRYABLE_PATTERNS","ALREADY_PUBLISHED_PATTERNS","isRetryable","isAlreadyPublished","retryDelay","spawn","useEnv","readline2","useLoader"],"mappings":";;;;;;;;;AAcO,SAAS,wBAAA,CAAyB,QAAuB,GAAA,EAAgC;AAC9F,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM;AACzB,MAAA,MAAM,MAAA,GAAU,MAAA,CAAO,SAAA,EAAW,MAAA,IAA0B,IAAA;AAC5D,MAAA,MAAM,QAAA,GAAmC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,QACjE,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,gBAAgB,GAAA,CAAI,cAAA;AAAA,QACpB,aAAa,GAAA,CAAI,WAAA;AAAA,QACjB,IAAA,EAAM,GAAA,CAAI,IAAA,KAAS,MAAA,GAAS,UAAU,GAAA,CAAI;AAAA,OAC5C,CAAE,CAAA;AACF,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB;AAAA,UACrC,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACL,GAAG,IAAA,CAAK,KAAA;AAAA,YACR,EAAA,EAAI,IAAA,CAAK,KAAA,EAAO,EAAA,IAAM,MAAA;AAAA,YACtB,OAAA,EAAS,IAAA,CAAK,IAAA,GACV,eAAA,CAAgB,IAAA,CAAK,IAAA,EAAM,GAAA,EAAK,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,IAAI,CAAA,EAAG,UAAU,CAAA,GACrE,KAAA;AAAA,WACN;AAAA,UACA,SAAA,EAAW;AAAA,YACT,QAAA,EAAU,MAAA,CAAO,SAAA,EAAW,QAAA,IAAY,KAAA,CAAA;AAAA,YACxC,MAAA;AAAA,YACA,QAAA,EAAU,OAAO,SAAA,EAAW,QAAA;AAAA,YAC5B,aAAA,EAAe,OAAO,SAAA,EAAW,aAAA;AAAA,YACjC,YAAA,EAAc,OAAO,SAAA,EAAW,YAAA;AAAA,YAChC,YAAA,EAAc,OAAO,SAAA,EAAW,YAAA;AAAA,YAChC,cAAA,EAAgB,OAAO,SAAA,EAAW,cAAA;AAAA,YAClC,eAAA,EAAiB,OAAO,SAAA,EAAW,eAAA;AAAA,YACnC,kBAAA,EAAoB,OAAO,SAAA,EAAW,kBAAA;AAAA,YACtC,MAAA,EAAQ,OAAO,SAAA,EAAW;AAAA,WAC5B;AAAA,UACA,GAAA,EAAK;AAAA,YACH,aAAA,EAAe,OAAO,GAAA,EAAK,aAAA;AAAA,YAC3B,iBAAA,EAAmB,OAAO,GAAA,EAAK,iBAAA;AAAA,YAC/B,OAAA,EAAS,MAAA,CAAO,GAAA,EAAK,OAAA,IAAW,KAAA;AAAA,WAClC;AAAA,UACA,QAAA,EAAU,GAAA,GAAM,EAAE,GAAA,EAAI,GAAI,KAAA;AAAA,SAC3B,CAAA;AACD,QAAA,OAAO,MAAA,CAAO,QAAA;AAAA,MAChB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,uBAAA,CAAwB,UAAU,MAAM,CAAA;AAAA,MACjD;AAAA,IACF;AAAA,GACF;AACF;ACrCA,SAAS,cAAA,CACP,IAAA,EACA,OAAA,EACA,GAAA,EACA,SACA,UAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AACrC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAC1B,IAAA;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,SAAS,QAAA,EAAU,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AACxF,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,CAAA,CAAA,EAAI,MAAA,CAAO,WAAW,GAAG,CAAA,CAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,GAAA;AAAA,EAClB;AACF;AAEA,SAAS,mBAAA,CACP,IAAA,EACA,OAAA,EACA,GAAA,EACA,UAAA,EACS;AACT,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AACrC,EAAA,IAAI,CAAC,MAAA,EAAQ;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC7B,EAAA,MAAM,QAAQ,GAAA,KAAQ,aAAA,GAAgB,MAAM,GAAA,CAAI,KAAA,CAAM,aAAa,MAAM,CAAA;AACzE,EAAA,IAAA,CAAK,OAAO,CAAA,GAAI,CAAA,EAAG,KAAK,GAAG,MAAM,CAAA,CAAA;AACjC,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CACP,IAAA,EACA,OAAA,EACA,UAAA,EACA,cAAA,EACS;AACT,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,KAAA,MAAW,OAAA,IAAW,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AACvC,IAAA,MAAM,GAAA,GAAM,KAAK,OAAO,CAAA;AACxB,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAAE,MAAA;AAAA,IAAU;AACzC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,MAAA,cAAA,CAAe,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,UAAU,CAAA;AACtD,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,YAAY,CAAA,IAAK,cAAA,KAAmB,MAAA,IAAU,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,UAAU,CAAA,EAAG;AAC3H,MAAA,QAAA,GAAW,IAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,oBAAA,CACd,GAAA,EACA,UAAA,EACA,cAAA,EACY;AACZ,EAAA,MAAM,UAAU,GAAA,CAAI,IAAA;AACpB,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,EAAS,cAAc,CAAA;AAChD,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,WAAA,EAAa,OAAO,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACnC,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,GAAA,CAAI,OAAA,EAAS;AACnC,IAAA,OAAA,CAAQ,UAAU,GAAA,CAAI,OAAA;AACtB,IAAA,QAAA,GAAW,IAAA;AAAA,EACb;AAYA,EAAA,KAAA,MAAW,WAAW,CAAC,cAAA,EAAgB,sBAAA,EAAwB,kBAAA,EAAoB,iBAAiB,CAAA,EAAY;AAC9G,IAAA,MAAM,IAAA,GAAO,QAAQ,OAAO,CAAA;AAC5B,IAAA,IAAI,CAAC,IAAA,EAAM;AAAE,MAAA;AAAA,IAAU;AACvB,IAAA,IAAI,kBAAA,CAAmB,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,cAAc,CAAA,EAAG;AAAE,MAAA,QAAA,GAAW,IAAA;AAAA,IAAM;AAAA,EACxF;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,aAAA,CAAc,aAAa,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,MAAM,aAAA,CAAc,WAAA,EAAa,QAAQ,CAAA;AAClD;AAoBA,SAAS,cAAA,CAAe,UAAyB,OAAA,EAAgD;AAC/F,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAyB;AAC1C,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,IAAI,IAAA,EAAM,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AAIhF,MAAA,KAAA,MAAW,OAAA,IAAW,CAAC,cAAA,EAAgB,kBAAkB,CAAA,EAAY;AACnE,QAAA,KAAA,MAAW,OAAA,IAAW,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,IAAK,EAAE,CAAA,EAAG;AACzD,UAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AAAE,YAAA,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,UAAG;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,UAAyB,IAAA,EAA0D;AAC7G,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAyB;AAChD,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,KAAA,MAAW,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,CAAA,IAAK,EAAC,EAAG;AAC1C,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,EAAG;AAAE,QAAA,UAAA,CAAW,GAAA,CAAI,GAAA,kBAAK,IAAI,GAAA,EAAK,CAAA;AAAA,MAAG;AAC5D,MAAA,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,CAAG,GAAA,CAAI,IAAI,IAAI,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,YAAA,CACP,QAAA,EACA,IAAA,EACA,UAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AACrD,EAAA,MAAM,YAAY,IAAI,GAAA;AAAA,IACpB,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,EAAE,IAAA,EAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,oBAAK,IAAI,GAAA,EAAI,EAAG,IAAI,CAAC;AAAA,GAClE;AACA,EAAA,MAAM,QAAyB,EAAC;AAEhC,EAAA,OAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,SAAA,CAAU,OAAA,EAAS,CAAA,CACjC,MAAA,CAAO,CAAC,GAAG,KAAK,MAAM,KAAA,KAAU,CAAC,CAAA,CACjC,GAAA,CAAI,CAAC,CAAC,IAAI,CAAA,KAAM,MAAA,CAAO,GAAA,CAAI,IAAI,CAAE,CAAA;AAEpC,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,GAAG,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAE,CAAC,CAAA;AACzD,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,SAAA,CAAU,MAAA,CAAO,IAAI,IAAI,CAAA;AACzB,MAAA,KAAA,MAAW,aAAa,UAAA,CAAW,GAAA,CAAI,IAAI,IAAI,CAAA,IAAK,EAAC,EAAG;AACtD,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,EAAG;AAC5B,UAAA,SAAA,CAAU,IAAI,SAAA,EAAA,CAAY,SAAA,CAAU,IAAI,SAAS,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,CAAC,CAAA;AACvC;AAEO,SAAS,QAAA,CAAS,UAAyB,eAAA,EAA0C;AAC1F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAC,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,cAAA,CAAe,QAAA,EAAU,OAAO,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,QAAA,EAAU,IAAI,CAAA;AACpD,EAAA,OAAO,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM,UAAU,CAAA;AAChD;;;ACnIA,IAAM,WAAA,GAAc,CAAA;AAGpB,IAAM,uBAAuB,CAAC,GAAA,EAAQ,GAAA,EAAQ,GAAA,EAAQ,KAAQ,IAAO,CAAA;AAGrE,IAAM,kBAAA,GAAqB;AAAA,EACzB,MAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA;AAGA,IAAM,0BAAA,GAA6B;AAAA,EACjC,2DAAA;AAAA,EACA,sDAAA;AAAA,EACA;AAAA;AAEF,CAAA;AAEA,SAAS,YAAY,OAAA,EAA0B;AAC7C,EAAA,OAAO,mBAAmB,IAAA,CAAK,CAAA,CAAA,KAAK,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA;AACzD;AAEA,SAAS,mBAAmB,OAAA,EAA0B;AACpD,EAAA,OAAO,2BAA2B,IAAA,CAAK,CAAA,CAAA,KAAK,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA;AACjE;AASA,IAAM,eAAA,GAA0C;AAAA,EAC9C,IAAA,EAAM,qVAAA;AAAA,EACN,IAAA,EAAM,iHAAA;AAAA,EACN,IAAA,EAAM,gIAAA;AAAA,EACN,IAAA,EAAM;AACR,CAAA;AAGA,SAAS,oBAAoB,OAAA,EAAqC;AAChE,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,iCAAiC,CAAA;AAC7D,EAAA,OAAO,QAAQ,CAAC,CAAA;AAClB;AAGA,SAAS,qBAAqB,OAAA,EAAmD;AAC/E,EAAA,MAAM,IAAA,GAAO,oBAAoB,OAAO,CAAA;AACxC,EAAA,MAAM,IAAA,GAAO,IAAA,GAAO,eAAA,CAAgB,IAAI,CAAA,GAAI,MAAA;AAC5C,EAAA,OAAO,EAAE,MAAM,IAAA,EAAK;AACtB;AAGA,SAAS,WAAW,OAAA,EAAyB;AAC3C,EAAA,MAAM,IAAA,GAAO,qBAAqB,IAAA,CAAK,GAAA,CAAI,SAAS,oBAAA,CAAqB,MAAA,GAAS,CAAC,CAAC,CAAA;AACpF,EAAA,MAAM,MAAA,GAAS,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA;AACrC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,MAAM,CAAA;AACjC;AAMA,SAAS,aAAa,KAAA,EAAoC;AACxD,EAAA,OAAO,KAAA,IAAS,MAAA,CAAO,WAAW,CAAA,IAAK,OAAO,iBAAiB,CAAA;AACjE;AAUA,SAAS,aAAa,OAAA,EAWJ;AAChB,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAa,cAAA,EAAgB,KAAA,EAAO,KAAK,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AAEhG,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,IAAA,GAAO,CAAC,SAAS,CAAA;AACvB,IAAA,IAAI,WAAA,EAAa;AAAE,MAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AAAA,IAAG;AAE3C,IAAA,IAAI,cAAA,KAAmB,MAAA,IAAU,CAAC,WAAA,EAAa;AAI7C,MAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAAA,IAC7B;AACA,IAAA,IAAI,MAAA,EAAU;AAAE,MAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AAAA,IAAG;AACxC,IAAA,IAAI,GAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA,IAAG;AAC3C,IAAA,IAAI,MAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AAAA,IAAG;AACjD,IAAA,IAAI,QAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAA;AAAA,IAAG;AACrD,IAAA,IAAI,GAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA,IAAG;AAE3C,IAAA,MAAM,GAAA,GAAyB,EAAE,GAAG,OAAA,CAAQ,GAAA,EAAI;AAChD,IAAA,IAAI,KAAA,EAAO;AAAE,MAAA,GAAA,CAAI,iBAAiB,CAAA,GAAI,KAAA;AAAA,IAAO;AAM7C,IAAA,MAAM,SAAA,GAAYA,IAAAA,CAAK,WAAA,EAAa,QAAQ,CAAA;AAC5C,IAAA,MAAM,YAAA,GAAe,WAAW,SAAS,CAAA;AACzC,IAAA,MAAM,WAAA,GAAc,YAAA,GAAeC,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA,GAAI,IAAA;AACtE,IAAA,MAAM,eAAe,QAAA,GAAW,IAAI,GAAA,CAAI,QAAQ,EAAE,IAAA,GAAO,oBAAA;AACzD,IAAA,MAAM,QAAA,GAAW,KAAK,YAAY,CAAA;AAAA,CAAA;AAElC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,QAAA,GAAW,YAAA,GAAeA,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA,GAAI,EAAA;AACnE,MAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,EAAG;AACpC,QAAAC,aAAAA,CAAc,SAAA,EAAW,QAAA,GAAW,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAEA,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,KAAA,EAAO;AAAE,QAAA;AAAA,MAAQ;AACtB,MAAA,IAAI;AACF,QAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,UAAAA,aAAAA,CAAc,WAAW,WAAW,CAAA;AAAA,QACtC,CAAA,MAAA,IAAW,UAAA,CAAW,SAAS,CAAA,EAAG;AAChC,UAAA,UAAA,CAAW,SAAS,CAAA;AAAA,QACtB;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAAoB;AAAA,IAC9B,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,cAAA,EAAgB,IAAA,EAAM;AAAA,MACxC,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA;AAAA,MAChC,KAAA,EAAO,IAAA;AAAA,MACP;AAAA,KACD,CAAA;AAED,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,CAAA,KAAc;AAAE,MAAA,MAAA,IAAU,EAAE,QAAA,EAAS;AAAA,IAAG,CAAC,CAAA;AACnE,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,CAAA,KAAc;AAAE,MAAA,MAAA,IAAU,EAAE,QAAA,EAAS;AAAA,IAAG,CAAC,CAAA;AAEnE,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAwB;AACzC,MAAA,YAAA,EAAa;AACb,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAI,MAAM,MAAA,IAAU,MAAA,IAAU,GAAG,cAAc,CAAA,0BAAA,EAA6B,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,MAC5F;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAe;AAChC,MAAA,YAAA,EAAa;AACb,MAAA,MAAA,CAAO,GAAG,CAAA;AAAA,IACZ,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAMA,eAAe,UAAA,CACb,GAAA,EACA,IAAA,EAUA,MAAA,EACwB;AAKxB,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,WAAA,IAAe,MAAM;AAAA,EAAC,KAAK,oBAAA,CAAqB,GAAA,EAAK,IAAA,CAAK,UAAA,EAAY,KAAK,cAAc,CAAA;AAE7G,EAAA,IAAI;AACF,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,WAAA,EAAa,OAAA,EAAA,EAAW;AACvD,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,CAAa;AAAA,UACjB,aAAa,GAAA,CAAI,IAAA;AAAA,UACjB,aAAa,GAAA,CAAI,WAAA;AAAA,UACjB,gBAAgB,IAAA,CAAK,cAAA;AAAA,UACrB,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,UAAU,IAAA,CAAK;AAAA,SAChB,CAAA;AAED,QAAA,MAAA,CAAO,KAAK,CAAA,UAAA,EAAa,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAClD,QAAA,OAAO,EAAE,MAAM,GAAA,CAAI,IAAA,EAAM,SAAS,GAAA,CAAI,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,MAE/D,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAG/D,QAAA,IAAI,kBAAA,CAAmB,OAAO,CAAA,EAAG;AAC/B,UAAA,MAAA,CAAO,KAAK,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,kCAAA,CAA+B,CAAA;AACrE,UAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAK;AAAA,QACvF;AAGA,QAAA,IAAI,WAAA,CAAY,OAAO,CAAA,IAAK,OAAA,GAAU,WAAA,EAAa;AACjD,UAAA,MAAM,KAAA,GAAQ,WAAW,OAAO,CAAA;AAChC,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,CAAA,oBAAA,EAAuB,IAAI,IAAI,CAAA,CAAA,EAAI,IAAI,OAAO,CAAA,UAAA,EAAa,OAAA,GAAU,CAAC,CAAA,CAAA,EAAI,WAAW,mBACrE,KAAA,GAAQ,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,QAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,WACtE;AACA,UAAA,MAAM,IAAI,QAAc,CAAA,CAAA,KAAK;AAAE,YAAA,UAAA,CAAW,GAAG,KAAK,CAAA;AAAA,UAAG,CAAC,CAAA;AACtD,UAAA;AAAA,QACF;AAGA,QAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,qBAAqB,OAAO,CAAA;AACnD,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,kBAAA,EAAqB,GAAA,CAAI,IAAI,IAAI,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI,KAAA,CAAA,EAAW,EAAE,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,MAAM,CAAA;AAC3G,QAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,SAAS,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,WAAW,IAAA,EAAK;AAAA,MAClH;AAAA,IACF;AAGA,IAAA,OAAO;AAAA,MACL,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,wBAAwB,WAAW,CAAA,2BAAA;AAAA,KAC5C;AAAA,EACF,CAAA,SAAE;AACA,IAAA,OAAA,EAAQ;AAAA,EACV;AACF;AAMA,SAAS,kBAAA,CACP,KAAA,EACA,OAAA,EACA,UAAA,EACA,QACA,UAAA,EACM;AACN,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,QAAQ,CAAC,CAAA;AAC/E,EAAA,IAAI,cAAc,CAAA,EAAG;AAAE,IAAA;AAAA,EAAQ;AAC/B,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,QAAQ,OAAA,GAAU,CAAC,QAAQ,UAAA,CAAW,MAAM,+BAChC,SAAS,CAAA,2DAAA;AAAA,GACvB;AACA,EAAA,KAAA,MAAW,SAAA,IAAa,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,EAAG;AAChD,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,iCAAA,EAAmC,CAAA;AAAA,IACpH;AAAA,EACF;AACF;AAUA,eAAsB,4BACpB,OAAA,EACoC;AACpC,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,cAAA,GAAiB,MAAA;AAAA,IACjB,MAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAExC,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAA,EAAQ;AACrB,IAAA,MAAM,KAAA,GAAQ,wEAAA;AACd,IAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAClB,IAAA,OAAO;AAAA,MACL,SAAS,EAAC;AAAA,MACV,WAAW,EAAC;AAAA,MACZ,kBAAkB,EAAC;AAAA,MACnB,MAAA,EAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,EAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,MAClD,SAAS,EAAC;AAAA,MACV,MAAA,EAAQ,CAAC,KAAK;AAAA,KAChB;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,CAAC,CAAC,CAAA;AAGjE,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,wBAAwB,KAAK,CAAC,CAAA;AAGhE,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAwB,CAAA;AAE/C,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,CAAA,WAAA,EAAc,QAAA,CAAS,MAAM,CAAA,eAAA,EAAkB,KAAA,CAAM,MAAM,CAAA,kCAAA,EAC3C,WAAW,CAAA,SAAA,EAAY,MAAA,IAAU,KAAK,CAAA,CAAA;AAAA,GACxD;AAEA,EAAA,MAAM,aAA8B,EAAC;AAErC,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,KAAA,CAAM,QAAQ,OAAA,EAAA,EAAW;AACvD,IAAA,MAAM,IAAA,GAAO,MAAM,OAAO,CAAA;AAC1B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,OAAA,GAAU,CAAC,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA,aAAA,EAAgB,IAAA,CAAK,MAAM,CAAA,WAAA,CAAa,CAAA;AAGvF,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,WAAA,EAAa;AACjD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAI,WAAW,CAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,GAAA;AAAA,QACjC,KAAA,CAAM,GAAA;AAAA,UAAI,CAAA,GAAA,KACR,UAAA,CAAW,GAAA,EAAK,EAAE,cAAA,EAAgB,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,QAAA,IAAY,MAAM;AAAA;AACnG,OACF;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,GAAG,YAAY,CAAA;AAAA,IACjC;AAIA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,CAAC,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,OAAO,CAAA;AACxE,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,kBAAA,CAAmB,KAAA,EAAO,OAAA,EAAS,UAAA,EAAY,MAAA,EAAQ,UAAU,CAAA;AACjE,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAoB,UAAA,CAAW,MAAA,CAAO,OAAK,CAAA,CAAE,OAAA,IAAW,CAAC,CAAA,CAAE,gBAAgB,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACpH,EAAA,MAAM,gBAAA,GAAoB,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACtG,EAAA,MAAM,SAAoB,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,EAAE,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAC9F,EAAA,MAAM,SAAoB,UAAA,CAAW,MAAA,CAAO,OAAK,CAAC,CAAA,CAAE,WAAW,CAAA,CAAE,KAAK,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAExG,EAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,gBAAA,CAAiB,MAAM,CAAA,uDAAA,CAAoD,CAAA;AAAA,EAC5F;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,UAAA,CAAY,IAAI,EAAC;AAAA,IAC3E;AAAA,GACF;AACF;ACnYA,IAAMC,YAAAA,GAAc,CAAA;AACpB,IAAMC,wBAAuB,CAAC,GAAA,EAAQ,GAAA,EAAQ,GAAA,EAAQ,KAAQ,IAAO,CAAA;AAErE,IAAMC,mBAAAA,GAAqB;AAAA,EACzB,MAAA;AAAA,EAAQ,uBAAA;AAAA,EACR,YAAA;AAAA,EAAc,WAAA;AAAA,EAAa,cAAA;AAAA,EAAgB,WAAA;AAAA,EAAa,WAAA;AAAA,EACxD,gBAAA;AAAA,EAAkB,iBAAA;AAAA,EAAmB;AACvC,CAAA;AAEA,IAAMC,2BAAAA,GAA6B;AAAA,EACjC,2DAAA;AAAA,EACA,sDAAA;AAAA,EACA;AACF,CAAA;AAEA,SAASC,aAAY,GAAA,EAAsB;AACzC,EAAA,OAAOF,oBAAmB,IAAA,CAAK,CAAA,CAAA,KAAK,GAAA,CAAI,QAAA,CAAS,CAAC,CAAC,CAAA;AACrD;AAEA,SAASG,oBAAmB,GAAA,EAAsB;AAChD,EAAA,OAAOF,4BAA2B,IAAA,CAAK,CAAA,CAAA,KAAK,GAAA,CAAI,QAAA,CAAS,CAAC,CAAC,CAAA;AAC7D;AAEA,SAASG,YAAW,OAAA,EAAyB;AAC3C,EAAA,MAAM,IAAA,GAAOL,sBAAqB,IAAA,CAAK,GAAA,CAAI,SAASA,qBAAAA,CAAqB,MAAA,GAAS,CAAC,CAAC,CAAA;AACpF,EAAA,MAAM,MAAA,GAAS,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA;AACrC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,MAAM,CAAA;AACjC;AAgBA,SAAS,qBAAqB,OAAA,EAA8C;AAC1E,EAAA,MAAM,EAAE,aAAa,cAAA,GAAiB,MAAA,EAAQ,KAAK,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AAErF,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,IAAA,GAAO,CAAC,SAAS,CAAA;AAEvB,IAAA,IAAI,mBAAmB,MAAA,EAAQ;AAAE,MAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAAA,IAAG;AAC/D,IAAA,IAAI,MAAA,EAAU;AAAE,MAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AAAA,IAAG;AACxC,IAAA,IAAI,GAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA,IAAG;AAC3C,IAAA,IAAI,GAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA,IAAG;AAC3C,IAAA,IAAI,MAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AAAA,IAAG;AACjD,IAAA,IAAI,QAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAA;AAAA,IAAG;AAErD,IAAA,MAAM,KAAA,GAAQM,KAAAA,CAAM,cAAA,EAAgB,IAAA,EAAM;AAAA,MACxC,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,CAAC,SAAA,EAAW,MAAA,EAAQ,MAAM,CAAA;AAAA,MACjC,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,CAAA,KAAc;AAAE,MAAA,MAAA,IAAU,EAAE,QAAA,EAAS;AAAA,IAAG,CAAC,CAAA;AACnE,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,CAAA,KAAc;AAAE,MAAA,MAAA,IAAU,EAAE,QAAA,EAAS;AAAA,IAAG,CAAC,CAAA;AAEnE,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAwB;AACzC,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAI,MAAM,MAAA,IAAU,MAAA,IAAU,GAAG,cAAc,CAAA,0BAAA,EAA6B,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,MAC5F;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,GAAG,OAAA,EAAS,CAAC,GAAA,KAAe,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,EAC/C,CAAC,CAAA;AACH;AAqBA,eAAe,cAAA,CACb,GAAA,EACA,GAAA,EACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,UAAU,oBAAA,CAAqB,GAAA,EAAK,GAAA,CAAI,UAAA,EAAY,IAAI,cAAc,CAAA;AAC5E,EAAA,IAAI;AACF,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAWP,YAAAA,EAAa,OAAA,EAAA,EAAW;AACvD,MAAA,IAAI;AACF,QAAA,MAAM,oBAAA,CAAqB,EAAE,WAAA,EAAa,GAAA,CAAI,MAAM,cAAA,EAAgB,GAAA,CAAI,cAAA,EAAgB,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,QAAQ,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,MAAA,EAAQ,IAAI,MAAA,EAAQ,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,CAAA;AACpL,QAAA,MAAA,EAAQ,IAAA,CAAK,yBAAyB,EAAE,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,CAAA;AAC9E,QAAA,OAAO,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,IAAA,EAAK,EAAG,WAAW,KAAA,EAAM;AAAA,MAC7F,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,QAAA,IAAIK,mBAAAA,CAAmB,GAAG,CAAA,EAAG;AAC3B,UAAA,MAAA,EAAQ,KAAK,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,kCAAA,CAA+B,CAAA;AACtE,UAAA,OAAO,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,SAAS,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAK,EAAG,WAAW,KAAA,EAAM;AAAA,QACrH;AACA,QAAA,IAAI,IAAI,QAAA,CAAS,MAAM,KAAK,GAAA,CAAI,QAAA,CAAS,mBAAmB,CAAA,EAAG;AAC7D,UAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW,IAAA,EAAK;AAAA,QACzC;AACA,QAAA,IAAID,YAAAA,CAAY,GAAG,CAAA,IAAK,OAAA,GAAUJ,YAAAA,EAAa;AAC7C,UAAA,MAAM,KAAA,GAAQM,YAAW,OAAO,CAAA;AAChC,UAAA,MAAA,EAAQ,IAAA,CAAK,CAAA,oBAAA,EAAuB,GAAA,CAAI,IAAI,aAAa,OAAA,GAAU,CAAC,CAAA,CAAA,EAAIN,YAAW,mBAAmB,KAAA,GAAQ,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACjI,UAAA,MAAM,IAAI,QAAc,CAAA,CAAA,KAAK;AAAE,YAAA,UAAA,CAAW,GAAG,KAAK,CAAA;AAAA,UAAG,CAAC,CAAA;AACtD,UAAA;AAAA,QACF;AACA,QAAA,MAAA,EAAQ,KAAA,CAAM,8BAA8B,KAAA,CAAA,EAAW,EAAE,MAAM,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,CAAA;AACrF,QAAA,OAAO,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,SAAS,KAAA,EAAO,KAAA,EAAO,GAAA,EAAI,EAAG,WAAW,KAAA,EAAM;AAAA,MAC1G;AAAA,IACF;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,GAAA,CAAI,MAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,OAAO,KAAA,EAAO,CAAA,qBAAA,EAAwBA,YAAW,CAAA,2BAAA,CAAA,EAA8B,EAAG,WAAW,KAAA,EAAM;AAAA,EACvK,CAAA,SAAE;AACA,IAAA,OAAA,EAAQ;AAAA,EACV;AACF;AAQA,eAAe,YAAA,CACb,EAAA,EACA,MAAA,EACA,OAAA,EAC6B;AAC7B,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,2BAAA,EAAuB,OAAO,CAAA,CAAE,CAAA;AAC/C,EAAA,MAAM,EAAA,GAAc,yBAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACpF,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAM,EAAA,CAAG,QAAA,CAAS,qBAAqB,CAAA;AACvD,IAAA,EAAA,CAAG,KAAA,EAAM;AACT,IAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AAC3C,MAAA,EAAA,CAAG,QAAQ,mDAAyC,CAAA;AACpD,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AACA,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB,SAAS,CAAA,EAAG;AACV,IAAA,EAAA,CAAG,KAAA,EAAM;AACT,IAAA,MAAM,CAAA;AAAA,EACR;AACF;AAWA,eAAe,oBAAA,CACb,GAAA,EACA,GAAA,EACA,QAAA,EACA,IACA,MAAA,EACwB;AACxB,EAAA,MAAM,MAAA,GAAS,UAAU,CAAA,WAAA,EAAc,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,GAAA,CAAK,CAAA;AACnE,EAAA,MAAA,CAAO,KAAA,EAAM;AACb,EAAA,MAAM,UAAU,oBAAA,CAAqB,GAAA,EAAK,GAAA,CAAI,UAAA,EAAY,IAAI,cAAc,CAAA;AAC5E,EAAA,IAAI;AACF,IAAA,MAAM,gBAAA,GAAmB,CAAA;AACzB,IAAA,KAAA,IAAS,WAAA,GAAc,CAAA,EAAG,WAAA,GAAc,gBAAA,EAAkB,WAAA,EAAA,EAAe;AACvE,MAAA,IAAI;AACF,QAAA,MAAM,oBAAA,CAAqB,EAAE,WAAA,EAAa,GAAA,CAAI,MAAM,cAAA,EAAgB,GAAA,CAAI,cAAA,EAAgB,GAAA,EAAK,QAAA,CAAS,GAAA,EAAK,QAAQ,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAK,GAAA,CAAI,GAAA,EAAK,MAAA,EAAQ,IAAI,MAAA,EAAQ,QAAA,EAAU,GAAA,CAAI,QAAA,EAAU,CAAA;AACzL,QAAA,MAAA,CAAO,QAAQ,GAAA,CAAI,MAAA,GAAS,CAAA,SAAA,EAAY,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,CAAA,GAAK,aAAa,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAC1G,QAAA,OAAO,EAAE,MAAM,GAAA,CAAI,IAAA,EAAM,SAAS,GAAA,CAAI,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,MAC/D,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,QAAA,IAAIK,mBAAAA,CAAmB,GAAG,CAAA,EAAG;AAC3B,UAAA,MAAA,CAAO,QAAQ,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,kBAAA,CAAoB,CAAA;AAC7D,UAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAK;AAAA,QACvF;AACA,QAAA,IAAI,IAAI,QAAA,CAAS,MAAM,KAAK,GAAA,CAAI,QAAA,CAAS,mBAAmB,CAAA,EAAG;AAC7D,UAAA,IAAI,WAAA,GAAc,IAAI,gBAAA,EAAkB;AACtC,YAAA,QAAA,CAAS,MAAM,MAAM,YAAA,CAAa,EAAA,EAAI,MAAA,EAAQ,IAAI,IAAI,CAAA;AACtD,YAAA,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,CAAA,WAAA,EAAc,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,YAAA,CAAA,EAAgB,CAAA;AAC3E,YAAA,MAAA,CAAO,KAAA,EAAM;AAAA,UACf,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,KAAK,0BAA0B,CAAA;AACtC,YAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,0BAAA,EAA2B;AAAA,UACnG;AAAA,QACF,CAAA,MAAA,IAAWD,YAAAA,CAAY,GAAG,CAAA,EAAG;AAC3B,UAAA,MAAM,KAAA,GAAQE,WAAAA,CAAWN,YAAAA,GAAc,CAAC,CAAA;AACxC,UAAA,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,CAAA,4BAAA,EAAA,CAA2B,KAAA,GAAQ,KAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,OAAA,CAAA,EAAM,CAAA;AAC/E,UAAA,MAAA,CAAO,KAAA,EAAM;AACb,UAAA,MAAM,IAAI,QAAc,CAAA,CAAA,KAAK;AAAE,YAAA,UAAA,CAAW,GAAG,KAAK,CAAA;AAAA,UAAG,CAAC,CAAA;AACtD,UAAA,WAAA,EAAA;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,IAAA,CAAK,WAAW,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAAE,CAAA;AAC3C,UAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,GAAA,EAAI;AAAA,QAC5E;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,uCAAA,EAAwC;AAAA,EAChH,CAAA,SAAE;AACA,IAAA,OAAA,EAAQ;AAAA,EACV;AACF;AAYA,eAAsB,uBACpB,OAAA,EAC+B;AAC/B,EAAA,MAAM,EAAE,QAAA,EAAU,cAAA,GAAiB,MAAA,EAAQ,MAAA,EAAQ,KAAK,MAAA,EAAQ,QAAA,EAAU,EAAA,EAAI,MAAA,EAAO,GAAI,OAAA;AACzF,EAAA,MAAM,QAAA,GAAqB,EAAE,GAAA,EAAK,OAAA,CAAQ,GAAA,EAAI;AAC9C,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,CAAC,CAAC,CAAA;AACjE,EAAA,MAAM,OAAA,GAA8B,EAAE,cAAA,EAAgB,UAAA,EAAY,GAAA,EAAK,SAAS,GAAA,EAAK,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAS;AACnH,EAAA,MAAM,SAA4B,EAAE,cAAA,EAAgB,YAAY,MAAA,EAAQ,GAAA,EAAK,QAAQ,QAAA,EAAS;AAE9F,EAAA,MAAM,UAA2B,EAAC;AAClC,EAAA,MAAM,YAAgC,EAAC;AACvC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAOQ,MAAAA,CAAO,wBAAwB,KAAK,CAAC,CAAA;AAChE,EAAA,IAAI,kBAAA,GAAqB,KAAA;AAEzB,EAAA,EAAA,CAAG,KAAA,GAAQ,CAAA,aAAA,EAAgB,QAAA,CAAS,MAAM,wCAAwC,WAAW,CAAA;AAAA,CAAQ,CAAA;AACrG,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,MAAA,EAAQ,KAAK,WAAA,EAAa;AACrD,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,IAAI,WAAW,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,CAAA,GAAA,KAAO,cAAA,CAAe,GAAA,EAAK,OAAA,EAAS,MAAM,CAAC,CAAC,CAAA;AACzF,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,MAAA,IAAI,OAAA,CAAQ,WAAW,IAAA,EAAM;AAAE,QAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAE,CAAA;AAAA,MAAG,CAAA,MAAO;AAAE,QAAA,OAAA,CAAQ,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,MAAG;AACjG,MAAA,IAAI,QAAQ,SAAA,EAAW;AAAE,QAAA,kBAAA,GAAqB,IAAA;AAAA,MAAM;AAAA,IACtD;AACA,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,SAAA,CAAU,KAAK,GAAG,QAAA,CAAS,KAAA,CAAM,CAAA,GAAI,WAAW,CAAC,CAAA;AACjD,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAAE,IAAA,OAAO,WAAA,CAAY,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA;AAAA,EAAG;AAE7E,EAAA,EAAA,CAAG,KAAA,GAAQ,CAAA,6DAAA,EAA2D,SAAA,CAAU,MAAM,CAAA;AAAA,CAAe,CAAA;AACrG,EAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,IAAA,MAAA,EAAQ,IAAA,CAAK,mCAAmC,EAAE,IAAA,EAAM,IAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,CAAA;AACxF,IAAA,OAAA,CAAQ,IAAA,CAAK,MAAM,oBAAA,CAAqB,GAAA,EAAK,QAAQ,QAAA,EAAU,EAAU,CAAC,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAO,WAAA,CAAY,OAAA,EAAS,QAAA,EAAU,MAAM,CAAA;AAC9C;AAEA,SAAS,WAAA,CACP,OAAA,EACA,QAAA,EACA,MAAA,EACsB;AACtB,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,WAAkB,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAA,CAAE,OAAA,IAAW,CAAC,CAAA,CAAE,gBAAgB,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,IACzG,gBAAA,EAAkB,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,IAC3F,QAAkB,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,EAAE,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,IACnF,OAAA,EAAkB,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,UAAA,CAAY,IAAI,EAAC;AAAA,IACpF,QAAkB,OAAA,CAAQ,MAAA,CAAO,OAAK,CAAC,CAAA,CAAE,WAAW,CAAA,CAAE,KAAK,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAE;AAAA,GAC/F;AACF;;;ACpSA,IAAM,WAAA,GAAsC;AAAA,EAC1C,KAAA,EAAO,IAAA;AAAA,EACP,KAAA,EAAO,GAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,IAAA,EAAM;AACR,CAAA;AAIA,SAAS,cAAc,QAAA,EAAyG;AAC9H,EAAA,OAAO,QAAA,CAAS,IAAI,CAAA,GAAA,KAAO;AACzB,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,IAAQ,MAAA;AACzB,IAAA,MAAM,GAAA,GAAM,WAAA,CAAY,IAAI,CAAA,IAAK,GAAA;AACjC,IAAA,OAAO,KAAK,GAAG,CAAA,EAAA,EAAK,GAAA,CAAI,IAAA,CAAK,OAAO,EAAE,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,eAAe,QAAA,CAAS,CAAC,CAAC,CAAA,UAAA,EAAQ,IAAI,WAAW,CAAA,CAAA;AAAA,EAClG,CAAC,CAAA;AACH;AAEA,SAAS,eAAA,CACP,MAAA,EACA,KAAA,EACA,GAAA,EACmJ;AACnJ,EAAA,MAAM,iBAAiB,MAAA,CAAO,SAAA,EAAW,IAAA,IAAQ,MAAA,CAAO,SAAS,cAAA,IAAkB,MAAA;AACnF,EAAA,OAAO;AAAA,IACL,MAAM,OAAA,CAAQ,QAAA,EAAgC,IAAA,EAAsG;AAGlJ,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,IAAY,MAAA,CAAO,QAAA;AACzC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAM,CAAA,GAAI,MAAM,2BAAA,CAA4B;AAAA,UAC1C,QAAA;AAAA,UACA,cAAA;AAAA,UACA,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,MAAA,EAAS,KAAK,MAAA,IAAsC,QAAA;AAAA,UACpD,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,QAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,OAAO,EAAE,SAAA,EAAW,CAAA,CAAE,SAAA,EAAW,kBAAkB,CAAA,CAAE,gBAAA,EAAkB,MAAA,EAAQ,CAAA,CAAE,QAAQ,OAAA,EAAS,CAAA,CAAE,OAAA,EAAS,MAAA,EAAQ,EAAE,MAAA,EAAO;AAAA,MAChI;AAIA,MAAA,OAAO,sBAAA,CAAuB;AAAA,QAC5B,QAAA;AAAA,QACA,cAAA;AAAA,QACA,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,MAAA,EAAQ,KAAK,MAAA,IAAU,QAAA;AAAA,QACvB,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,QAAA;AAAA,QACA,IAAI,GAAA,CAAI,EAAA;AAAA,QACR,MAAA,EAAQ,IAAI,QAAA,EAAU;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,GACF;AACF;AAEA,SAAS,kBAAA,CAAmB,GAAgB,UAAA,EAA4B;AACtE,EAAA,IAAI,CAAA,CAAE,SAAS,WAAA,EAAa;AAAE,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,cAAA,EAAiB,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AAAA,EAAG;AACzF,EAAA,IAAI,CAAA,CAAE,SAAS,KAAA,EAAO;AAAE,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,cAAA,EAAiB,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAAA,EAAG;AAC7E,EAAA,MAAM,MAAA,GAAA,CAAU,EAAE,OAAA,EAAS,MAAA,IAAU,EAAE,OAAA,EAAS,MAAA,IAAU,IAAI,IAAA,EAAK;AACnE,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,UAAA,CAAW,KAAK,CAAA,YAAA,CAAc,CAAA;AAC9B,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,CAAM,IAAI,EAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAAE,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AAAA,IAAG;AAAA,EAC1F;AACA,EAAA,MAAM,UAAA,GAAA,CAAc,EAAE,QAAA,IAAY,IAAI,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,EAAE,CAAA;AACvD,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,UAAA,CAAW,IAAA,CAAK,kBAAkB,UAAA,CAAW,MAAM,IAAI,CAAA,CAAE,QAAA,CAAU,MAAM,CAAA,YAAA,CAAc,CAAA;AACvF,IAAA,KAAA,MAAW,GAAA,IAAO,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG;AACzC,MAAA,UAAA,CAAW,IAAA,CAAK,CAAA,SAAA,EAAY,GAAA,CAAI,IAAI,GAAG,GAAA,CAAI,OAAA,EAAS,KAAA,GAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IAC7F;AAAA,EACF;AACF;AAEA,SAAS,eAAA,CAAgB,cAA6B,OAAA,EAAwE;AAC5H,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,EAAA,GAAK,OAAA,CAAQ,OAAA,GAAW,EAAE,IAAA,KAAS,UAAA,GAAa,OAAA,CAAQ,OAAA,GAAU,OAAA,CAAQ,KAAA;AACxF,IAAA,MAAM,MAAA,GAAS,CAAA,CAAE,QAAA,GAAW,CAAA,EAAA,EAAA,CAAM,CAAA,CAAE,WAAW,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAA,GAAO,EAAA;AACtE,IAAA,UAAA,CAAW,IAAA,CAAK,GAAG,GAAG,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AACzC,IAAA,IAAI,CAAC,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,SAAS,UAAA,EAAY;AAAE,MAAA,kBAAA,CAAmB,GAAG,UAAU,CAAA;AAAA,IAAG;AAAA,EAC3E;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,oBAAA,CACP,MAAA,EACA,MAAA,EACA,WAAA,EACA,GAAA,EAC6C;AAC7C,EAAA,MAAM,WAAwD,EAAC;AAE/D,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,WAAW,MAAA,EAAQ;AAC9C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,WAAA;AAAA,MACR,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;AAAA,KACzE,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,kBAAkB,MAAA,EAAQ;AACrD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,6BAAA;AAAA,MACR,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;AAAA,KAC7E,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,MAAA,EAAQ;AAC3C,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,yBAAA;AAAA,MACR,OAAO,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,OAAK,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,QAAQ,YAAA,EAAc,EAAE,CAAC,CAAA,CAAE;AAAA,KAC9F,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,CAAC,MAAA,IAAU,WAAA,IAAe,MAAA,CAAO,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC3D,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,qEAAA;AAAA,MACR,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;AAAA,KACpE,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,OAAO,MAAA,EAAQ;AACxB,IAAA,MAAM,YAAA,GAAgB,OAAO,MAAA,CAAO,MAAA,CAAO,OAAO,MAAM,CAAA,CAAoB,OAAO,OAAO,CAAA;AAC1F,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,EAAE,CAAA;AAC5C,IAAA,MAAM,MAAA,GAAS,aAAa,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA;AACtE,IAAA,MAAM,OAAA,GAAU,aAAa,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA;AAEvE,IAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,MAAA,EAAQ,CAAA,cAAA,EAAY,MAAA,CAAO,MAAM,YAAY,MAAA,CAAO,MAAM,CAAA,OAAA,EAAU,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAA,EAAK,OAAA,CAAQ,MAAM,aAAa,EAAE,CAAA,CAAA;AAAA,QACvH,KAAA,EAAO,eAAA,CAAgB,YAAA,EAAc,GAAA,CAAI,GAAG,OAAO;AAAA,OACpD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAI,OAAO,MAAA,CAAO,MAAA,EAAQ,UAAU,CAAC,MAAA,CAAO,OAAO,MAAA,EAAQ;AACzD,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;AAAA,KACpE,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,OAAO,GAAA,EAAK;AACrB,IAAA,MAAM,CAAA,GAAI,OAAO,MAAA,CAAO,GAAA;AACxB,IAAA,QAAA,CAAS,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,KAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,CAAA,WAAA,EAAc,EAAE,SAAS,CAAA,CAAA;AAAA,QACzB,SAAS,CAAA,CAAE,MAAA,EAAQ,IAAA,CAAK,IAAI,KAAK,MAAM,CAAA,CAAA;AAAA,QACvC,CAAA,QAAA,EAAW,EAAE,MAAM,CAAA;AAAA;AACrB,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,aAAA,CAAc,OAAiB,MAAA,EAA6D;AACnG,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,GAAO,MAAA,CAAO,QAAQ,KAAA,CAAM,IAAI,GAAG,MAAA,GAAS,MAAA;AACrE,EAAA,MAAM,WAAA,GAAc,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAS,KAAA,CAAM,KAAK,GAAG,MAAA,GAAS,MAAA;AACzE,EAAA,MAAM,cAAA,GAAiB,UAAA,IAAc,WAAA,IAAe,EAAC;AACrD,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAA0D;AAMjF,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,IAAU,EAAC,EAAG;AAAE,IAAA,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,KAAK,CAAA;AAAA,EAAG;AAC5E,EAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AAAE,IAAA,UAAA,CAAW,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,KAAK,CAAA;AAAA,EAAG;AAEvE,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,MAAA,CAAO,OAAA,IAAW,QAAA;AACnD,EAAA,OAAO,CAAC,GAAG,UAAA,CAAW,MAAA,EAAQ,CAAA,CAAE,GAAA;AAAA,IAAI,CAAA,KAAA,KAClC,OAAA,KAAY,QAAA,IAAY,KAAA,CAAM,QAAA,GAAW,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,KAAA,EAAM,GAAI;AAAA,GAC3E;AACF;AAEA,eAAe,cAAA,GAAmC;AAChD,EAAA,MAAM,EAAA,GAAcC,yBAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACpF,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,MAAM,EAAA,CAAG,QAAA,CAAS,gCAAgC,CAAA;AAAA,EAC7D,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACA,EAAA,OAAO,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY,KAAM,GAAA;AACzC;AAEA,SAAS,WAAA,CACP,GAAA,EACA,KAAA,EACA,IAAA,EACA,QACA,MAAA,EACM;AACN,EAAA,IAAI,MAAM,IAAA,EAAM;AAAE,IAAA;AAAA,EAAQ;AAC1B,EAAA,GAAA,CAAI,IAAI,OAAA,GAAU;AAAA,IAChB,KAAA,EAAO,SAAS,wBAAA,GAA2B,cAAA;AAAA,IAC3C,QAAA,EAAU;AAAA,MACR;AAAA,QACE,QAAQ,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,MAAM,8BAA2B,MAAA,CAAO,kBAAA,IAAsB,aAAa,CAAA,EAAG,MAAM,IAAA,GAAO,CAAA,YAAA,EAAY,KAAA,CAAM,IAAI,KAAK,EAAE,CAAA,CAAA;AAAA,QACjJ,KAAA,EAAO,aAAA,CAAc,IAAA,CAAK,QAAQ;AAAA;AACpC,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,GACT,CAAA;AACD,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,GAAA,CAAI,GAAG,KAAA,GAAQ,CAAA;AAAA,CAAyD,CAAA;AAAA,EAC1E;AACF;AAEA,SAAS,oBAAA,CACP,GAAA,EACA,KAAA,EACA,MAAA,EACA,QACA,WAAA,EACM;AACN,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,MAAA,CAAO,MAAM,CAAA;AAC5B,IAAA;AAAA,EACF;AACA,EAAA,GAAA,CAAI,IAAI,OAAA,GAAU;AAAA,IAChB,KAAA,EAAO,SAAA;AAAA,IACP,UAAU,oBAAA,CAAqB,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,aAAa,GAAG,CAAA;AAAA,IACtE,MAAA,EAAQ,MAAA,CAAO,OAAA,GAAU,SAAA,GAAY,OAAA;AAAA,IACrC,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO;AAAA,GAC9B,CAAA;AACH;AAEA,IAAO,cAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,aAAA;AAAA,EACJ,WAAA,EAAa,gDAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAsD;AACxF,MAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAClB,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,MAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AACvC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAS,CAAA,KAAM,IAAA;AACpC,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,GAAA,KAAQ,IAAA,IAAQ,MAAA;AAGtC,MAAA,MAAM,YAAA,GAAeC,UAAU,0BAA0B,CAAA;AACzD,MAAA,YAAA,CAAa,KAAA,EAAM;AACnB,MAAA,MAAM,UAAA,GAAa,MAAM,SAAA,EAAyB;AAClD,MAAA,MAAM,MAAA,GAAwB;AAAA,QAC5B,GAAG,UAAA;AAAA,QACH,GAAI,KAAA,CAAM,IAAA,IAAQ,EAAE,IAAA,EAAM,MAAM,IAAA,EAAK;AAAA,QACrC,GAAI,KAAA,CAAM,MAAA,KAAW,UAAa,EAAE,MAAA,EAAQ,MAAM,MAAA,EAAO;AAAA,QACzD,GAAI,KAAA,CAAM,OAAA,IAAW,EAAE,OAAA,EAAS,MAAM,OAAA;AAAQ,OAChD;AACA,MAAA,YAAA,CAAa,QAAQ,sBAAsB,CAAA;AAE3C,MAAA,MAAM,OAAA,GAA0B,OAAO,OAAA,IAAW,QAAA;AAClD,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,cAAc,CAAA,KAAM,IAAA;AAC9C,MAAA,MAAM,KAAA,GAAQF,MAAAA,CAAO,WAAW,CAAA,IAAKA,OAAO,iBAAiB,CAAA;AAQ7D,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAM,YAAsB,EAAC;AAE7B,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,MAAA,EAAQ,OAAO,CAAA;AACvD,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,SAAA,CAAU,KAAK,yCAAyC,CAAA;AAAA,UAC1D,CAAA,MAAO;AACL,YAAA,IAAI;AACF,cAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,SAAA,CAAA,EAAa;AAAA,gBAC9C,OAAA,EAAS,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,KAAK,CAAA,CAAA,EAAG;AAAA,gBAC5C,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,GAAI;AAAA,eACjC,CAAA;AACD,cAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,gBAAA,SAAA,CAAU,KAAK,CAAA,mCAAA,EAAsC,GAAA,CAAI,MAAM,CAAA,MAAA,EAAS,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,cACrF;AAAA,YACF,SAAS,CAAA,EAAG;AACV,cAAA,SAAA,CAAU,IAAA,CAAK,6BAA6B,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,YAC1F;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,CAAM,QAAQ,MAAA,CAAO,KAAA,IAAS,EAAE,KAAA,CAAM,IAAA,IAAQ,OAAO,KAAA,CAAA,EAAQ;AAC/D,UAAA,SAAA,CAAU,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,IAAI,CAAA,wCAAA,CAA0C,CAAA;AAAA,QAC9E;AAEA,QAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,UAAA,GAAA,CAAI,IAAI,OAAA,GAAU;AAAA,YAChB,KAAA,EAAO,kCAAA;AAAA,YACP,UAAU,CAAC,EAAE,KAAA,EAAO,SAAA,CAAU,IAAI,CAAA,CAAA,KAAK,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,QAAQ,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,GAAG,CAAA;AAAA,YACxE,MAAA,EAAQ;AAAA,WACT,CAAA;AACD,UAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gBAAA,EAAiB;AAAA,QAC9C;AAAA,MACF;AAEA,MAAA,MAAM,WAAW,MAAM,gBAAA,CAAiB,QAAA,EAAU,KAAA,CAAM,SAAS,MAAM,CAAA;AAGvE,MAAA,MAAM,UAAA,GAAaE,UAAU,yBAAyB,CAAA;AACtD,MAAA,UAAA,CAAW,KAAA,EAAM;AACjB,MAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY;AAAA,QAC7B,GAAA,EAAK,QAAA;AAAA,QACL,MAAA;AAAA,QACA,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,MAAM,KAAA,CAAM,IAAA;AAAA;AAAA,QAEZ,cAAc,MAAA,CAAO,IAAA;AAAA,QACrB;AAAA,OACD,CAAA;AACD,MAAA,UAAA,CAAW,OAAA,CAAQ,CAAA,MAAA,EAAS,IAAA,CAAK,QAAA,CAAS,MAAM,CAAA,WAAA,CAAa,CAAA;AAE7D,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC9B,QAAA,GAAA,CAAI,IAAI,OAAA,GAAU;AAAA,UAChB,KAAA,EAAO,SAAA;AAAA,UACP,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,OAAO,CAAA,uBAAA,CAAyB,CAAA,EAAG,CAAA;AAAA,UAC1E,MAAA,EAAQ;AAAA,SACT,CAAA;AACD,QAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,MACpB;AAGA,MAAA,WAAA,CAAY,GAAA,EAAK,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAG5C,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,SAAA,GAAY,MAAM,cAAA,EAAe;AACvC,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,GAAA,CAAI,IAAI,OAAA,GAAU;AAAA,YAChB,KAAA,EAAO,SAAA;AAAA,YACP,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,CAAC,CAAA,EAAG,GAAA,CAAI,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAA,UAAA,CAAY,CAAA,EAAG,CAAA;AAAA,YAC1D,MAAA,EAAQ;AAAA,WACT,CAAA;AACD,UAAA,OAAO,EAAE,IAAI,IAAA,EAAK;AAAA,QACpB;AAAA,MACF;AAGA,MAAA,MAAM,MAAM,MAAA,EAAO;AACnB,MAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,MAAA,EAAQ,GAAA,IAAO,MAAS,CAAA;AACnE,MAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,MAAA,EAAQ,KAAA,EAAO,GAAG,CAAA;AAEpD,MAAA,MAAM,cAAA,GAAiBA,UAAU,6BAA6B,CAAA;AAC9D,MAAA,cAAA,CAAe,KAAA,EAAM;AAErB,MAAA,MAAM,aAAA,GAAgB,KAAK,GAAA,EAAI;AAE/B,MAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB;AAAA,QACtC,GAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,MAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA,EAAY,MAAM,aAAa,CAAA;AAAA,QAC/B,SAAA,EAAW,MAAM,YAAY,CAAA;AAAA,QAC7B,UAAA,EAAY,MAAM,aAAa,CAAA;AAAA,QAC/B,WAAA;AAAA,QACA,QAAA,EAAU,MAAM,WAAW,CAAA;AAAA,QAC3B,MAAA,EAAQ,aAAA,CAAc,KAAA,EAAO,MAAM,CAAA;AAAA,QACnC,SAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,EAAO,IAAI,GAAA,CAAI,KAAA;AAAA,QACf,MAAA,EAAQ,IAAI,QAAA,EAAU,MAAA;AAAA,QACtB,UAAA,EAAY,CAAC,MAAA,EAAQ,OAAA,KAAY;AAC/B,UAAA,MAAM,YAAY,IAAA,CAAK,GAAA,KAAQ,aAAA,IAAiB,GAAA,EAAM,QAAQ,CAAC,CAAA;AAC/D,UAAA,cAAA,CAAe,MAAA,CAAO,EAAE,IAAA,EAAM,CAAA,CAAA,EAAI,OAAO,CAAA,GAAA,EAAM,OAAO,IAAI,CAAA;AAAA,QAC5D;AAAA,OACD,CAAA;AAED,MAAA,cAAA,CAAe,OAAA,CAAQ,MAAA,CAAO,OAAA,GAAU,mBAAA,GAAsB,gBAAgB,CAAA;AAE9E,MAAA,oBAAA,CAAqB,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,WAAW,CAAA;AAE5D,MAAA,OAAO,MAAA,CAAO,UAAU,EAAE,EAAA,EAAI,MAAM,MAAA,EAAQ,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO,KAAM,EAAE,EAAA,EAAI,OAAO,KAAA,EAAO,gBAAA,EAAkB,QAAQ,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO,EAAE;AAAA,IACpJ;AAAA;AAEJ,CAAC","file":"run.js","sourcesContent":["/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\nimport { buildReleaseTag } from '@kb-labs/release-manager-core';\nimport type { ILLM } from '@kb-labs/sdk';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: ILLM): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: {\n ...opts.range,\n to: opts.range?.to ?? 'HEAD',\n tagGlob: opts.flow\n ? buildReleaseTag(opts.flow, '*', config.flows?.[opts.flow]?.tagPattern)\n : undefined,\n },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Rewrite a package's own version and workspace:/link: dependency references\n * before `pnpm publish`, so the tarball on disk matches what's about to be\n * published even when that version was never persisted to package.json.\n *\n * - Own version: stable releases already have the target version on disk\n * (written by updatePackageVersions() before this runs), so this is a\n * no-op for them. Canary releases compute nextVersion in-memory only —\n * never committed to package.json/git — so without this, `pnpm publish`\n * would read the OLD on-disk version, and either fail outright or (worse)\n * get misclassified as \"already published\" by the retry/idempotency\n * patterns since that old version genuinely IS already on the registry.\n * - pnpm handles `workspace:*` natively during `pnpm publish` — no rewrite needed.\n * - npm/yarn do NOT — we must replace with `^version` before publish.\n * - `link:` references are never valid on the npm registry — always rewrite.\n *\n * Returns a restore function that reverts package.json to original content.\n * Call it in a finally block to guarantee cleanup.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ── rewriteWorkspaceDeps helpers ──────────────────────────────────────────\n\nfunction rewriteLinkDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n pkgPath: string,\n versionMap: Map<string, string>,\n): void {\n const pinned = versionMap.get(depName);\n if (pinned) {\n deps[depName] = `^${pinned}`;\n return;\n }\n try {\n const linkPath = val.slice('link:'.length);\n const linked = JSON.parse(readFileSync(join(pkgPath, linkPath, 'package.json'), 'utf-8')) as { version?: string };\n deps[depName] = `^${linked.version ?? '*'}`;\n } catch {\n deps[depName] = '*';\n }\n}\n\nfunction rewriteWorkspaceDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n versionMap: Map<string, string>,\n): boolean {\n const pinned = versionMap.get(depName);\n if (!pinned) { return false; }\n const range = val === 'workspace:*' ? '^' : val.slice('workspace:'.length);\n deps[depName] = `${range}${pinned}`;\n return true;\n}\n\nfunction rewriteDepsSection(\n deps: Record<string, string>,\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): boolean {\n let modified = false;\n for (const depName of Object.keys(deps)) {\n const val = deps[depName];\n if (typeof val !== 'string') { continue; }\n if (val.startsWith('link:')) {\n rewriteLinkDep(deps, depName, val, pkgPath, versionMap);\n modified = true;\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm' && rewriteWorkspaceDep(deps, depName, val, versionMap)) {\n modified = true;\n }\n }\n return modified;\n}\n\nexport function rewriteWorkspaceDeps(\n pkg: { path: string; version: string },\n versionMap: Map<string, string>,\n packageManager: string,\n): () => void {\n const pkgPath = pkg.path;\n const pkgJsonPath = join(pkgPath, 'package.json');\n const original = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(original) as Record<string, unknown> & { version?: string };\n let modified = false;\n\n if (pkgJson.version !== pkg.version) {\n pkgJson.version = pkg.version;\n modified = true;\n }\n\n // Every dependency-like section must be rewritten: a published tarball's\n // devDependencies/optionalDependencies\n // field is inert for the *installer* of this package, but npm's own manifest\n // normalization (npm-package-arg validation inside @npmcli/arborist) parses\n // EVERY dependency-like section of every manifest it reads while building the\n // ideal tree — including devDependencies of a package several levels deep in\n // someone else's dependency graph. A leftover \"workspace:*\" there throws\n // EUNSUPPORTEDPROTOCOL and aborts the whole install, not just a devDependency\n // installation that would otherwise be skipped. Confirmed live on\n // @kb-labs/plugin-execution-factory@2.114.0's devDependencies.@kb-labs/gateway-core.\n for (const section of ['dependencies', 'optionalDependencies', 'peerDependencies', 'devDependencies'] as const) {\n const deps = pkgJson[section] as Record<string, string> | undefined;\n if (!deps) { continue; }\n if (rewriteDepsSection(deps, pkgPath, versionMap, packageManager)) { modified = true; }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, original);\n}\n\n// ── topoSort helpers ──────────────────────────────────────────────────────\n\n/**\n * Build a simple topological sort of packages for publish order.\n *\n * Packages are grouped into \"waves\": wave 0 has no intra-release deps,\n * wave 1 depends only on wave 0, etc. Within each wave publish order\n * is arbitrary (safe to parallelise).\n *\n * Cycles (should not exist in a well-formed monorepo) fall into a\n * \"remainder\" group appended at the end.\n */\nexport interface TopoPackage {\n name: string;\n path: string;\n version: string;\n}\n\nfunction buildIntraDeps(packages: TopoPackage[], nameSet: Set<string>): Map<string, Set<string>> {\n const deps = new Map<string, Set<string>>();\n for (const pkg of packages) {\n const intra = new Set<string>();\n try {\n const pkgJson = JSON.parse(readFileSync(join(pkg.path, 'package.json'), 'utf-8')) as {\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n for (const depName of Object.keys(pkgJson[section] ?? {})) {\n if (nameSet.has(depName)) { intra.add(depName); }\n }\n }\n } catch {\n // If we can't read package.json, treat as no deps\n }\n deps.set(pkg.name, intra);\n }\n return deps;\n}\n\nfunction buildDependantsMap(packages: TopoPackage[], deps: Map<string, Set<string>>): Map<string, Set<string>> {\n const dependants = new Map<string, Set<string>>();\n for (const pkg of packages) {\n for (const dep of deps.get(pkg.name) ?? []) {\n if (!dependants.has(dep)) { dependants.set(dep, new Set()); }\n dependants.get(dep)!.add(pkg.name);\n }\n }\n return dependants;\n}\n\nfunction computeWaves(\n packages: TopoPackage[],\n deps: Map<string, Set<string>>,\n dependants: Map<string, Set<string>>,\n): TopoPackage[][] {\n const byName = new Map(packages.map(p => [p.name, p]));\n const remaining = new Map<string, number>(\n packages.map(p => [p.name, (deps.get(p.name) ?? new Set()).size])\n );\n const waves: TopoPackage[][] = [];\n\n while (remaining.size > 0) {\n const wave = [...remaining.entries()]\n .filter(([, count]) => count === 0)\n .map(([name]) => byName.get(name)!);\n\n if (wave.length === 0) {\n waves.push([...remaining.keys()].map(n => byName.get(n)!));\n break;\n }\n\n waves.push(wave);\n for (const pkg of wave) {\n remaining.delete(pkg.name);\n for (const dependant of dependants.get(pkg.name) ?? []) {\n if (remaining.has(dependant)) {\n remaining.set(dependant, (remaining.get(dependant) ?? 1) - 1);\n }\n }\n }\n }\n\n return waves.filter(w => w.length > 0);\n}\n\nexport function topoSort(packages: TopoPackage[], _packageManager: string): TopoPackage[][] {\n const nameSet = new Set(packages.map(p => p.name));\n const deps = buildIntraDeps(packages, nameSet);\n const dependants = buildDependantsMap(packages, deps);\n return computeWaves(packages, deps, dependants);\n}\n","/**\n * Programmatic npm publishing for REST handlers (non-interactive context).\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n *\n * Reliability guarantees:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - 429 rate-limit: exponential back-off with jitter, up to MAX_RETRIES attempts.\n * - Transient network errors (ECONNRESET, ETIMEDOUT, etc.) are also retried.\n * - Packages are published in topological order (deps before dependants).\n * - Default concurrency is 4 — enough throughput, low enough to avoid rate limits.\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps, topoSort } from './dep-rewrite';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n /**\n * Pre-built tarball to publish instead of packing fresh from `path`\n * (produced by `release stage` — see stage.ts). When set, `path` is\n * only used as the cwd for npm's `.npmrc` auth lookup — no\n * `rewriteWorkspaceDeps` mutation happens, since the tarball's\n * package.json is already final and must ship byte-for-byte unchanged.\n */\n tarballPath?: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n /** Package was already published at this version — counted as success. */\n alreadyPublished?: boolean;\n error?: string;\n /** npm's own error code (e.g. \"E403\"), extracted from its stderr, when recognizable. */\n errorCode?: string;\n /** Actionable, human-readable explanation for errorCode — see NPM_ERROR_HINTS. */\n errorHint?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n /** Versions that were already on npm (counted as success). */\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry configuration\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\n\n// Exponential base delays (ms). Actual delay = base * jitter(0.8–1.2).\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\n/** Retryable error patterns — all transient, not indicative of a bad package. */\nconst RETRYABLE_PATTERNS = [\n 'E429',\n '429 Too Many Requests',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'ECONNREFUSED',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'socket hang up',\n 'network timeout',\n 'read ECONNRESET',\n];\n\n/** \"Already published\" — treat as success so re-runs are idempotent. */\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n // Some registries return 403 for conflicts\n];\n\nfunction isRetryable(message: string): boolean {\n return RETRYABLE_PATTERNS.some(p => message.includes(p));\n}\n\nfunction isAlreadyPublished(message: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => message.includes(p));\n}\n\n/**\n * Human-readable hints per npm error code — surfaced directly in the\n * delivery report so a permanent failure doesn't require digging through\n * raw CI logs to tell \"our token is broken\" apart from \"npm has flagged\n * this specific package,\" which look identical (both E403) but need\n * completely different fixes.\n */\nconst NPM_ERROR_HINTS: Record<string, string> = {\n E403: 'npm rejected the publish (403). If other packages in the same run succeeded with the same token, this is almost certainly an npm-side restriction on this specific package/account entry (e.g. a security hold), not a token or code problem — check npmjs.com directly or contact npm support. Retrying will not help until that is resolved.',\n E401: 'Authentication failed (401) — NPM_TOKEN/NODE_AUTH_TOKEN is missing, expired, or invalid for this registry.',\n E404: 'Registry returned 404 — check the registry URL and that the package name/scope is correct and accessible with this token.',\n EOTP: 'npm requires a one-time password for this publish — programmatic (token-based) delivery cannot supply one; this package needs an interactive `npm publish` from a human, or a token exempt from OTP.',\n};\n\n/** Extract the npm CLI's own error code (e.g. \"E403\") from its stderr, if present. */\nfunction extractNpmErrorCode(message: string): string | undefined {\n const match = message.match(/\\bnpm error code (E[A-Z0-9]+)\\b/);\n return match?.[1];\n}\n\n/** Classify a permanent publish failure into a code + actionable hint, when recognizable. */\nfunction classifyPublishError(message: string): { code?: string; hint?: string } {\n const code = extractNpmErrorCode(message);\n const hint = code ? NPM_ERROR_HINTS[code] : undefined;\n return { code, hint };\n}\n\n/** Exponential back-off with ±20% jitter. */\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4; // 0.8 – 1.2\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Token resolution\n// ---------------------------------------------------------------------------\n\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\n/**\n * Spawn `packageManager publish` for a single package.\n * Writes a temporary .npmrc for NODE_AUTH_TOKEN auth, cleans it up on exit.\n */\nfunction spawnPublish(options: {\n packagePath: string;\n /** Publish this exact tarball instead of packing `packagePath` fresh. */\n tarballPath?: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, tarballPath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n if (tarballPath) { args.push(tarballPath); }\n\n if (packageManager === 'pnpm' && !tarballPath) {\n // pnpm checks git cleanliness; we version-bump before publish which makes\n // the tree dirty — bypass that check. N/A when publishing a pre-built\n // tarball — there's no working-tree state for pnpm to check.\n args.push('--no-git-checks');\n }\n if (dryRun) { args.push('--dry-run'); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n if (otp) { args.push(`--otp=${otp}`); }\n\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) { env['NODE_AUTH_TOKEN'] = token; }\n\n // Write a per-package .npmrc so npm picks up NODE_AUTH_TOKEN.\n // The auth line's host must match the target registry — hardcoding\n // registry.npmjs.org here would silently break token auth against\n // Verdaccio or any other non-npmjs registry.\n const npmrcPath = join(packagePath, '.npmrc');\n const npmrcExisted = existsSync(npmrcPath);\n const npmrcBackup = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : null;\n const registryHost = registry ? new URL(registry).host : 'registry.npmjs.org';\n const authLine = `//${registryHost}/:_authToken=\\${NODE_AUTH_TOKEN}\\n`;\n\n if (token) {\n const existing = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : '';\n if (!existing.includes('_authToken')) {\n writeFileSync(npmrcPath, existing + authLine);\n }\n }\n\n const restoreNpmrc = () => {\n if (!token) { return; }\n try {\n if (npmrcBackup !== null) {\n writeFileSync(npmrcPath, npmrcBackup);\n } else if (existsSync(npmrcPath)) {\n unlinkSync(npmrcPath);\n }\n } catch { /* best-effort */ }\n };\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n restoreNpmrc();\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n restoreNpmrc();\n reject(err);\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-package publish with retry\n// ---------------------------------------------------------------------------\n\nasync function publishOne(\n pkg: PackageToPublish,\n opts: {\n packageManager: string;\n token: string | undefined;\n versionMap: Map<string, string>;\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n },\n logger: ReturnType<typeof useLogger>,\n): Promise<PublishResult> {\n // A pre-built tarball (see PackageToPublish.tarballPath) is already final\n // — publishing it must ship those exact bytes, so skip the package.json\n // rewrite entirely rather than mutating a directory whose content the\n // tarball no longer reflects.\n const restore = pkg.tarballPath ? (() => {}) : rewriteWorkspaceDeps(pkg, opts.versionMap, opts.packageManager);\n\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await spawnPublish({\n packagePath: pkg.path,\n tarballPath: pkg.tarballPath,\n packageManager: opts.packageManager,\n token: opts.token,\n otp: opts.otp,\n dryRun: opts.dryRun,\n tag: opts.tag,\n access: opts.access,\n registry: opts.registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n\n // Idempotency: already published at this version → success.\n if (isAlreadyPublished(message)) {\n logger.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n\n // Retryable transient error (rate-limit, network blip).\n if (isRetryable(message) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger.warn(\n `Transient error for ${pkg.name}@${pkg.version} (attempt ${attempt + 1}/${MAX_RETRIES}), ` +\n `retrying in ${(delay / 1000).toFixed(1)}s: ${message.split('\\n')[0]}`,\n );\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n\n // Permanent failure.\n const { code, hint } = classifyPublishError(message);\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message, errorCode: code });\n return { name: pkg.name, version: pkg.version, success: false, error: message, errorCode: code, errorHint: hint };\n }\n }\n\n // Exhausted retries.\n return {\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: `Publish failed after ${MAX_RETRIES} retries (transient errors)`,\n };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nfunction skipRemainingWaves(\n waves: ReturnType<typeof topoSort>,\n waveIdx: number,\n waveFailed: PublishResult[],\n logger: ReturnType<typeof useLogger>,\n allResults: PublishResult[],\n): void {\n const remaining = waves.slice(waveIdx + 1).reduce((acc, w) => acc + w.length, 0);\n if (remaining === 0) { return; }\n logger.warn(\n `Wave ${waveIdx + 1} had ${waveFailed.length} failure(s) — ` +\n `skipping ${remaining} package(s) in later waves to avoid broken dependency chain`,\n );\n for (const laterWave of waves.slice(waveIdx + 1)) {\n for (const pkg of laterWave) {\n allResults.push({ name: pkg.name, version: pkg.version, success: false, error: 'Skipped: dependency wave failed' });\n }\n }\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers / CI).\n *\n * Packages are published in topological order (deps before dependants) to\n * avoid \"package not found\" errors when a dependent is installed right after\n * release. Within each topological wave, publishes run in parallel up to\n * CONCURRENCY.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions,\n): Promise<ProgrammaticPublishResult> {\n const {\n packages,\n packageManager = 'pnpm',\n dryRun,\n otp,\n tag,\n access,\n registry,\n } = options;\n\n const logger = useLogger();\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n alreadyPublished: [],\n failed: packages.map(p => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Version map for dep rewriting (workspace:/link: → ^version).\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Concurrency: default 4 — enough throughput, below npm's sustained rate limit.\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n\n // Sort packages into topological waves so deps are always published first.\n const waves = topoSort(packages, packageManager);\n\n logger.info(\n `Publishing ${packages.length} package(s) in ${waves.length} topological wave(s) ` +\n `(concurrency=${CONCURRENCY}, dryRun=${dryRun ?? false})`,\n );\n\n const allResults: PublishResult[] = [];\n\n for (let waveIdx = 0; waveIdx < waves.length; waveIdx++) {\n const wave = waves[waveIdx]!;\n logger.info(`Wave ${waveIdx + 1}/${waves.length}: publishing ${wave.length} package(s)`);\n\n // Publish wave in parallel batches.\n for (let i = 0; i < wave.length; i += CONCURRENCY) {\n const batch = wave.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(\n batch.map(pkg =>\n publishOne(pkg, { packageManager, token, versionMap, dryRun, otp, tag, access, registry }, logger),\n ),\n );\n allResults.push(...batchResults);\n }\n\n // If any package in this wave genuinely failed (not alreadyPublished), stop\n // publishing the next wave — it may depend on the failed packages.\n const waveFailed = allResults.slice(-wave.length).filter(r => !r.success);\n if (waveFailed.length > 0) {\n skipRemainingWaves(waves, waveIdx, waveFailed, logger, allResults);\n break;\n }\n }\n\n const published = allResults.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const alreadyPublished = allResults.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const failed = allResults.filter(r => !r.success).map(r => `${r.name}@${r.version}`);\n const errors = allResults.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`);\n\n if (alreadyPublished.length > 0) {\n logger.info(`${alreadyPublished.length} package(s) already published — counted as success`);\n }\n\n return {\n results: allResults,\n published,\n alreadyPublished,\n failed,\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared publishing logic with interactive OTP support.\n * Used by both `release:run` and `release publish` commands.\n *\n * Flow:\n * 1. Optimistic parallel publish (fast-path, works when OTP is not required).\n * 2. On EOTP: fall back to sequential publish with interactive OTP prompt.\n *\n * Reliability:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - Transient errors (429, ECONNRESET, etc.) are retried with exponential back-off + jitter.\n * - dep rewriting (workspace:/link: → ^version) is handled by shared dep-rewrite utility.\n */\n\nimport { spawn } from 'node:child_process';\nimport * as readline from 'node:readline/promises';\nimport { useLoader, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps } from './dep-rewrite';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface PublishWithOTPOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n ui: {\n write?: (text: string) => void;\n };\n logger?: {\n info: (msg: string, meta?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, error?: Error, meta?: Record<string, unknown>) => void;\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry helpers (shared with publish-programmatic)\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\nconst RETRYABLE_PATTERNS = [\n 'E429', '429 Too Many Requests',\n 'ECONNRESET', 'ETIMEDOUT', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN',\n 'socket hang up', 'network timeout', 'read ECONNRESET',\n];\n\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n];\n\nfunction isRetryable(msg: string): boolean {\n return RETRYABLE_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction isAlreadyPublished(msg: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4;\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\ninterface PublishSingleOptions {\n packagePath: string;\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}\n\nfunction publishSinglePackage(options: PublishSingleOptions): Promise<void> {\n const { packagePath, packageManager = 'pnpm', otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (packageManager === 'pnpm') { args.push('--no-git-checks'); }\n if (dryRun) { args.push('--dry-run'); }\n if (otp) { args.push(`--otp=${otp}`); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: true,\n });\n\n let stdout = '';\n let stderr = '';\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => reject(err));\n });\n}\n\n// ---------------------------------------------------------------------------\n// Fast-path helpers\n// ---------------------------------------------------------------------------\n\ninterface FastPublishContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}\n\ninterface FastPublishOutcome {\n result: PublishResult | null; // null = needs OTP sequential path\n otpFailed: boolean;\n}\n\nasync function fastPublishPkg(\n pkg: PackageToPublish,\n ctx: FastPublishContext,\n logger: PublishWithOTPOptions['logger'],\n): Promise<FastPublishOutcome> {\n const restore = rewriteWorkspaceDeps(pkg, ctx.versionMap, ctx.packageManager);\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: ctx.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access, registry: ctx.registry });\n logger?.info('Published (fast-path)', { name: pkg.name, version: pkg.version });\n return { result: { name: pkg.name, version: pkg.version, success: true }, otpFailed: false };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n logger?.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { result: { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true }, otpFailed: false };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n return { result: null, otpFailed: true };\n }\n if (isRetryable(msg) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger?.warn(`Transient error for ${pkg.name} (attempt ${attempt + 1}/${MAX_RETRIES}), retrying in ${(delay / 1000).toFixed(1)}s`);\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n logger?.error('Publish failed (fast-path)', undefined, { name: pkg.name, error: msg });\n return { result: { name: pkg.name, version: pkg.version, success: false, error: msg }, otpFailed: false };\n }\n }\n return { result: { name: pkg.name, version: pkg.version, success: false, error: `Publish failed after ${MAX_RETRIES} retries (transient errors)` }, otpFailed: false };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Sequential OTP path helpers\n// ---------------------------------------------------------------------------\n\ninterface OtpState { otp?: string; }\n\nasync function promptForOtp(\n ui: PublishWithOTPOptions['ui'],\n loader: ReturnType<typeof useLoader>,\n pkgName: string,\n): Promise<string | undefined> {\n loader.succeed(`🔐 2FA required for ${pkgName}`);\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n try {\n const entered = await rl.question(' Enter OTP code: ');\n rl.close();\n if (!entered || entered.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP (must be 6 digits)\\n');\n return undefined;\n }\n return entered.trim();\n } catch (e) {\n rl.close();\n throw e;\n }\n}\n\ninterface SequentialContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}\n\nasync function sequentialPublishPkg(\n pkg: PackageToPublish,\n ctx: SequentialContext,\n otpState: OtpState,\n ui: PublishWithOTPOptions['ui'],\n logger: PublishWithOTPOptions['logger'],\n): Promise<PublishResult> {\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n const restore = rewriteWorkspaceDeps(pkg, ctx.versionMap, ctx.packageManager);\n try {\n const MAX_OTP_ATTEMPTS = 3;\n for (let otpAttempts = 0; otpAttempts < MAX_OTP_ATTEMPTS; otpAttempts++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: otpState.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access, registry: ctx.registry });\n loader.succeed(ctx.dryRun ? `Dry-run: ${pkg.name}@${pkg.version}` : `Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n loader.succeed(`${pkg.name}@${pkg.version} already published`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n if (otpAttempts + 1 < MAX_OTP_ATTEMPTS) {\n otpState.otp = await promptForOtp(ui, loader, pkg.name);\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n } else {\n loader.fail('Max OTP attempts reached');\n return { name: pkg.name, version: pkg.version, success: false, error: 'Max OTP attempts reached' };\n }\n } else if (isRetryable(msg)) {\n const delay = retryDelay(MAX_RETRIES - 1);\n loader.update({ text: `Rate limited — waiting ${(delay / 1000).toFixed(0)}s…` });\n loader.start();\n await new Promise<void>(r => { setTimeout(r, delay); });\n otpAttempts--; // don't count transient error as an OTP attempt\n } else {\n loader.fail(`Failed: ${msg.split('\\n')[0]}`);\n return { name: pkg.name, version: pkg.version, success: false, error: msg };\n }\n }\n }\n return { name: pkg.name, version: pkg.version, success: false, error: 'Publish failed after max OTP attempts' };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\n/**\n * Publish packages with interactive OTP support.\n *\n * Tries parallel optimistic publish first. On EOTP, falls back to sequential\n * publish with interactive OTP prompt.\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions,\n): Promise<PublishWithOTPResult> {\n const { packages, packageManager = 'pnpm', dryRun, tag, access, registry, ui, logger } = options;\n const otpState: OtpState = { otp: options.otp };\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n const fastCtx: FastPublishContext = { packageManager, versionMap, otp: otpState.otp, dryRun, tag, access, registry };\n const seqCtx: SequentialContext = { packageManager, versionMap, dryRun, tag, access, registry };\n\n const results: PublishResult[] = [];\n const remaining: PackageToPublish[] = [];\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n let otpFailureDetected = false;\n\n ui.write?.(` Publishing ${packages.length} package(s) in parallel (concurrency=${CONCURRENCY})...\\n`);\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const outcomes = await Promise.all(batch.map(pkg => fastPublishPkg(pkg, fastCtx, logger)));\n for (let j = 0; j < batch.length; j++) {\n const outcome = outcomes[j]!;\n if (outcome.result === null) { remaining.push(batch[j]!); } else { results.push(outcome.result); }\n if (outcome.otpFailed) { otpFailureDetected = true; }\n }\n if (otpFailureDetected) {\n remaining.push(...packages.slice(i + CONCURRENCY));\n break;\n }\n }\n\n if (remaining.length === 0) { return buildResult(results, packages, dryRun); }\n\n ui.write?.(` OTP required — falling back to sequential publish for ${remaining.length} package(s)\\n`);\n for (const pkg of remaining) {\n logger?.info('Publishing package (sequential)', { name: pkg.name, version: pkg.version });\n results.push(await sequentialPublishPkg(pkg, seqCtx, otpState, ui, logger));\n }\n\n return buildResult(results, packages, dryRun);\n}\n\nfunction buildResult(\n results: PublishResult[],\n packages: PackageToPublish[],\n dryRun?: boolean,\n): PublishWithOTPResult {\n return {\n results,\n published: results.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n alreadyPublished: results.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n failed: results.filter(r => !r.success).map(r => `${r.name}@${r.version}`),\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors: results.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`),\n };\n}\n","/**\n * Release run command — thin adapter over core runReleasePipeline().\n * Mirror of rest/handlers/run-handler.ts for CLI context.\n *\n * Flow:\n * 1. Load config\n * 2. Plan (discover packages, compute versions)\n * 3. Show plan table + confirm [y/N] (skipped with --yes or --dry-run)\n * 4. Execute pipeline with elapsed-time progress\n */\n\nimport * as readline from 'node:readline/promises';\nimport {\n defineCommand,\n type CLIInput,\n type CommandResult,\n type PluginContextV3,\n useLLM,\n useLoader,\n useConfig,\n useEnv,\n} from '@kb-labs/sdk';\nimport {\n runReleasePipeline,\n planRelease,\n resolveScopePath,\n resolvePublishRegistry,\n type ReleaseConfig,\n type ReleaseChannel,\n type ReleaseReport,\n type CheckResult,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { publishPackagesWithOTP } from '../../shared/publish-with-otp';\n\ninterface RunFlags {\n scope?: string;\n flow?: string;\n bump?: 'patch' | 'minor' | 'major' | 'auto';\n strict?: boolean;\n channel?: ReleaseChannel;\n 'dry-run'?: boolean;\n 'skip-checks'?: boolean;\n 'skip-build'?: boolean;\n 'skip-verify'?: boolean;\n 'skip-publish'?: boolean;\n 'no-verify'?: boolean;\n yes?: boolean;\n json?: boolean;\n}\n\ntype ReleaseRunResult = CommandResult<unknown>;\n\nconst BUMP_SYMBOL: Record<string, string> = {\n major: '!!',\n minor: '+',\n patch: '·',\n auto: '?',\n};\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\nfunction buildPlanRows(packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }>): string[] {\n return packages.map(pkg => {\n const bump = pkg.bump ?? 'auto';\n const sym = BUMP_SYMBOL[bump] ?? '?';\n return ` ${sym} ${pkg.name.padEnd(40)} ${pkg.currentVersion.padStart(8)} → ${pkg.nextVersion}`;\n });\n}\n\nfunction createPublisher(\n config: ReleaseConfig,\n token: string | undefined,\n ctx: PluginContextV3,\n): { publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string; tag?: string; registry?: string }): Promise<PublishResult> } {\n const packageManager = config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm';\n return {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string; tag?: string; registry?: string }): Promise<PublishResult> {\n // registry/tag come from pipeline.ts, resolved per-channel from config\n // (config.registry for stable, config.publish.npmRegistry for canary).\n const registry = opts.registry ?? config.registry;\n if (token) {\n const r = await publishPackagesProgrammatic({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: (opts.access as 'public' | 'restricted') ?? 'public',\n tag: opts.tag,\n registry,\n token,\n });\n return { published: r.published, alreadyPublished: r.alreadyPublished, failed: r.failed, skipped: r.skipped, errors: r.errors };\n }\n // PublishWithOTPResult is structurally compatible with core PublishResult\n // (both have published/alreadyPublished/failed/skipped). Double-cast to satisfy\n // the return type without widening to any.\n return publishPackagesWithOTP({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: opts.access ?? 'public',\n tag: opts.tag,\n registry,\n ui: ctx.ui,\n logger: ctx.platform?.logger,\n }) as unknown as Promise<PublishResult>;\n },\n };\n}\n\nfunction appendCheckDetails(c: CheckResult, checkItems: string[]): void {\n if (c.details?.packagePath) { checkItems.push(` package: ${c.details.packagePath}`); }\n if (c.details?.error) { checkItems.push(` reason: ${c.details.error}`); }\n const output = (c.details?.stderr || c.details?.stdout || '').trim();\n if (output) {\n checkItems.push(` output:`);\n for (const line of output.split('\\n').slice(0, 8)) { checkItems.push(` ${line}`); }\n }\n const failedPkgs = (c.packages ?? []).filter(p => !p.ok);\n if (failedPkgs.length) {\n checkItems.push(` failed in ${failedPkgs.length}/${c.packages!.length} package(s):`);\n for (const pkg of failedPkgs.slice(0, 10)) {\n checkItems.push(` - ${pkg.path}${pkg.details?.error ? `: ${pkg.details.error}` : ''}`);\n }\n }\n}\n\nfunction buildCheckItems(checkEntries: CheckResult[], symbols: { success: string; warning: string; error: string }): string[] {\n const checkItems: string[] = [];\n for (const c of checkEntries) {\n const sym = c.ok ? symbols.success : (c.hint === 'optional' ? symbols.warning : symbols.error);\n const timing = c.timingMs ? ` (${(c.timingMs / 1000).toFixed(1)}s)` : '';\n checkItems.push(`${sym} ${c.id}${timing}`);\n if (!c.ok && c.hint !== 'optional') { appendCheckDetails(c, checkItems); }\n }\n return checkItems;\n}\n\nfunction buildReleaseSections(\n report: ReleaseReport,\n dryRun: boolean,\n skipPublish: boolean,\n ctx: PluginContextV3,\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n if (!dryRun && report.result.published?.length) {\n sections.push({\n header: 'Published',\n items: report.result.published.map(p => `${ctx.ui.symbols.success} ${p}`),\n });\n }\n\n if (!dryRun && report.result.alreadyPublished?.length) {\n sections.push({\n header: 'Already published (skipped)',\n items: report.result.alreadyPublished.map(p => `${ctx.ui.symbols.info} ${p}`),\n });\n }\n\n if (dryRun && report.result.skipped?.length) {\n sections.push({\n header: 'Would publish (dry-run)',\n items: report.result.skipped.map(p => `${ctx.ui.symbols.info} ${p.replace(' (dry-run)', '')}`),\n });\n }\n\n if (!dryRun && skipPublish && report.result.skipped?.length) {\n sections.push({\n header: 'Prepared — not published (git tag pushed, CI publishes on tag)',\n items: report.result.skipped.map(p => `${ctx.ui.symbols.info} ${p}`),\n });\n }\n\n if (report.result.checks) {\n const checkEntries = (Object.values(report.result.checks) as CheckResult[]).filter(Boolean);\n const passed = checkEntries.filter(c => c.ok);\n const failed = checkEntries.filter(c => !c.ok && c.hint !== 'optional');\n const skipped = checkEntries.filter(c => !c.ok && c.hint === 'optional');\n\n if (checkEntries.length > 0) {\n sections.push({\n header: `Checks — ${passed.length} passed, ${failed.length} failed${skipped.length ? `, ${skipped.length} skipped` : ''}`,\n items: buildCheckItems(checkEntries, ctx.ui.symbols),\n });\n }\n }\n\n if (report.result.errors?.length && !report.result.checks) {\n sections.push({\n header: 'Errors',\n items: report.result.errors.map(e => `${ctx.ui.symbols.error} ${e}`),\n });\n }\n\n if (report.result.git) {\n const g = report.result.git;\n sections.push({\n header: 'Git',\n items: [\n `Committed: ${g.committed}`,\n `Tags: ${g.tagged?.join(', ') || 'none'}`,\n `Pushed: ${g.pushed}`,\n ],\n });\n }\n\n return sections;\n}\n\nfunction resolveChecks(flags: RunFlags, config: ReleaseConfig): NonNullable<ReleaseConfig['checks']> {\n const flowChecks = flags.flow ? config.flows?.[flags.flow]?.checks : undefined;\n const scopeChecks = flags.scope ? config.scopes?.[flags.scope]?.checks : undefined;\n const selectedChecks = flowChecks ?? scopeChecks ?? [];\n const checksById = new Map<string, NonNullable<ReleaseConfig['checks']>[number]>();\n\n // Flow/scope checks are additions to the global release contract. A flow may\n // replace a check with a stricter command, but it may not silently drop a\n // global gate (the old behavior made platform releases skip typecheck,\n // lint, tests and pack-install).\n for (const check of config.checks ?? []) { checksById.set(check.id, check); }\n for (const check of selectedChecks) { checksById.set(check.id, check); }\n\n const channel = flags.channel ?? config.channel ?? 'stable';\n return [...checksById.values()].map(check =>\n channel === 'stable' && check.optional ? { ...check, optional: false } : check,\n );\n}\n\nasync function confirmRelease(): Promise<boolean> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n let answer: string;\n try {\n answer = await rl.question('\\nProceed with release? [y/N] ');\n } finally {\n rl.close();\n }\n return answer.trim().toLowerCase() === 'y';\n}\n\nfunction showPlanBox(\n ctx: PluginContextV3,\n flags: RunFlags,\n plan: { packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }> },\n config: ReleaseConfig,\n dryRun: boolean,\n): void {\n if (flags.json) { return; }\n ctx.ui?.sideBox?.({\n title: dryRun ? 'Release Plan (dry-run)' : 'Release Plan',\n sections: [\n {\n header: `${plan.packages.length} package(s) · strategy: ${config.versioningStrategy ?? 'independent'}${flags.flow ? ` · flow: ${flags.flow}` : ''}`,\n items: buildPlanRows(plan.packages),\n },\n ],\n status: 'info',\n });\n if (flags['no-verify']) {\n ctx.ui.write?.(` ⚠️ --no-verify: git pre-push hooks will be skipped\\n`);\n }\n}\n\nfunction reportPipelineResult(\n ctx: PluginContextV3,\n flags: RunFlags,\n result: { success: boolean; report: ReleaseReport },\n dryRun: boolean,\n skipPublish: boolean,\n): void {\n if (flags.json) {\n ctx.ui?.json?.(result.report);\n return;\n }\n ctx.ui?.sideBox?.({\n title: 'Release',\n sections: buildReleaseSections(result.report, dryRun, skipPublish, ctx),\n status: result.success ? 'success' : 'error',\n timing: result.report.result.timingMs,\n });\n}\n\nexport default defineCommand({\n id: 'release:run',\n description: 'Execute release process (plan, check, publish)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<RunFlags>): Promise<ReleaseRunResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const dryRun = flags['dry-run'] === true;\n const skipYes = flags.yes === true || dryRun;\n\n // 1. Load config\n const configLoader = useLoader('Loading configuration...');\n configLoader.start();\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = {\n ...fileConfig,\n ...(flags.bump && { bump: flags.bump }),\n ...(flags.strict !== undefined && { strict: flags.strict }),\n ...(flags.channel && { channel: flags.channel }),\n };\n configLoader.succeed('Configuration loaded');\n\n const channel: ReleaseChannel = config.channel ?? 'stable';\n const skipPublish = flags['skip-publish'] === true;\n const token = useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n\n // 1b. Pre-flight — fail fast before planning (which is slow).\n // The npm-credentials check is skipped entirely in prepare-only mode:\n // no npm access is needed to build, version, changelog, and git-tag a\n // release. The separate `kb release promote` step (run by CI on the\n // tag this pushes) does its own npm pre-flight. Flow validity is\n // always checked, publish or not.\n if (!dryRun) {\n const preErrors: string[] = [];\n\n if (!skipPublish) {\n const registry = resolvePublishRegistry(config, channel);\n if (!token) {\n preErrors.push('NPM_TOKEN or NODE_AUTH_TOKEN is not set');\n } else {\n try {\n const res = await fetch(`${registry}/-/whoami`, {\n headers: { Authorization: `Bearer ${token}` },\n signal: AbortSignal.timeout(8000),\n });\n if (!res.ok) {\n preErrors.push(`npm token invalid or expired (HTTP ${res.status} from ${registry})`);\n }\n } catch (e) {\n preErrors.push(`npm registry unreachable: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n }\n\n if (flags.flow && config.flows && !(flags.flow in config.flows)) {\n preErrors.push(`Flow \"${flags.flow}\" is not defined in release.flows config`);\n }\n\n if (preErrors.length > 0) {\n ctx.ui?.sideBox?.({\n title: 'Release — pre-flight failed',\n sections: [{ items: preErrors.map(e => `${ctx.ui.symbols.error} ${e}`) }],\n status: 'error',\n });\n return { ok: false, error: 'Command failed' };\n }\n }\n\n const scopeCwd = await resolveScopePath(repoRoot, flags.scope || 'root');\n\n // 2. Plan — run separately so we can show it before asking for confirm\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({\n cwd: repoRoot,\n config,\n scope: flags.scope,\n flow: flags.flow,\n // config.bump is already VersionBump | undefined — same type as bumpOverride\n bumpOverride: config.bump,\n channel,\n });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n if (plan.packages.length === 0) {\n ctx.ui?.sideBox?.({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.warning} No packages to release`] }],\n status: 'info',\n });\n return { ok: true };\n }\n\n // 3. Show plan table\n showPlanBox(ctx, flags, plan, config, dryRun);\n\n // 4. Confirm (skip with --yes or --dry-run)\n if (!skipYes) {\n const confirmed = await confirmRelease();\n if (!confirmed) {\n ctx.ui?.sideBox?.({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.info} Cancelled`] }],\n status: 'info',\n });\n return { ok: true };\n }\n }\n\n // 5. Execute pipeline\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n const publisher = createPublisher(config, token, ctx);\n\n const pipelineLoader = useLoader('Running release pipeline...');\n pipelineLoader.start();\n\n const pipelineStart = Date.now();\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope: flags.scope,\n flow: flags.flow,\n config,\n dryRun,\n skipChecks: flags['skip-checks'],\n skipBuild: flags['skip-build'],\n skipVerify: flags['skip-verify'],\n skipPublish,\n noVerify: flags['no-verify'],\n checks: resolveChecks(flags, config),\n publisher,\n changelog,\n shell: ctx.api.shell,\n logger: ctx.platform?.logger,\n onProgress: (_stage, message) => {\n const elapsed = ((Date.now() - pipelineStart) / 1000).toFixed(1);\n pipelineLoader.update({ text: `[${elapsed}s] ${message}` });\n },\n });\n\n pipelineLoader.succeed(result.success ? 'Release completed' : 'Release failed');\n\n reportPipelineResult(ctx, flags, result, dryRun, skipPublish);\n\n return result.success ? { ok: true, result: { report: result.report } } : { ok: false, error: 'Command failed', result: { report: result.report } };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/changelog-factory.ts","../../../src/shared/dep-rewrite.ts","../../../src/shared/publish-programmatic.ts","../../../src/shared/publish-with-otp.ts","../../../src/cli/commands/run.ts"],"names":["join","readFileSync","writeFileSync","MAX_RETRIES","RETRY_BASE_DELAYS_MS","RETRYABLE_PATTERNS","ALREADY_PUBLISHED_PATTERNS","isRetryable","isAlreadyPublished","retryDelay","spawn","useEnv","readline2","useLoader"],"mappings":"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","file":"run.js","sourcesContent":["/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\nimport { buildReleaseTag } from '@kb-labs/release-manager-core';\nimport type { ILLM } from '@kb-labs/sdk';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: ILLM): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: {\n ...opts.range,\n to: opts.range?.to ?? 'HEAD',\n tagGlob: opts.flow\n ? buildReleaseTag(opts.flow, '*', config.flows?.[opts.flow]?.tagPattern)\n : undefined,\n },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Rewrite a package's own version and workspace:/link: dependency references\n * before `pnpm publish`, so the tarball on disk matches what's about to be\n * published even when that version was never persisted to package.json.\n *\n * - Own version: stable releases already have the target version on disk\n * (written by updatePackageVersions() before this runs), so this is a\n * no-op for them. Canary releases compute nextVersion in-memory only —\n * never committed to package.json/git — so without this, `pnpm publish`\n * would read the OLD on-disk version, and either fail outright or (worse)\n * get misclassified as \"already published\" by the retry/idempotency\n * patterns since that old version genuinely IS already on the registry.\n * - pnpm handles `workspace:*` natively during `pnpm publish` — no rewrite needed.\n * - npm/yarn do NOT — we must replace with `^version` before publish.\n * - `link:` references are never valid on the npm registry — always rewrite.\n *\n * Returns a restore function that reverts package.json to original content.\n * Call it in a finally block to guarantee cleanup.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ── rewriteWorkspaceDeps helpers ──────────────────────────────────────────\n\nfunction rewriteLinkDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n pkgPath: string,\n versionMap: Map<string, string>,\n): void {\n const pinned = versionMap.get(depName);\n if (pinned) {\n deps[depName] = `^${pinned}`;\n return;\n }\n try {\n const linkPath = val.slice('link:'.length);\n const linked = JSON.parse(readFileSync(join(pkgPath, linkPath, 'package.json'), 'utf-8')) as { version?: string };\n deps[depName] = `^${linked.version ?? '*'}`;\n } catch {\n deps[depName] = '*';\n }\n}\n\nfunction rewriteWorkspaceDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n versionMap: Map<string, string>,\n): boolean {\n const pinned = versionMap.get(depName);\n if (!pinned) { return false; }\n const range = val === 'workspace:*' ? '^' : val.slice('workspace:'.length);\n deps[depName] = `${range}${pinned}`;\n return true;\n}\n\nfunction rewriteDepsSection(\n deps: Record<string, string>,\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): boolean {\n let modified = false;\n for (const depName of Object.keys(deps)) {\n const val = deps[depName];\n if (typeof val !== 'string') { continue; }\n if (val.startsWith('link:')) {\n rewriteLinkDep(deps, depName, val, pkgPath, versionMap);\n modified = true;\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm' && rewriteWorkspaceDep(deps, depName, val, versionMap)) {\n modified = true;\n }\n }\n return modified;\n}\n\nexport function rewriteWorkspaceDeps(\n pkg: { path: string; version: string },\n versionMap: Map<string, string>,\n packageManager: string,\n): () => void {\n const pkgPath = pkg.path;\n const pkgJsonPath = join(pkgPath, 'package.json');\n const original = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(original) as Record<string, unknown> & { version?: string };\n let modified = false;\n\n if (pkgJson.version !== pkg.version) {\n pkgJson.version = pkg.version;\n modified = true;\n }\n\n // Every dependency-like section must be rewritten: a published tarball's\n // devDependencies/optionalDependencies\n // field is inert for the *installer* of this package, but npm's own manifest\n // normalization (npm-package-arg validation inside @npmcli/arborist) parses\n // EVERY dependency-like section of every manifest it reads while building the\n // ideal tree — including devDependencies of a package several levels deep in\n // someone else's dependency graph. A leftover \"workspace:*\" there throws\n // EUNSUPPORTEDPROTOCOL and aborts the whole install, not just a devDependency\n // installation that would otherwise be skipped. Confirmed live on\n // @kb-labs/plugin-execution-factory@2.114.0's devDependencies.@kb-labs/gateway-core.\n for (const section of ['dependencies', 'optionalDependencies', 'peerDependencies', 'devDependencies'] as const) {\n const deps = pkgJson[section] as Record<string, string> | undefined;\n if (!deps) { continue; }\n if (rewriteDepsSection(deps, pkgPath, versionMap, packageManager)) { modified = true; }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, original);\n}\n\n// ── topoSort helpers ──────────────────────────────────────────────────────\n\n/**\n * Build a simple topological sort of packages for publish order.\n *\n * Packages are grouped into \"waves\": wave 0 has no intra-release deps,\n * wave 1 depends only on wave 0, etc. Within each wave publish order\n * is arbitrary (safe to parallelise).\n *\n * Cycles (should not exist in a well-formed monorepo) fall into a\n * \"remainder\" group appended at the end.\n */\nexport interface TopoPackage {\n name: string;\n path: string;\n version: string;\n}\n\nfunction buildIntraDeps(packages: TopoPackage[], nameSet: Set<string>): Map<string, Set<string>> {\n const deps = new Map<string, Set<string>>();\n for (const pkg of packages) {\n const intra = new Set<string>();\n try {\n const pkgJson = JSON.parse(readFileSync(join(pkg.path, 'package.json'), 'utf-8')) as {\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n for (const depName of Object.keys(pkgJson[section] ?? {})) {\n if (nameSet.has(depName)) { intra.add(depName); }\n }\n }\n } catch {\n // If we can't read package.json, treat as no deps\n }\n deps.set(pkg.name, intra);\n }\n return deps;\n}\n\nfunction buildDependantsMap(packages: TopoPackage[], deps: Map<string, Set<string>>): Map<string, Set<string>> {\n const dependants = new Map<string, Set<string>>();\n for (const pkg of packages) {\n for (const dep of deps.get(pkg.name) ?? []) {\n if (!dependants.has(dep)) { dependants.set(dep, new Set()); }\n dependants.get(dep)!.add(pkg.name);\n }\n }\n return dependants;\n}\n\nfunction computeWaves(\n packages: TopoPackage[],\n deps: Map<string, Set<string>>,\n dependants: Map<string, Set<string>>,\n): TopoPackage[][] {\n const byName = new Map(packages.map(p => [p.name, p]));\n const remaining = new Map<string, number>(\n packages.map(p => [p.name, (deps.get(p.name) ?? new Set()).size])\n );\n const waves: TopoPackage[][] = [];\n\n while (remaining.size > 0) {\n const wave = [...remaining.entries()]\n .filter(([, count]) => count === 0)\n .map(([name]) => byName.get(name)!);\n\n if (wave.length === 0) {\n waves.push([...remaining.keys()].map(n => byName.get(n)!));\n break;\n }\n\n waves.push(wave);\n for (const pkg of wave) {\n remaining.delete(pkg.name);\n for (const dependant of dependants.get(pkg.name) ?? []) {\n if (remaining.has(dependant)) {\n remaining.set(dependant, (remaining.get(dependant) ?? 1) - 1);\n }\n }\n }\n }\n\n return waves.filter(w => w.length > 0);\n}\n\nexport function topoSort(packages: TopoPackage[], _packageManager: string): TopoPackage[][] {\n const nameSet = new Set(packages.map(p => p.name));\n const deps = buildIntraDeps(packages, nameSet);\n const dependants = buildDependantsMap(packages, deps);\n return computeWaves(packages, deps, dependants);\n}\n","/**\n * Programmatic npm publishing for REST handlers (non-interactive context).\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n *\n * Reliability guarantees:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - 429 rate-limit: exponential back-off with jitter, up to MAX_RETRIES attempts.\n * - Transient network errors (ECONNRESET, ETIMEDOUT, etc.) are also retried.\n * - Packages are published in topological order (deps before dependants).\n * - Default concurrency is 4 — enough throughput, low enough to avoid rate limits.\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps, topoSort } from './dep-rewrite';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n /**\n * Pre-built tarball to publish instead of packing fresh from `path`\n * (produced by `release stage` — see stage.ts). When set, `path` is\n * only used as the cwd for npm's `.npmrc` auth lookup — no\n * `rewriteWorkspaceDeps` mutation happens, since the tarball's\n * package.json is already final and must ship byte-for-byte unchanged.\n */\n tarballPath?: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n /** Package was already published at this version — counted as success. */\n alreadyPublished?: boolean;\n error?: string;\n /** npm's own error code (e.g. \"E403\"), extracted from its stderr, when recognizable. */\n errorCode?: string;\n /** Actionable, human-readable explanation for errorCode — see NPM_ERROR_HINTS. */\n errorHint?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n /** Versions that were already on npm (counted as success). */\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry configuration\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\n\n// Exponential base delays (ms). Actual delay = base * jitter(0.8–1.2).\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\n/** Retryable error patterns — all transient, not indicative of a bad package. */\nconst RETRYABLE_PATTERNS = [\n 'E429',\n '429 Too Many Requests',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'ECONNREFUSED',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'socket hang up',\n 'network timeout',\n 'read ECONNRESET',\n];\n\n/** \"Already published\" — treat as success so re-runs are idempotent. */\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n // Some registries return 403 for conflicts\n];\n\nfunction isRetryable(message: string): boolean {\n return RETRYABLE_PATTERNS.some(p => message.includes(p));\n}\n\nfunction isAlreadyPublished(message: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => message.includes(p));\n}\n\n/**\n * Human-readable hints per npm error code — surfaced directly in the\n * delivery report so a permanent failure doesn't require digging through\n * raw CI logs to tell \"our token is broken\" apart from \"npm has flagged\n * this specific package,\" which look identical (both E403) but need\n * completely different fixes.\n */\nconst NPM_ERROR_HINTS: Record<string, string> = {\n E403: 'npm rejected the publish (403). If other packages in the same run succeeded with the same token, this is almost certainly an npm-side restriction on this specific package/account entry (e.g. a security hold), not a token or code problem — check npmjs.com directly or contact npm support. Retrying will not help until that is resolved.',\n E401: 'Authentication failed (401) — NPM_TOKEN/NODE_AUTH_TOKEN is missing, expired, or invalid for this registry.',\n E404: 'Registry returned 404 — check the registry URL and that the package name/scope is correct and accessible with this token.',\n EOTP: 'npm requires a one-time password for this publish — programmatic (token-based) delivery cannot supply one; this package needs an interactive `npm publish` from a human, or a token exempt from OTP.',\n};\n\n/** Extract the npm CLI's own error code (e.g. \"E403\") from its stderr, if present. */\nfunction extractNpmErrorCode(message: string): string | undefined {\n const match = message.match(/\\bnpm error code (E[A-Z0-9]+)\\b/);\n return match?.[1];\n}\n\n/** Classify a permanent publish failure into a code + actionable hint, when recognizable. */\nfunction classifyPublishError(message: string): { code?: string; hint?: string } {\n const code = extractNpmErrorCode(message);\n const hint = code ? NPM_ERROR_HINTS[code] : undefined;\n return { code, hint };\n}\n\n/** Exponential back-off with ±20% jitter. */\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4; // 0.8 – 1.2\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Token resolution\n// ---------------------------------------------------------------------------\n\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\n/**\n * Spawn `packageManager publish` for a single package.\n * Writes a temporary .npmrc for NODE_AUTH_TOKEN auth, cleans it up on exit.\n */\nfunction spawnPublish(options: {\n packagePath: string;\n /** Publish this exact tarball instead of packing `packagePath` fresh. */\n tarballPath?: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, tarballPath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n if (tarballPath) { args.push(tarballPath); }\n\n if (packageManager === 'pnpm' && !tarballPath) {\n // pnpm checks git cleanliness; we version-bump before publish which makes\n // the tree dirty — bypass that check. N/A when publishing a pre-built\n // tarball — there's no working-tree state for pnpm to check.\n args.push('--no-git-checks');\n }\n if (dryRun) { args.push('--dry-run'); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n if (otp) { args.push(`--otp=${otp}`); }\n\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) { env['NODE_AUTH_TOKEN'] = token; }\n\n // Write a per-package .npmrc so npm picks up NODE_AUTH_TOKEN.\n // The auth line's host must match the target registry — hardcoding\n // registry.npmjs.org here would silently break token auth against\n // Verdaccio or any other non-npmjs registry.\n const npmrcPath = join(packagePath, '.npmrc');\n const npmrcExisted = existsSync(npmrcPath);\n const npmrcBackup = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : null;\n const registryHost = registry ? new URL(registry).host : 'registry.npmjs.org';\n const authLine = `//${registryHost}/:_authToken=\\${NODE_AUTH_TOKEN}\\n`;\n\n if (token) {\n const existing = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : '';\n if (!existing.includes('_authToken')) {\n writeFileSync(npmrcPath, existing + authLine);\n }\n }\n\n const restoreNpmrc = () => {\n if (!token) { return; }\n try {\n if (npmrcBackup !== null) {\n writeFileSync(npmrcPath, npmrcBackup);\n } else if (existsSync(npmrcPath)) {\n unlinkSync(npmrcPath);\n }\n } catch { /* best-effort */ }\n };\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n restoreNpmrc();\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n restoreNpmrc();\n reject(err);\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-package publish with retry\n// ---------------------------------------------------------------------------\n\nasync function publishOne(\n pkg: PackageToPublish,\n opts: {\n packageManager: string;\n token: string | undefined;\n versionMap: Map<string, string>;\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n },\n logger: ReturnType<typeof useLogger>,\n): Promise<PublishResult> {\n // A pre-built tarball (see PackageToPublish.tarballPath) is already final\n // — publishing it must ship those exact bytes, so skip the package.json\n // rewrite entirely rather than mutating a directory whose content the\n // tarball no longer reflects.\n const restore = pkg.tarballPath ? (() => {}) : rewriteWorkspaceDeps(pkg, opts.versionMap, opts.packageManager);\n\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await spawnPublish({\n packagePath: pkg.path,\n tarballPath: pkg.tarballPath,\n packageManager: opts.packageManager,\n token: opts.token,\n otp: opts.otp,\n dryRun: opts.dryRun,\n tag: opts.tag,\n access: opts.access,\n registry: opts.registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n\n // Idempotency: already published at this version → success.\n if (isAlreadyPublished(message)) {\n logger.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n\n // Retryable transient error (rate-limit, network blip).\n if (isRetryable(message) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger.warn(\n `Transient error for ${pkg.name}@${pkg.version} (attempt ${attempt + 1}/${MAX_RETRIES}), ` +\n `retrying in ${(delay / 1000).toFixed(1)}s: ${message.split('\\n')[0]}`,\n );\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n\n // Permanent failure.\n const { code, hint } = classifyPublishError(message);\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message, errorCode: code });\n return { name: pkg.name, version: pkg.version, success: false, error: message, errorCode: code, errorHint: hint };\n }\n }\n\n // Exhausted retries.\n return {\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: `Publish failed after ${MAX_RETRIES} retries (transient errors)`,\n };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nfunction skipRemainingWaves(\n waves: ReturnType<typeof topoSort>,\n waveIdx: number,\n waveFailed: PublishResult[],\n logger: ReturnType<typeof useLogger>,\n allResults: PublishResult[],\n): void {\n const remaining = waves.slice(waveIdx + 1).reduce((acc, w) => acc + w.length, 0);\n if (remaining === 0) { return; }\n logger.warn(\n `Wave ${waveIdx + 1} had ${waveFailed.length} failure(s) — ` +\n `skipping ${remaining} package(s) in later waves to avoid broken dependency chain`,\n );\n for (const laterWave of waves.slice(waveIdx + 1)) {\n for (const pkg of laterWave) {\n allResults.push({ name: pkg.name, version: pkg.version, success: false, error: 'Skipped: dependency wave failed' });\n }\n }\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers / CI).\n *\n * Packages are published in topological order (deps before dependants) to\n * avoid \"package not found\" errors when a dependent is installed right after\n * release. Within each topological wave, publishes run in parallel up to\n * CONCURRENCY.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions,\n): Promise<ProgrammaticPublishResult> {\n const {\n packages,\n packageManager = 'pnpm',\n dryRun,\n otp,\n tag,\n access,\n registry,\n } = options;\n\n const logger = useLogger();\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n alreadyPublished: [],\n failed: packages.map(p => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Version map for dep rewriting (workspace:/link: → ^version).\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Concurrency: default 4 — enough throughput, below npm's sustained rate limit.\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n\n // Sort packages into topological waves so deps are always published first.\n const waves = topoSort(packages, packageManager);\n\n logger.info(\n `Publishing ${packages.length} package(s) in ${waves.length} topological wave(s) ` +\n `(concurrency=${CONCURRENCY}, dryRun=${dryRun ?? false})`,\n );\n\n const allResults: PublishResult[] = [];\n\n for (let waveIdx = 0; waveIdx < waves.length; waveIdx++) {\n const wave = waves[waveIdx]!;\n logger.info(`Wave ${waveIdx + 1}/${waves.length}: publishing ${wave.length} package(s)`);\n\n // Publish wave in parallel batches.\n for (let i = 0; i < wave.length; i += CONCURRENCY) {\n const batch = wave.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(\n batch.map(pkg =>\n publishOne(pkg, { packageManager, token, versionMap, dryRun, otp, tag, access, registry }, logger),\n ),\n );\n allResults.push(...batchResults);\n }\n\n // If any package in this wave genuinely failed (not alreadyPublished), stop\n // publishing the next wave — it may depend on the failed packages.\n const waveFailed = allResults.slice(-wave.length).filter(r => !r.success);\n if (waveFailed.length > 0) {\n skipRemainingWaves(waves, waveIdx, waveFailed, logger, allResults);\n break;\n }\n }\n\n const published = allResults.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const alreadyPublished = allResults.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const failed = allResults.filter(r => !r.success).map(r => `${r.name}@${r.version}`);\n const errors = allResults.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`);\n\n if (alreadyPublished.length > 0) {\n logger.info(`${alreadyPublished.length} package(s) already published — counted as success`);\n }\n\n return {\n results: allResults,\n published,\n alreadyPublished,\n failed,\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared publishing logic with interactive OTP support.\n * Used by both `release:run` and `release publish` commands.\n *\n * Flow:\n * 1. Optimistic parallel publish (fast-path, works when OTP is not required).\n * 2. On EOTP: fall back to sequential publish with interactive OTP prompt.\n *\n * Reliability:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - Transient errors (429, ECONNRESET, etc.) are retried with exponential back-off + jitter.\n * - dep rewriting (workspace:/link: → ^version) is handled by shared dep-rewrite utility.\n */\n\nimport { spawn } from 'node:child_process';\nimport * as readline from 'node:readline/promises';\nimport { useLoader, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps } from './dep-rewrite';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface PublishWithOTPOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n ui: {\n write?: (text: string) => void;\n };\n logger?: {\n info: (msg: string, meta?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, error?: Error, meta?: Record<string, unknown>) => void;\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry helpers (shared with publish-programmatic)\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\nconst RETRYABLE_PATTERNS = [\n 'E429', '429 Too Many Requests',\n 'ECONNRESET', 'ETIMEDOUT', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN',\n 'socket hang up', 'network timeout', 'read ECONNRESET',\n];\n\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n];\n\nfunction isRetryable(msg: string): boolean {\n return RETRYABLE_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction isAlreadyPublished(msg: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4;\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\ninterface PublishSingleOptions {\n packagePath: string;\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}\n\nfunction publishSinglePackage(options: PublishSingleOptions): Promise<void> {\n const { packagePath, packageManager = 'pnpm', otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (packageManager === 'pnpm') { args.push('--no-git-checks'); }\n if (dryRun) { args.push('--dry-run'); }\n if (otp) { args.push(`--otp=${otp}`); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: true,\n });\n\n let stdout = '';\n let stderr = '';\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => reject(err));\n });\n}\n\n// ---------------------------------------------------------------------------\n// Fast-path helpers\n// ---------------------------------------------------------------------------\n\ninterface FastPublishContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}\n\ninterface FastPublishOutcome {\n result: PublishResult | null; // null = needs OTP sequential path\n otpFailed: boolean;\n}\n\nasync function fastPublishPkg(\n pkg: PackageToPublish,\n ctx: FastPublishContext,\n logger: PublishWithOTPOptions['logger'],\n): Promise<FastPublishOutcome> {\n const restore = rewriteWorkspaceDeps(pkg, ctx.versionMap, ctx.packageManager);\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: ctx.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access, registry: ctx.registry });\n logger?.info('Published (fast-path)', { name: pkg.name, version: pkg.version });\n return { result: { name: pkg.name, version: pkg.version, success: true }, otpFailed: false };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n logger?.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { result: { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true }, otpFailed: false };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n return { result: null, otpFailed: true };\n }\n if (isRetryable(msg) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger?.warn(`Transient error for ${pkg.name} (attempt ${attempt + 1}/${MAX_RETRIES}), retrying in ${(delay / 1000).toFixed(1)}s`);\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n logger?.error('Publish failed (fast-path)', undefined, { name: pkg.name, error: msg });\n return { result: { name: pkg.name, version: pkg.version, success: false, error: msg }, otpFailed: false };\n }\n }\n return { result: { name: pkg.name, version: pkg.version, success: false, error: `Publish failed after ${MAX_RETRIES} retries (transient errors)` }, otpFailed: false };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Sequential OTP path helpers\n// ---------------------------------------------------------------------------\n\ninterface OtpState { otp?: string; }\n\nasync function promptForOtp(\n ui: PublishWithOTPOptions['ui'],\n loader: ReturnType<typeof useLoader>,\n pkgName: string,\n): Promise<string | undefined> {\n loader.succeed(`🔐 2FA required for ${pkgName}`);\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n try {\n const entered = await rl.question(' Enter OTP code: ');\n rl.close();\n if (!entered || entered.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP (must be 6 digits)\\n');\n return undefined;\n }\n return entered.trim();\n } catch (e) {\n rl.close();\n throw e;\n }\n}\n\ninterface SequentialContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}\n\nasync function sequentialPublishPkg(\n pkg: PackageToPublish,\n ctx: SequentialContext,\n otpState: OtpState,\n ui: PublishWithOTPOptions['ui'],\n logger: PublishWithOTPOptions['logger'],\n): Promise<PublishResult> {\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n const restore = rewriteWorkspaceDeps(pkg, ctx.versionMap, ctx.packageManager);\n try {\n const MAX_OTP_ATTEMPTS = 3;\n for (let otpAttempts = 0; otpAttempts < MAX_OTP_ATTEMPTS; otpAttempts++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: otpState.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access, registry: ctx.registry });\n loader.succeed(ctx.dryRun ? `Dry-run: ${pkg.name}@${pkg.version}` : `Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n loader.succeed(`${pkg.name}@${pkg.version} already published`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n if (otpAttempts + 1 < MAX_OTP_ATTEMPTS) {\n otpState.otp = await promptForOtp(ui, loader, pkg.name);\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n } else {\n loader.fail('Max OTP attempts reached');\n return { name: pkg.name, version: pkg.version, success: false, error: 'Max OTP attempts reached' };\n }\n } else if (isRetryable(msg)) {\n const delay = retryDelay(MAX_RETRIES - 1);\n loader.update({ text: `Rate limited — waiting ${(delay / 1000).toFixed(0)}s…` });\n loader.start();\n await new Promise<void>(r => { setTimeout(r, delay); });\n otpAttempts--; // don't count transient error as an OTP attempt\n } else {\n loader.fail(`Failed: ${msg.split('\\n')[0]}`);\n return { name: pkg.name, version: pkg.version, success: false, error: msg };\n }\n }\n }\n return { name: pkg.name, version: pkg.version, success: false, error: 'Publish failed after max OTP attempts' };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\n/**\n * Publish packages with interactive OTP support.\n *\n * Tries parallel optimistic publish first. On EOTP, falls back to sequential\n * publish with interactive OTP prompt.\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions,\n): Promise<PublishWithOTPResult> {\n const { packages, packageManager = 'pnpm', dryRun, tag, access, registry, ui, logger } = options;\n const otpState: OtpState = { otp: options.otp };\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n const fastCtx: FastPublishContext = { packageManager, versionMap, otp: otpState.otp, dryRun, tag, access, registry };\n const seqCtx: SequentialContext = { packageManager, versionMap, dryRun, tag, access, registry };\n\n const results: PublishResult[] = [];\n const remaining: PackageToPublish[] = [];\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n let otpFailureDetected = false;\n\n ui.write?.(` Publishing ${packages.length} package(s) in parallel (concurrency=${CONCURRENCY})...\\n`);\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const outcomes = await Promise.all(batch.map(pkg => fastPublishPkg(pkg, fastCtx, logger)));\n for (let j = 0; j < batch.length; j++) {\n const outcome = outcomes[j]!;\n if (outcome.result === null) { remaining.push(batch[j]!); } else { results.push(outcome.result); }\n if (outcome.otpFailed) { otpFailureDetected = true; }\n }\n if (otpFailureDetected) {\n remaining.push(...packages.slice(i + CONCURRENCY));\n break;\n }\n }\n\n if (remaining.length === 0) { return buildResult(results, packages, dryRun); }\n\n ui.write?.(` OTP required — falling back to sequential publish for ${remaining.length} package(s)\\n`);\n for (const pkg of remaining) {\n logger?.info('Publishing package (sequential)', { name: pkg.name, version: pkg.version });\n results.push(await sequentialPublishPkg(pkg, seqCtx, otpState, ui, logger));\n }\n\n return buildResult(results, packages, dryRun);\n}\n\nfunction buildResult(\n results: PublishResult[],\n packages: PackageToPublish[],\n dryRun?: boolean,\n): PublishWithOTPResult {\n return {\n results,\n published: results.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n alreadyPublished: results.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n failed: results.filter(r => !r.success).map(r => `${r.name}@${r.version}`),\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors: results.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`),\n };\n}\n","/**\n * Release run command — thin adapter over core runReleasePipeline().\n * Mirror of rest/handlers/run-handler.ts for CLI context.\n *\n * Flow:\n * 1. Load config\n * 2. Plan (discover packages, compute versions)\n * 3. Show plan table + confirm [y/N] (skipped with --yes or --dry-run)\n * 4. Execute pipeline with elapsed-time progress\n */\n\nimport * as readline from 'node:readline/promises';\nimport {\n defineCommand,\n type CLIInput,\n type CommandResult,\n type PluginContextV3,\n useLLM,\n useLoader,\n useConfig,\n useEnv,\n} from '@kb-labs/sdk';\nimport {\n runReleasePipeline,\n planRelease,\n resolveScopePath,\n resolvePublishRegistry,\n type ReleaseConfig,\n type ReleaseChannel,\n type ReleaseReport,\n type CheckResult,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { publishPackagesWithOTP } from '../../shared/publish-with-otp';\n\ninterface RunFlags {\n scope?: string;\n flow?: string;\n bump?: 'patch' | 'minor' | 'major' | 'auto';\n strict?: boolean;\n channel?: ReleaseChannel;\n 'dry-run'?: boolean;\n 'skip-checks'?: boolean;\n 'skip-build'?: boolean;\n 'skip-verify'?: boolean;\n 'skip-publish'?: boolean;\n 'no-verify'?: boolean;\n yes?: boolean;\n json?: boolean;\n}\n\ntype ReleaseRunResult = CommandResult<unknown>;\n\nconst BUMP_SYMBOL: Record<string, string> = {\n major: '!!',\n minor: '+',\n patch: '·',\n auto: '?',\n};\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\nfunction buildPlanRows(packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }>): string[] {\n return packages.map(pkg => {\n const bump = pkg.bump ?? 'auto';\n const sym = BUMP_SYMBOL[bump] ?? '?';\n return ` ${sym} ${pkg.name.padEnd(40)} ${pkg.currentVersion.padStart(8)} → ${pkg.nextVersion}`;\n });\n}\n\nfunction createPublisher(\n config: ReleaseConfig,\n token: string | undefined,\n ctx: PluginContextV3,\n): { publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string; tag?: string; registry?: string }): Promise<PublishResult> } {\n const packageManager = config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm';\n return {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string; tag?: string; registry?: string }): Promise<PublishResult> {\n // registry/tag come from pipeline.ts, resolved per-channel from config\n // (config.registry for stable, config.publish.npmRegistry for canary).\n const registry = opts.registry ?? config.registry;\n if (token) {\n const r = await publishPackagesProgrammatic({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: (opts.access as 'public' | 'restricted') ?? 'public',\n tag: opts.tag,\n registry,\n token,\n });\n return { published: r.published, alreadyPublished: r.alreadyPublished, failed: r.failed, skipped: r.skipped, errors: r.errors };\n }\n // PublishWithOTPResult is structurally compatible with core PublishResult\n // (both have published/alreadyPublished/failed/skipped). Double-cast to satisfy\n // the return type without widening to any.\n return publishPackagesWithOTP({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: opts.access ?? 'public',\n tag: opts.tag,\n registry,\n ui: ctx.ui,\n logger: ctx.platform?.logger,\n }) as unknown as Promise<PublishResult>;\n },\n };\n}\n\nfunction appendCheckDetails(c: CheckResult, checkItems: string[]): void {\n if (c.details?.packagePath) { checkItems.push(` package: ${c.details.packagePath}`); }\n if (c.details?.error) { checkItems.push(` reason: ${c.details.error}`); }\n const output = (c.details?.stderr || c.details?.stdout || '').trim();\n if (output) {\n checkItems.push(` output:`);\n for (const line of output.split('\\n').slice(0, 8)) { checkItems.push(` ${line}`); }\n }\n const failedPkgs = (c.packages ?? []).filter(p => !p.ok);\n if (failedPkgs.length) {\n checkItems.push(` failed in ${failedPkgs.length}/${c.packages!.length} package(s):`);\n for (const pkg of failedPkgs.slice(0, 10)) {\n checkItems.push(` - ${pkg.path}${pkg.details?.error ? `: ${pkg.details.error}` : ''}`);\n }\n }\n}\n\nfunction buildCheckItems(checkEntries: CheckResult[], symbols: { success: string; warning: string; error: string }): string[] {\n const checkItems: string[] = [];\n for (const c of checkEntries) {\n const sym = c.ok ? symbols.success : (c.hint === 'optional' ? symbols.warning : symbols.error);\n const timing = c.timingMs ? ` (${(c.timingMs / 1000).toFixed(1)}s)` : '';\n checkItems.push(`${sym} ${c.id}${timing}`);\n if (!c.ok && c.hint !== 'optional') { appendCheckDetails(c, checkItems); }\n }\n return checkItems;\n}\n\nfunction buildReleaseSections(\n report: ReleaseReport,\n dryRun: boolean,\n skipPublish: boolean,\n ctx: PluginContextV3,\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n if (!dryRun && report.result.published?.length) {\n sections.push({\n header: 'Published',\n items: report.result.published.map(p => `${ctx.ui.symbols.success} ${p}`),\n });\n }\n\n if (!dryRun && report.result.alreadyPublished?.length) {\n sections.push({\n header: 'Already published (skipped)',\n items: report.result.alreadyPublished.map(p => `${ctx.ui.symbols.info} ${p}`),\n });\n }\n\n if (dryRun && report.result.skipped?.length) {\n sections.push({\n header: 'Would publish (dry-run)',\n items: report.result.skipped.map(p => `${ctx.ui.symbols.info} ${p.replace(' (dry-run)', '')}`),\n });\n }\n\n if (!dryRun && skipPublish && report.result.skipped?.length) {\n sections.push({\n header: 'Prepared — not published (git tag pushed, CI publishes on tag)',\n items: report.result.skipped.map(p => `${ctx.ui.symbols.info} ${p}`),\n });\n }\n\n if (report.result.checks) {\n const checkEntries = (Object.values(report.result.checks) as CheckResult[]).filter(Boolean);\n const passed = checkEntries.filter(c => c.ok);\n const failed = checkEntries.filter(c => !c.ok && c.hint !== 'optional');\n const skipped = checkEntries.filter(c => !c.ok && c.hint === 'optional');\n\n if (checkEntries.length > 0) {\n sections.push({\n header: `Checks — ${passed.length} passed, ${failed.length} failed${skipped.length ? `, ${skipped.length} skipped` : ''}`,\n items: buildCheckItems(checkEntries, ctx.ui.symbols),\n });\n }\n }\n\n if (report.result.errors?.length && !report.result.checks) {\n sections.push({\n header: 'Errors',\n items: report.result.errors.map(e => `${ctx.ui.symbols.error} ${e}`),\n });\n }\n\n if (report.result.git) {\n const g = report.result.git;\n sections.push({\n header: 'Git',\n items: [\n `Committed: ${g.committed}`,\n `Tags: ${g.tagged?.join(', ') || 'none'}`,\n `Pushed: ${g.pushed}`,\n ],\n });\n }\n\n return sections;\n}\n\nfunction resolveChecks(flags: RunFlags, config: ReleaseConfig): NonNullable<ReleaseConfig['checks']> {\n const flowChecks = flags.flow ? config.flows?.[flags.flow]?.checks : undefined;\n const scopeChecks = flags.scope ? config.scopes?.[flags.scope]?.checks : undefined;\n const selectedChecks = flowChecks ?? scopeChecks ?? [];\n const checksById = new Map<string, NonNullable<ReleaseConfig['checks']>[number]>();\n\n // Flow/scope checks are additions to the global release contract. A flow may\n // replace a check with a stricter command, but it may not silently drop a\n // global gate (the old behavior made platform releases skip typecheck,\n // lint, tests and pack-install).\n for (const check of config.checks ?? []) { checksById.set(check.id, check); }\n for (const check of selectedChecks) { checksById.set(check.id, check); }\n\n const channel = flags.channel ?? config.channel ?? 'stable';\n return [...checksById.values()].map(check =>\n channel === 'stable' && check.optional ? { ...check, optional: false } : check,\n );\n}\n\nasync function confirmRelease(): Promise<boolean> {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n let answer: string;\n try {\n answer = await rl.question('\\nProceed with release? [y/N] ');\n } finally {\n rl.close();\n }\n return answer.trim().toLowerCase() === 'y';\n}\n\nfunction showPlanBox(\n ctx: PluginContextV3,\n flags: RunFlags,\n plan: { packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }> },\n config: ReleaseConfig,\n dryRun: boolean,\n): void {\n if (flags.json) { return; }\n ctx.ui?.sideBox?.({\n title: dryRun ? 'Release Plan (dry-run)' : 'Release Plan',\n sections: [\n {\n header: `${plan.packages.length} package(s) · strategy: ${config.versioningStrategy ?? 'independent'}${flags.flow ? ` · flow: ${flags.flow}` : ''}`,\n items: buildPlanRows(plan.packages),\n },\n ],\n status: 'info',\n });\n if (flags['no-verify']) {\n ctx.ui.write?.(` ⚠️ --no-verify: git pre-push hooks will be skipped\\n`);\n }\n}\n\nfunction reportPipelineResult(\n ctx: PluginContextV3,\n flags: RunFlags,\n result: { success: boolean; report: ReleaseReport },\n dryRun: boolean,\n skipPublish: boolean,\n): void {\n if (flags.json) {\n ctx.ui?.json?.(result.report);\n return;\n }\n ctx.ui?.sideBox?.({\n title: 'Release',\n sections: buildReleaseSections(result.report, dryRun, skipPublish, ctx),\n status: result.success ? 'success' : 'error',\n timing: result.report.result.timingMs,\n });\n}\n\nexport default defineCommand({\n id: 'release:run',\n description: 'Execute release process (plan, check, publish)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<RunFlags>): Promise<ReleaseRunResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const dryRun = flags['dry-run'] === true;\n const skipYes = flags.yes === true || dryRun;\n\n // 1. Load config\n const configLoader = useLoader('Loading configuration...');\n configLoader.start();\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = {\n ...fileConfig,\n ...(flags.bump && { bump: flags.bump }),\n ...(flags.strict !== undefined && { strict: flags.strict }),\n ...(flags.channel && { channel: flags.channel }),\n };\n configLoader.succeed('Configuration loaded');\n\n const channel: ReleaseChannel = config.channel ?? 'stable';\n const skipPublish = flags['skip-publish'] === true;\n const token = useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n\n // 1b. Pre-flight — fail fast before planning (which is slow).\n // The npm-credentials check is skipped entirely in prepare-only mode:\n // no npm access is needed to build, version, changelog, and git-tag a\n // release. The separate `kb release promote` step (run by CI on the\n // tag this pushes) does its own npm pre-flight. Flow validity is\n // always checked, publish or not.\n if (!dryRun) {\n const preErrors: string[] = [];\n\n if (!skipPublish) {\n const registry = resolvePublishRegistry(config, channel);\n if (!token) {\n preErrors.push('NPM_TOKEN or NODE_AUTH_TOKEN is not set');\n } else {\n try {\n const res = await fetch(`${registry}/-/whoami`, {\n headers: { Authorization: `Bearer ${token}` },\n signal: AbortSignal.timeout(8000),\n });\n if (!res.ok) {\n preErrors.push(`npm token invalid or expired (HTTP ${res.status} from ${registry})`);\n }\n } catch (e) {\n preErrors.push(`npm registry unreachable: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n }\n\n if (flags.flow && config.flows && !(flags.flow in config.flows)) {\n preErrors.push(`Flow \"${flags.flow}\" is not defined in release.flows config`);\n }\n\n if (preErrors.length > 0) {\n ctx.ui?.sideBox?.({\n title: 'Release — pre-flight failed',\n sections: [{ items: preErrors.map(e => `${ctx.ui.symbols.error} ${e}`) }],\n status: 'error',\n });\n return { ok: false, error: 'Command failed' };\n }\n }\n\n const scopeCwd = await resolveScopePath(repoRoot, flags.scope || 'root');\n\n // 2. Plan — run separately so we can show it before asking for confirm\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({\n cwd: repoRoot,\n config,\n scope: flags.scope,\n flow: flags.flow,\n // config.bump is already VersionBump | undefined — same type as bumpOverride\n bumpOverride: config.bump,\n channel,\n });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n if (plan.packages.length === 0) {\n ctx.ui?.sideBox?.({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.warning} No packages to release`] }],\n status: 'info',\n });\n return { ok: true };\n }\n\n // 3. Show plan table\n showPlanBox(ctx, flags, plan, config, dryRun);\n\n // 4. Confirm (skip with --yes or --dry-run)\n if (!skipYes) {\n const confirmed = await confirmRelease();\n if (!confirmed) {\n ctx.ui?.sideBox?.({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.info} Cancelled`] }],\n status: 'info',\n });\n return { ok: true };\n }\n }\n\n // 5. Execute pipeline\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n const publisher = createPublisher(config, token, ctx);\n\n const pipelineLoader = useLoader('Running release pipeline...');\n pipelineLoader.start();\n\n const pipelineStart = Date.now();\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope: flags.scope,\n flow: flags.flow,\n config,\n dryRun,\n skipChecks: flags['skip-checks'],\n skipBuild: flags['skip-build'],\n skipVerify: flags['skip-verify'],\n skipPublish,\n noVerify: flags['no-verify'],\n checks: resolveChecks(flags, config),\n publisher,\n changelog,\n shell: ctx.api.shell,\n logger: ctx.platform?.logger,\n onProgress: (_stage, message) => {\n const elapsed = ((Date.now() - pipelineStart) / 1000).toFixed(1);\n pipelineLoader.update({ text: `[${elapsed}s] ${message}` });\n },\n });\n\n pipelineLoader.succeed(result.success ? 'Release completed' : 'Release failed');\n\n reportPipelineResult(ctx, flags, result, dryRun, skipPublish);\n\n return result.success ? { ok: true, result: { report: result.report } } : { ok: false, error: 'Command failed', result: { report: result.report } };\n },\n },\n});\n"]}