@tiangong-lca/cli 0.0.6 → 0.0.7

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 (58) hide show
  1. package/README.md +73 -30
  2. package/dist/src/cli.js +912 -113
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/lib/dataset-local.js +231 -0
  5. package/dist/src/lib/dataset-local.js.map +1 -0
  6. package/dist/src/lib/dataset-references-rewrite.js +214 -0
  7. package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
  8. package/dist/src/lib/dataset-validate.js +191 -0
  9. package/dist/src/lib/dataset-validate.js.map +1 -0
  10. package/dist/src/lib/flow-regen-product.js +2 -10
  11. package/dist/src/lib/flow-regen-product.js.map +1 -1
  12. package/dist/src/lib/flow-remediate.js +4 -8
  13. package/dist/src/lib/flow-remediate.js.map +1 -1
  14. package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
  15. package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
  16. package/dist/src/lib/lifecyclemodel-graph.js +248 -0
  17. package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
  18. package/dist/src/lib/lifecyclemodel-publish-build.js +1 -1
  19. package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
  20. package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
  21. package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
  22. package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
  23. package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
  24. package/dist/src/lib/process-auto-build.js +11 -8
  25. package/dist/src/lib/process-auto-build.js.map +1 -1
  26. package/dist/src/lib/process-batch-build.js +6 -3
  27. package/dist/src/lib/process-batch-build.js.map +1 -1
  28. package/dist/src/lib/process-dedup-review.js +870 -0
  29. package/dist/src/lib/process-dedup-review.js.map +1 -0
  30. package/dist/src/lib/process-payload-validation.js +50 -0
  31. package/dist/src/lib/process-payload-validation.js.map +1 -0
  32. package/dist/src/lib/process-publish-build.js +4 -6
  33. package/dist/src/lib/process-publish-build.js.map +1 -1
  34. package/dist/src/lib/process-refresh-references.js +1028 -0
  35. package/dist/src/lib/process-refresh-references.js.map +1 -0
  36. package/dist/src/lib/process-resume-build.js +4 -6
  37. package/dist/src/lib/process-resume-build.js.map +1 -1
  38. package/dist/src/lib/process-save-draft-run.js +31 -12
  39. package/dist/src/lib/process-save-draft-run.js.map +1 -1
  40. package/dist/src/lib/process-scope-statistics.js +859 -0
  41. package/dist/src/lib/process-scope-statistics.js.map +1 -0
  42. package/dist/src/lib/process-verify-rows.js +250 -0
  43. package/dist/src/lib/process-verify-rows.js.map +1 -0
  44. package/dist/src/lib/publish.js +1 -1
  45. package/dist/src/lib/publish.js.map +1 -1
  46. package/dist/src/lib/remote.js +4 -4
  47. package/dist/src/lib/remote.js.map +1 -1
  48. package/dist/src/lib/review-lifecyclemodel.js +2 -2
  49. package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
  50. package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
  51. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
  52. package/dist/src/lib/tidas-sdk-validation.js +96 -0
  53. package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
  54. package/dist/src/lib/user-api-key.js +1 -1
  55. package/dist/src/lib/user-api-key.js.map +1 -1
  56. package/package.json +4 -4
  57. /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
  58. /package/bin/{tiangong.js → tiangong-lca.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"flow-regen-product.js","sourceRoot":"","sources":["../../../src/lib/flow-regen-product.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,aAAa,GAGd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,oBAAoB,GAAG;IAC3B,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,cAAc;IACd,eAAe;IACf,KAAK;CACG,CAAC;AAqUX,SAAS,kBAAkB;IACzB,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,8BAA8B,CACrC,SAAyB,EACzB,UAAoB;IAEpB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAqB,CAAC;YACxD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;gBAC/C,OAAO;oBACL,GAAG,MAAM;oBACT,QAAQ,EAAE,SAAS;iBACpB,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,2CAA2C,SAAS,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,kBAAkB,SAAS,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,wDAAwD,EAAE;QAC3E,IAAI,EAAE,kCAAkC;QACxC,QAAQ,EAAE,CAAC;QACX,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,8BAA8B,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,SAAS,CAAI,KAAQ;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;AAChD,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,YAAoB,EAAE,WAAmB;IACnF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,oCAAoC,EAAE;YACvD,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,yBAAyB,QAAQ,EAAE,EAAE;YACtD,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CACvB,UAAoB,EACpB,YAAoB,EACpB,WAAmB;IAEnB,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,QAAQ,CAAC,sCAAsC,EAAE;YACzD,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,mCAAmC,EAAE;YACtD,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAgB,EAChB,YAAoB,EACpB,WAAmB,EACnB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACtE,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,8BAA8B,QAAQ,EAAE,EAAE;YAC3D,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,8BAA8B,QAAQ,EAAE,EAAE;YAC3D,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAe;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;QACxC,CAAC,CAAC,GAAG,CAAC,YAAY;QAClB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAClB,CAAC,CAAC,GAAG,CAAC,IAAI;YACV,CAAC,CAAC,GAAG,CAAC;IACV,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7E,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAe;IAC7C,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,EAAE,EAAE,CAAe,CAAC;IAC9F,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,MAAM,OAAO,GACX,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;QACvB,UAAU,CACR,OAAO,CAAC,OAAO,EAAE;YACf,2BAA2B;YAC3B,yBAAyB;YACzB,uBAAuB;SACxB,CAAC,CACH;QACD,WAAW,CAAC;IACd,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAEhF,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,UAAsB;IAC7C,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,+BAA+B,CAAC,UAAsB;IAC7D,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,mBAAmB,GAAG,UAAU,CACpC,OAAO,CAAC,OAAO,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,0BAA0B,CAAC,CAAC,CAC9F,CAAC;IACF,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,KAAK,mBAAmB,CACjF,CAAC;QACF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CACnC,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CAChF,CAAC;IACF,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAY;IACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,8BAA8B,CAAC,UAAsB;IAM5D,MAAM,QAAQ,GAAG,+BAA+B,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7F,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACxC,YAAY,EAAE,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzC,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC;QACpC,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,UAAsB;IAC3C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC;SACnB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc,EAAE,KAAe;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,OAAO,SAAS,GAAG,UAAU,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAgB,EAAE,KAAiB;IACnE,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClE,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,cAAc,GAAG,kBAAkB,CACvC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,EAChC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAClC,CAAC;IACF,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,cAAc,CAAC,IAAkB;IACxC,MAAM,MAAM,GAAiC,EAAE,CAAC;IAChD,MAAM,aAAa,GAA+B,EAAE,CAAC;IACrD,MAAM,MAAM,GAAiC,EAAE,CAAC;IAChD,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,aAAa,CAAC,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC;QACzD,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM;QACN,aAAa;QACb,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,QAAoB,EACpB,QAAgB,EAChB,WAA0B;IAE1B,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAmB,EAAE,SAAiB,EAAE,OAAe;IACnF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAA2B;QACxC,IAAI,EAAE,OAAO;QACb,eAAe,EAAE,OAAO;KACzB,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,UAAU,CAAC;IACzE,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC;IAClD,OAAO,MAAM,MAAM,IAAI,SAAS,IAAI,WAAW,MAAM,CAAC;AACxD,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAiB,EAAE,MAAkB;IAC1E,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,WAAW,CAAC;gBAClB,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC;YAC9E,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,WAAW,CAAC;YAClB,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC;QAC9E,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAkB;IACjD,MAAM,sBAAsB,GAC1B,MAAM,CAAC,gBAAgB;QACtB;YACC,WAAW,EAAE,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI;SACC,CAAC;IAE1B,OAAO;QACL,OAAO,EAAE,eAAe;QACxB,cAAc,EAAE,MAAM,CAAC,EAAE;QACzB,UAAU,EAAE,MAAM,CAAC,OAAO;QAC1B,MAAM,EAAE,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC;QACxE,yBAAyB,EAAE,SAAS,CAAC,sBAAsB,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAmB,EAAE,MAAkB;IACnE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,yBAAyB,CAAC,GAAG,6BAA6B,CAChE,OAAO,CAAC,yBAAyB,CAAC,EAClC,MAAM,CAAC,yBAAyB,CAAe,CAChD,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI;gBAC5C,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAgB;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAe;IAC9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,mBAAmB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACnD,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,MAAM,CAAC,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,QAAQ,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE;QACrD,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,UAAsB,EACtB,SAA2B;IAE3B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,8BAA8B,CAAC,UAAU,CAAC,CAAC;IACjE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,aAAa,GACf,SAAS,EAAE,aAAa,CAAC,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,IAAI,CAAC;IAE7F,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACvE,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACrE,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,uBAAuB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,WAAW,GAAI,YAAY,CAAC,OAAqB,CAAC,MAAM,CAC5D,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CACtD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,mBAAmB,GAAG,WAAW,CACrC,OAAO,CAAC,OAAO,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC,CAC3F,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,mBAAmB,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtF,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,eAAe,EAAE,QAAQ,CAAC,OAAO;QACjC,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,iBAAiB,EAAE,aAAa,CAAC,OAAO;QACxC,sBAAsB,EAAE,aAAa,CAAC,YAAY;QAClD,8BAA8B,EAAE,aAAa,CAAC,oBAAoB;QAClE,QAAQ,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC,EAAE;QACvE,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAkB,EAClB,SAA2B;IAK3B,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,YAAY,GAAiB,EAAE,CAAC;IAEtC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,0BAA0B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5D,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;QACR,YAAY;KACb,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,UAAsB,EACtB,QAAoB,EACpB,UAAqB,EACrB,YAAuB,EACvB,QAAoB;IAEpB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAgB;QAC3B,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,eAAe,EAAE,QAAQ,CAAC,OAAO;QACjC,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAChE,kBAAkB,EAAE,QAAQ,CAAC,iBAAiB;QAC9C,iBAAiB,EAAE,QAAQ;QAC3B,sBAAsB,EAAE,WAAW;QACnC,mBAAmB,EAAE,oBAAoB,CAAC,GAAG,CAAC;QAC9C,UAAU,EAAE,kBAAkB;QAC9B,QAAQ,EAAE,MAAM;QAChB,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC;QACpC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;IACzE,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,UAAU,GAAG,wBAAwB,CAAC;QAC9C,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG;YACjB,YAAY,EAAE,WAAW;SAC1B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;YACxC,OAAO,CAAC,UAAU,GAAG,iBAAiB,CAAC;YACvC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC7B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;YAC1C,OAAO,CAAC,UAAU,GAAG,uBAAuB,CAAC;YAC7C,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC7B,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC;QACpC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;IAC1E,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,QAAQ,GAAG;YACjB,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,UAAU,CAAC,IAAI;SAC3B,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACxC,OAAO,CAAC,UAAU,GAAG,gBAAgB,CAAC;QACtC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG;YACjB,4BAA4B,EAAE,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;iBACtD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;iBAC/B,IAAI,EAAE;SACV,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IACE,YAAY,CAAC,aAAa,CAAC,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;QACxD,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EACrC,CAAC;QACD,OAAO,CAAC,UAAU,GAAG,uBAAuB,CAAC;QAC7C,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC;IACpC,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,QAAuB;IAC9C,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,eAAe,KAAK,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACzF,OAAO,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAoB,EACpB,UAAqB,EACrB,QAAoB,EACpB,OAA2B,EAC3B,eAAgC;IAEhC,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,MAAM,YAAY,GAChB,oBAAoB,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE9F,MAAM,IAAI,GAAiB;QACzB,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAChE,eAAe,EAAE,QAAQ;QACzB,oBAAoB,EAAE,WAAW;QACjC,kBAAkB,EAAE,QAAQ,CAAC,iBAAiB;QAC9C,aAAa,EAAE,YAAY;QAC3B,kBAAkB,EAAE,OAAO,EAAE,UAAU;QACvC,iBAAiB,EAAE,eAAe;QAClC,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,wBAAwB;QAChC,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,EAAE;QACnB,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC;QAC7E,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,mBAAmB;gBAC3B,cAAc,EAAE,aAAa,CAAC,EAAE;gBAChC,mBAAmB,EAAE,aAAa,CAAC,OAAO;aAC3C,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI,CAAC,CAAC;IACzE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,YAAY,GAChB,UAAU,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/F,IAAI,YAAY,IAAI,eAAe,KAAK,UAAU,EAAE,CAAC;YACnD,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,YAAY,CAAC,EAAE;gBAC/B,mBAAmB,EAAE,YAAY,CAAC,OAAO;gBACzC,gBAAgB,EAAE,YAAY,CAAC,IAAI;gBACnC,gBAAgB,EAAE,oBAAoB,CAAC,GAAG,EAAE,YAAY,CAAC;aAC1D,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,oDAAoD;gBAC5D,eAAe,EAAE,CAAC;gBAClB,cAAc,EAAE;oBACd;wBACE,EAAE,EAAE,YAAY,CAAC,EAAE;wBACnB,OAAO,EAAE,YAAY,CAAC,OAAO;wBAC7B,IAAI,EAAE,YAAY,CAAC,IAAI;qBACxB;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,eAAe,KAAK,sBAAsB,EAAE,CAAC;YAC/C,OAAO;gBACL,GAAG,IAAI;gBACP,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,yBAAyB;gBACjC,cAAc,EAAE,SAAS,CAAC,EAAE;gBAC5B,mBAAmB,EAAE,SAAS,CAAC,OAAO;gBACtC,gBAAgB,EAAE,SAAS,CAAC,IAAI;gBAChC,gBAAgB,EAAE,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC;aACvD,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,2CAA2C;YACnD,eAAe,EAAE,CAAC;YAClB,cAAc,EAAE;gBACd;oBACE,EAAE,EAAE,SAAS,CAAC,EAAE;oBAChB,OAAO,EAAE,SAAS,CAAC,OAAO;oBAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;iBACrB;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,GAAG,IAAI;YACP,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,4BAA4B;YACpC,eAAe,EAAE,UAAU,CAAC,MAAM;YAClC,cAAc,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC7C,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;aACrB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAe,EAAE,KAAc;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE9D,IAAI,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;QAC/C,OAAO,mCAAmC,CAAC;IAC7C,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OACE,MAAM,GAAG,WAAW,CAAC,MAAM;QAC3B,MAAM,GAAG,UAAU,CAAC,MAAM;QAC1B,WAAW,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,EAC1C,CAAC;QACD,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,IAAI,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACxC,OACE,YAAY,IAAI,MAAM;QACtB,WAAW,IAAI,MAAM;QACrB,WAAW,CAAC,YAAY,CAAC,KAAK,UAAU,CAAC,WAAW,CAAC,EACrD,CAAC;QACD,YAAY,IAAI,CAAC,CAAC;QAClB,WAAW,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,OAAO,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;IAExG,OAAO;QACL,iBAAiB;QACjB,gBAAgB;QAChB,UAAU;QACV,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1C,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACzC,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,MAAe,EAAE,KAAc,EAAE,SAAqB,EAAE;IAC7E,IAAI,OAAO,MAAM,KAAK,OAAO,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACxD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC7B,OAAO;YACT,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,2BAA2B,CAAC,SAAqB;IACxD,OAAO,SAAS,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,OAAe;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;IAC5E,OAAO,GAAG,SAAS,KAAK,WAAW,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,IAAkB;IACzD,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,OAAO,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,mBAAmB,CAC1B,YAA0B,EAC1B,YAA0B;IAU1B,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACpC,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,cAAc,IAAI,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACjD,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,QAAQ,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,iBAAiB,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACtD,SAAS,IAAI,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QAED,UAAU,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,UAAU;QACV,MAAM,EAAE;YACN,QAAQ;YACR,OAAO;YACP,SAAS;YACT,eAAe,EAAE,cAAc;SAChC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,YAA0B;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC/E,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC1C,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEpC,OAAO;QACL,SAAS,EAAE,QAAQ;QACnB,cAAc,EAAE,YAAY,CAAC,MAAM;QACnC,cAAc,EAAE,YAAY,CAAC,MAAM;QACnC,eAAe,EAAE,UAAU,CAAC,MAAM;QAClC,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,SAAoB,EACpB,IAA0B;IAK1B,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,eAAe,EAAE,KAAK;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,qBAAqB,CAAC,EAAE,CAAC;QAC/D,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO;gBACL,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,eAAe,EAAE,IAAI;aACtB,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,QAAQ,CAAC,+DAA+D,EAAE;gBAClF,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,UAAmB;IAClD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAED,IAAI,UAAU,YAAY,KAAK,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CACnC,OAAmB,EACnB,aAA6D;IAE7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,EAAE;YACpC,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,KAAK;YACnB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,MAAM,UAAU,GACd,OAAO,MAAM,EAAE,gBAAgB,KAAK,UAAU;YAC5C,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE;YAC3B,CAAC,CAAC,OAAO,MAAM,EAAE,QAAQ,KAAK,UAAU;gBACtC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACnB,CAAC,CAAC,IAAI,CAAC;QAEb,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,WAA8B,EAC9B,UAAsB,EACtB,UAAqB,EACrB,aAAoE;IAEpE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,MAAM,GAAkC,EAAE,CAAC;IAEjD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO;YACL,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,eAAe,EAAE,QAAQ,CAAC,OAAO;YACjC,YAAY,EAAE,QAAQ,CAAC,IAAI;YAC3B,EAAE,EAAE,KAAK;YACT,MAAM;SACP,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,MAAM,CAChE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,SAAS,CAAC,CACvD,CAAC;IACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,6BAA6B,GAAG,UAAU,CAC9C,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE;QAC1C,oBAAoB;QACpB,uBAAuB;QACvB,0BAA0B;KAC3B,CAAC,CACH,CAAC;IACF,MAAM,4BAA4B,GAAG,UAAU,CAC7C,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE;QACzC,oBAAoB;QACpB,uBAAuB;QACvB,0BAA0B;KAC3B,CAAC,CACH,CAAC;IACF,IAAI,6BAA6B,KAAK,4BAA4B,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,6BAA6B;YACrC,KAAK,EAAE,4BAA4B;SACpC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,qBAAqB,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,oBAAoB,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;IAChE,IAAI,qBAAqB,KAAK,oBAAoB,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,qBAAqB;YAC7B,KAAK,EAAE,oBAAoB;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,oCAAoC;gBAC1C,QAAQ,EAAE,OAAO;gBACjB,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;gBAChE,OAAO,EAAE,MAAM;gBACf,YAAY,EAAE,WAAW;aAC1B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,MAAM,IAAI,WAAW,EAAE,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,wCAAwC;gBAC9C,QAAQ,EAAE,OAAO;gBACjB,oBAAoB,EAAE,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;gBAChE,OAAO,EAAE,MAAM;gBACf,YAAY,EAAE,WAAW;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,4BAA4B,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;QAC/F,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,QAAQ,EAAE,OAAO;gBACjB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,eAAe,EAAE,QAAQ,CAAC,OAAO;QACjC,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc;IACzC,OAAO;QACL,OAAO,EAAE,MAAM;QACf,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,CAAC;QAC9E,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC;QAC/C,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC;QACjD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAc;IAC3C,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;QAC3C,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC;QAClD,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC;QACnE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IAC1C,OAAO;QACL,GAAG,qBAAqB,CAAC,MAAM,CAAC;QAChC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC;QAC9D,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC;KACjD,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAc;IAC7C,OAAO;QACL,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC;QACnD,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,gBAA+B,EAC/B,YAAoB,EACpB,WAAmB;IAKnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAElF,OAAO;QACL,YAAY;QACZ,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAkB;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,SAAuB,EACvB,UAAqB,EACrB,YAAuB,EACvB,QAAoB,EACpB,MAAc,EACd,aAAsB;IAEtB,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,aAAa;QAC9C,CAAC,CAAC,0BAA0B,CAAC,SAAS,EAAE,YAAY,CAAC;QACrD,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAC9C,aAAa,IAAI,SAAS,CAAC,MAAM,CAAC;QAElC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC9F,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7E,IAAI,OAAO,CAAC,UAAU,KAAK,kBAAkB,EAAE,CAAC;gBAC9C,gBAAgB,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG;QACd,qCAAqC,EAAE,SAAS,CAAC,MAAM;QACvD,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,6BAA6B,EAAE,YAAY,CAAC,MAAM;QAClD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,WAAW;QACzB,qBAAqB,EAAE,gBAAgB,CAAC,IAAI;KAC7C,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;IACjE,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5C,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IAEvD,OAAO;QACL,iBAAiB,EAAE,QAAQ;QAC3B,uBAAuB,EAAE,YAAY;QACrC,QAAQ;QACR,OAAO;QACP,KAAK;KACN,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OASvB;IACC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;QACzB,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC;QACtC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,cAAc,GAA2B,EAAE,CAAC;IAElD,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACvC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,GAAG,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QACtE,MAAM,WAAW,GAAmB,EAAE,CAAC;QACvC,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/C,MAAM,MAAM,GAAG,kBAAkB,CAC/B,QAAQ,EACR,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,QAAQ,EAChB,UAAU,CAAC,GAAG,UAAU,KAAK,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAClF,OAAO,CAAC,eAAe,CACxB,CAAC;YACF,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC1C,MAAM,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;YACpC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAE7E,IAAI,MAAM,CAAC,QAAQ,KAAK,eAAe,EAAE,CAAC;gBACxC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,QAAQ,KAAK,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC3F,QAAQ,CAAC,sBAAsB,GAAG,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACrE,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,MAAM,SAAS,GAAI,KAAyB,CAAC,UAAU,CAAC;YACxD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACvF,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,UAAU,CAAC,CAAC;YACpE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;YACnE,iBAAiB,CACf,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EACtC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAC,CAC7D,CAAC;YACF,iBAAiB,CACf,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EACnC,oBAAoB,CAAC,UAAU,EAAE,UAAU,CAAC,CAC7C,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAiC;QAC5C,iBAAiB,EAAE,OAAO,CAAC,eAAe;QAC1C,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,MAAM;QACvC,iBAAiB,EAAE,UAAU,CAAC,MAAM;QACpC,eAAe,EAAE,cAAc;QAC/B,qBAAqB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC9D,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,OAAO,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACxF,CAAC;IAED,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC1C,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACrD,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IAC/D,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE1C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,iBAAiB,CAAE,KAAyB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW;QACX,OAAO;QACP,KAAK;QACL,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAOzB;IACC,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,MAAM,WAAW,GAA+B,EAAE,CAAC;IACnD,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACnC,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,EAAE,CAAC;YACR,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QACtC,OAAO,oBAAoB,CACzB,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EACvC,UAAU,EACV,OAAO,CAAC,UAAU,EAClB,SAAS,CAAC,aAAa,IAAI,IAAI,CAChC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxD,MAAM,OAAO,GAAkC;QAC7C,qBAAqB,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM;QACjD,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM;QACxC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,gBAAgB,EAAE,SAAS,CAAC,eAAe;KAC5C,CAAC;IACF,MAAM,MAAM,GAAiC;QAC3C,OAAO;QACP,OAAO;KACR,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,sBAAsB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEjD,OAAO;QACL,OAAO;QACP,OAAO;QACP,QAAQ;QACR,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAA0C,EAC1C,OAA6B,EAAE;IAE/B,MAAM,aAAa,GAAG,eAAe,CACnC,OAAO,CAAC,aAAa,EACrB,qDAAqD,EACrD,sDAAsD,CACvD,CAAC;IACF,MAAM,cAAc,GAAG,gBAAgB,CACrC,OAAO,CAAC,cAAc,IAAI,EAAE,EAC5B,uDAAuD,EACvD,uDAAuD,CACxD,CAAC;IACF,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAC7D,CAAC,CAAC,gBAAgB,CACd,OAAO,CAAC,gBAAgB,EACxB,yDAAyD,EACzD,yDAAyD,CAC1D;QACH,CAAC,CAAC,cAAc,CAAC;IACrB,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACvC,CAAC,CAAC,eAAe,CACb,OAAO,CAAC,YAAY,EACpB,gDAAgD,EAChD,iDAAiD,CAClD;QACH,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,kBAAkB,CAChB,YAAY,EACZ,gDAAgD,EAChD,iDAAiD,EACjD,+CAA+C,CAChD;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,YAAY,CAC5B,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,OAAO,CAAC,aAAa,KAAK,IAAI,CAC/B,CAAC;IAEF,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,6CAA6C;QACrD,cAAc,EAAE,aAAa;QAC7B,gBAAgB,EAAE,cAAc;QAChC,kBAAkB,EAAE,gBAAgB;QACpC,cAAc,EAAE,YAAY;QAC5B,cAAc,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI;QAC9C,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,KAAK,EAAE,SAAS,CAAC,KAAK;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAA6C,EAC7C,OAA6B,EAAE;IAE/B,MAAM,aAAa,GAAG,eAAe,CACnC,OAAO,CAAC,aAAa,EACrB,wDAAwD,EACxD,yDAAyD,CAC1D,CAAC;IACF,MAAM,cAAc,GAAG,gBAAgB,CACrC,OAAO,CAAC,cAAc,IAAI,EAAE,EAC5B,0DAA0D,EAC1D,0DAA0D,CAC3D,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACvC,CAAC,CAAC,eAAe,CACb,OAAO,CAAC,YAAY,EACpB,mDAAmD,EACnD,oDAAoD,CACrD;QACH,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,wBAAwB,CAC/E,OAAO,CAAC,gBAAgB,IAAI,IAAI,EAChC,uDAAuD,EACvD,wDAAwD,CACzD,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,YAAY,CAAC;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,kBAAkB,CAChB,YAAY,EACZ,mDAAmD,EACnD,oDAAoD,EACpD,kDAAkD,CACnD;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,SAAS;QACT,UAAU;QACV,QAAQ;QACR,YAAY;QACZ,eAAe;QACf,MAAM;QACN,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,gDAAgD;QACxD,cAAc,EAAE,aAAa;QAC7B,gBAAgB,EAAE,cAAc;QAChC,cAAc,EAAE,YAAY;QAC5B,kBAAkB,EAAE,gBAAgB;QACpC,iBAAiB,EAAE,eAAe;QAClC,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,KAAK,EAAE,WAAW,CAAC,KAAyB;KAC7C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAA8C,EAC9C,OAA6B,EAAE;IAE/B,MAAM,aAAa,GAAG,eAAe,CACnC,OAAO,CAAC,aAAa,EACrB,yDAAyD,EACzD,0DAA0D,CAC3D,CAAC;IACF,MAAM,cAAc,GAAG,gBAAgB,CACrC,OAAO,CAAC,cAAc,IAAI,EAAE,EAC5B,2DAA2D,EAC3D,2DAA2D,CAC5D,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACvC,CAAC,CAAC,eAAe,CACb,OAAO,CAAC,YAAY,EACpB,oDAAoD,EACpD,qDAAqD,CACtD;QACH,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,wBAAwB,CAC/E,OAAO,CAAC,gBAAgB,IAAI,IAAI,EAChC,wDAAwD,EACxD,yDAAyD,CAC1D,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,YAAY,CAAC;IAChE,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,kBAAkB,CAChB,YAAY,EACZ,oDAAoD,EACpD,qDAAqD,EACrD,mDAAmD,CACpD;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,SAAS;QACT,UAAU;QACV,QAAQ;QACR,YAAY;QACZ,eAAe;QACf,MAAM;QACN,KAAK,EAAE,IAAI;QACX,eAAe;KAChB,CAAC,CAAC;IAEH,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,iDAAiD;QACzD,cAAc,EAAE,aAAa;QAC7B,gBAAgB,EAAE,cAAc;QAChC,cAAc,EAAE,YAAY;QAC5B,kBAAkB,EAAE,gBAAgB;QACpC,iBAAiB,EAAE,eAAe;QAClC,iBAAiB,EAAE,eAAe;QAClC,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,KAAK,EAAE,WAAW,CAAC,KAAwB;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,KAAc;IACtD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,gCAAgC,CAAC;QAC3D,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1D,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QAC7E,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;KAChF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC,EACnC,OAA6B,EAAE;IAE/B,MAAM,aAAa,GAAG,eAAe,CACnC,OAAO,CAAC,aAAa,EACrB,oCAAoC,EACpC,qCAAqC,CACtC,CAAC;IACF,MAAM,cAAc,GAAG,gBAAgB,CACrC,OAAO,CAAC,cAAc,IAAI,EAAE,EAC5B,sCAAsC,EACtC,sCAAsC,CACvC,CAAC;IACF,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAC7D,CAAC,CAAC,gBAAgB,CACd,OAAO,CAAC,gBAAgB,EACxB,uCAAuC,EACvC,wCAAwC,CACzC;QACH,CAAC,CAAC,cAAc,CAAC;IACrB,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY;QACvC,CAAC,CAAC,eAAe,CACb,OAAO,CAAC,YAAY,EACpB,+BAA+B,EAC/B,gCAAgC,CACjC;QACH,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;IACrC,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,YAAY,CAAC;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,SAAS,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,YAAY;QAC3B,CAAC,CAAC,kBAAkB,CAChB,YAAY,EACZ,+BAA+B,EAC/B,gCAAgC,EAChC,8BAA8B,CAC/B;QACH,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,YAAY,CAC5B,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,KAAK,CAAC,IAAI,CAAC,OAAO,EAClB,OAAO,CAAC,aAAa,KAAK,IAAI,CAC/B,CAAC;IACF,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,SAAS,EAAE,SAAS,CAAC,iBAAiB;QACtC,UAAU;QACV,QAAQ;QACR,YAAY,EAAE,SAAS,CAAC,QAAQ;QAChC,eAAe;QACf,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO;QAC5B,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,IAAI;KACtB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,KAAK;QACtB,CAAC,CAAC,cAAc,CAAC;YACb,SAAS,EAAE,SAAS,CAAC,iBAAiB;YACtC,UAAU;YACV,QAAQ;YACR,YAAY,EAAE,SAAS,CAAC,QAAQ;YAChC,eAAe;YACf,MAAM,EAAE,KAAK,CAAC,KAAM,CAAC,OAAO;YAC5B,KAAK,EAAE,IAAI;YACX,eAAe;SAChB,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,aAAa,GACjB,KAAK,IAAI,UAAU;QACjB,CAAC,CAAC,gBAAgB,CAAC;YACf,YAAY,EAAE,SAAS,CAAC,iBAAiB;YACzC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,UAAU;YACV,MAAM,EAAE,KAAK,CAAC,QAAS,CAAC,OAAO;YAC/B,SAAS;YACT,IAAI;SACL,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,MAAM,GAA2B;QACrC,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,oCAAoC;QAC5C,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QAC9B,cAAc,EAAE,aAAa;QAC7B,gBAAgB,EAAE,cAAc;QAChC,kBAAkB,EAAE,gBAAgB;QACpC,cAAc,EAAE,YAAY;QAC5B,cAAc,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI;QAC9C,iBAAiB,EAAE,eAAe;QAClC,iBAAiB,EAAE,eAAe;QAClC,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE;YACN,qCAAqC,EACnC,SAAS,CAAC,OAAO,CAAC,qCAAqC;YACzD,aAAa,EAAE,SAAS,CAAC,OAAO,CAAC,aAAa;YAC9C,6BAA6B,EAAE,SAAS,CAAC,OAAO,CAAC,6BAA6B;YAC9E,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,cAAc;YAChD,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY;YAC5C,qBAAqB,EAAE,SAAS,CAAC,OAAO,CAAC,qBAAqB;YAC9D,iBAAiB,EAAE,WAAW,CAAC,OAAO,CAAC,iBAAiB;YACxD,eAAe,EAAE,WAAW,CAAC,OAAO,CAAC,eAAe;YACpD,qBAAqB,EAAE,UAAU,EAAE,OAAO,CAAC,qBAAqB,IAAI,CAAC;YACrE,uBAAuB,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC9D,uBAAuB,EAAE,aAAa,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;SAC/D;QACD,UAAU,EAAE;YACV,OAAO,EAAE,KAAK;YACd,gBAAgB,EAAE,aAAa,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;YAClE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI;SAC9D;QACD,KAAK;KACN,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAwC,EACxC,OAA6B,EAAE;IAE/B,MAAM,qBAAqB,GAAG,eAAe,CAC3C,OAAO,CAAC,qBAAqB,EAC7B,gDAAgD,EAChD,iDAAiD,CAClD,CAAC;IACF,MAAM,oBAAoB,GAAG,eAAe,CAC1C,OAAO,CAAC,oBAAoB,EAC5B,+CAA+C,EAC/C,gDAAgD,CACjD,CAAC;IACF,MAAM,cAAc,GAAG,gBAAgB,CACrC,OAAO,CAAC,cAAc,IAAI,EAAE,EAC5B,mDAAmD,EACnD,mDAAmD,CACpD,CAAC;IACF,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,gBAAgB,CAAC;QACrC,YAAY;QACZ,WAAW;QACX,UAAU;QACV,MAAM;QACN,SAAS;QACT,IAAI;KACL,CAAC,CAAC;IAEH,OAAO;QACL,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,yCAAyC;QACjD,uBAAuB,EAAE,qBAAqB;QAC9C,sBAAsB,EAAE,oBAAoB;QAC5C,gBAAgB,EAAE,cAAc;QAChC,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,aAAa,CAAC,OAAO;QAC9B,KAAK,EAAE,aAAa,CAAC,KAAK;QAC1B,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,kBAAkB;IAClB,eAAe;IACf,gBAAgB;IAChB,YAAY;IACZ,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,sBAAsB;IACtB,eAAe;IACf,+BAA+B;IAC/B,oBAAoB;IACpB,8BAA8B;IAC9B,aAAa;IACb,UAAU;IACV,kBAAkB;IAClB,wBAAwB;IACxB,cAAc;IACd,WAAW;IACX,oBAAoB;IACpB,6BAA6B;IAC7B,uBAAuB;IACvB,oBAAoB;IACpB,WAAW;IACX,oBAAoB;IACpB,mBAAmB;IACnB,uBAAuB;IACvB,0BAA0B;IAC1B,0BAA0B;IAC1B,mBAAmB;IACnB,eAAe;IACf,kBAAkB;IAClB,oBAAoB;IACpB,aAAa;IACb,2BAA2B;IAC3B,cAAc;IACd,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,8BAA8B;IAC9B,uBAAuB;IACvB,uBAAuB;IACvB,4BAA4B;IAC5B,oBAAoB;IACpB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;IACvB,YAAY;IACZ,cAAc;IACd,gBAAgB;IAChB,gBAAgB;CACjB,CAAC","sourcesContent":["import { createRequire } from 'node:module';\nimport { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { isDeepStrictEqual } from 'node:util';\nimport { fileURLToPath } from 'node:url';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n deepGet,\n extractFlowRecord,\n flowDatasetFromRow,\n isRecord,\n listify,\n loadRowsFromFile,\n normalizeText,\n type FlowRecord,\n type JsonRecord,\n} from './flow-governance.js';\nimport { resolveRepoRootFrom } from './validation.js';\n\nconst EMERGY_TEXT_KEYWORDS = [\n 'emergy',\n '能值',\n '太阳能值',\n 'solar emergy',\n 'solar emjoule',\n 'sej',\n] as const;\n\nexport type AutoPatchPolicy = 'disabled' | 'alias-only' | 'alias-or-unique-name';\nexport type TidasMode = 'auto' | 'required' | 'skip';\ntype PathPart = string | number;\n\ntype LangEntry = {\n lang: string;\n text: string;\n};\n\ntype ProcessIdentity = {\n id: string;\n version: string;\n name: string;\n};\n\ntype FlowIndex = {\n records: FlowRecord[];\n byUuid: Record<string, FlowRecord[]>;\n byUuidVersion: Record<string, FlowRecord>;\n byName: Record<string, FlowRecord[]>;\n};\n\ntype ScanFinding = {\n process_id: string;\n process_version: string;\n process_name: string;\n exchange_internal_id: string;\n exchange_direction: unknown;\n reference_flow_id: string;\n reference_flow_version: string;\n reference_flow_text: string;\n issue_type: string;\n severity: 'info' | 'warning' | 'error';\n evidence: JsonRecord;\n};\n\ntype RepairAction = {\n process_id: string;\n process_version: string;\n process_name: string;\n exchange_internal_id: string;\n current_flow_id: string;\n current_flow_version: string;\n exchange_direction: unknown;\n exchange_text: string;\n current_issue_type?: string;\n auto_patch_policy: AutoPatchPolicy;\n decision: 'keep_as_is' | 'auto_patch' | 'manual_review';\n reason: string;\n target_flow_id?: string;\n target_flow_version?: string;\n target_flow_name?: string;\n target_reference?: JsonRecord;\n candidate_count?: number;\n candidate_refs?: Array<Record<string, string>>;\n};\n\nexport type ProcessPatchValidationIssue = JsonRecord & {\n type: string;\n severity: 'error';\n};\n\nexport type ProcessPatchValidationResult = {\n process_id: string;\n process_version: string;\n process_name: string;\n ok: boolean;\n issues: ProcessPatchValidationIssue[];\n};\n\nexport type ProcessPatchValidationSummary = {\n patched_process_count: number;\n passed: number;\n failed: number;\n tidas_validation: boolean;\n};\n\ntype ProcessPatchValidationReport = {\n summary: ProcessPatchValidationSummary;\n results: ProcessPatchValidationResult[];\n};\n\nexport type ScanStageFiles = {\n out_dir: string;\n emergy_excluded_processes: string;\n summary: string;\n findings: string;\n findings_jsonl: string;\n};\n\nexport type RepairStageFiles = {\n out_dir: string;\n plan: string;\n plan_jsonl: string;\n manual_review_queue: string;\n summary: string;\n};\n\nexport type ApplyStageFiles = RepairStageFiles & {\n patched_processes: string;\n patch_root: string;\n};\n\nexport type ValidateStageFiles = {\n out_dir: string;\n report: string;\n failures: string;\n};\n\nexport type FlowProcessRefScanSummary = {\n process_count_before_emergy_exclusion: number;\n process_count: number;\n emergy_excluded_process_count: number;\n exchange_count: number;\n issue_counts: Record<string, number>;\n processes_with_issues: number;\n};\n\nexport type FlowProcessFlowRepairSummary = {\n auto_patch_policy: AutoPatchPolicy;\n process_count: number;\n repair_item_count: number;\n decision_counts: Record<string, number>;\n patched_process_count: number;\n process_pool_sync?: JsonRecord;\n};\n\ntype FlowRegenProductFiles = {\n report: string;\n scan: ScanStageFiles;\n repair: RepairStageFiles;\n apply: ApplyStageFiles | null;\n validate: ValidateStageFiles | null;\n};\n\ntype FlowRegenProductCounts = {\n process_count_before_emergy_exclusion: number;\n process_count: number;\n emergy_excluded_process_count: number;\n exchange_count: number;\n issue_counts: Record<string, number>;\n processes_with_issues: number;\n repair_item_count: number;\n decision_counts: Record<string, number>;\n patched_process_count: number;\n validation_passed_count: number | null;\n validation_failed_count: number | null;\n};\n\nexport type FlowRegenProductReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_regen_product';\n mode: 'plan' | 'apply';\n processes_file: string;\n scope_flow_files: string[];\n catalog_flow_files: string[];\n alias_map_file: string | null;\n exclude_emergy: boolean;\n auto_patch_policy: AutoPatchPolicy;\n process_pool_file: string | null;\n tidas_mode: TidasMode;\n out_dir: string;\n counts: FlowRegenProductCounts;\n validation: {\n enabled: boolean;\n tidas_validation: boolean;\n ok: boolean | null;\n };\n files: FlowRegenProductFiles;\n};\n\nexport type RunFlowRegenProductOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n catalogFlowFiles?: string[];\n aliasMapFile?: string | null;\n outDir: string;\n excludeEmergy?: boolean;\n autoPatchPolicy?: AutoPatchPolicy;\n apply?: boolean;\n processPoolFile?: string | null;\n tidasMode?: TidasMode;\n};\n\nexport type RunFlowValidateProcessesOptions = {\n originalProcessesFile: string;\n patchedProcessesFile: string;\n scopeFlowFiles: string[];\n outDir: string;\n tidasMode?: TidasMode;\n};\n\nexport type RunFlowScanProcessFlowRefsOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n catalogFlowFiles?: string[];\n aliasMapFile?: string | null;\n excludeEmergy?: boolean;\n outDir: string;\n};\n\nexport type RunFlowPlanProcessFlowRepairsOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n aliasMapFile?: string | null;\n scanFindingsFile?: string | null;\n autoPatchPolicy?: AutoPatchPolicy;\n outDir: string;\n};\n\nexport type RunFlowApplyProcessFlowRepairsOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n aliasMapFile?: string | null;\n scanFindingsFile?: string | null;\n autoPatchPolicy?: AutoPatchPolicy;\n processPoolFile?: string | null;\n outDir: string;\n};\n\nexport type FlowValidateProcessesReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_validate_processes';\n original_processes_file: string;\n patched_processes_file: string;\n scope_flow_files: string[];\n out_dir: string;\n tidas_mode: TidasMode;\n summary: ProcessPatchValidationSummary;\n files: ValidateStageFiles;\n results: ProcessPatchValidationResult[];\n};\n\nexport type FlowScanProcessFlowRefsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_scan_process_flow_refs';\n processes_file: string;\n scope_flow_files: string[];\n catalog_flow_files: string[];\n alias_map_file: string | null;\n exclude_emergy: boolean;\n out_dir: string;\n summary: FlowProcessRefScanSummary;\n files: ScanStageFiles;\n};\n\nexport type FlowPlanProcessFlowRepairsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_plan_process_flow_repairs';\n processes_file: string;\n scope_flow_files: string[];\n alias_map_file: string | null;\n scan_findings_file: string | null;\n auto_patch_policy: AutoPatchPolicy;\n out_dir: string;\n summary: FlowProcessFlowRepairSummary;\n files: RepairStageFiles;\n};\n\nexport type FlowApplyProcessFlowRepairsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_apply_process_flow_repairs';\n processes_file: string;\n scope_flow_files: string[];\n alias_map_file: string | null;\n scan_findings_file: string | null;\n auto_patch_policy: AutoPatchPolicy;\n process_pool_file: string | null;\n out_dir: string;\n summary: FlowProcessFlowRepairSummary;\n files: ApplyStageFiles;\n};\n\ntype ProcessSdkValidationEntity = {\n validateEnhanced?: () => unknown;\n validate?: () => unknown;\n};\n\ntype ProcessSdkModule = {\n createProcess?: (\n data?: unknown,\n validationConfig?: {\n mode?: 'strict' | 'weak' | 'ignore';\n throwOnError?: boolean;\n deepValidation?: boolean;\n },\n ) => ProcessSdkValidationEntity;\n location?: string;\n};\n\ntype FlowRegenProductDeps = {\n loadSdkModule?: () => ProcessSdkModule;\n now?: () => Date;\n};\n\ntype ScanStageResult = {\n filteredProcesses: JsonRecord[];\n emergyExcludedProcesses: JsonRecord[];\n findings: ScanFinding[];\n summary: FlowProcessRefScanSummary;\n files: ScanStageFiles;\n};\n\ntype RepairStageResult = {\n plan: RepairAction[];\n manualQueue: RepairAction[];\n summary: FlowProcessFlowRepairSummary;\n files: RepairStageFiles | ApplyStageFiles;\n patchedRows: JsonRecord[];\n};\n\ntype ValidateStageResult = {\n summary: ProcessPatchValidationSummary;\n results: ProcessPatchValidationResult[];\n failures: ProcessPatchValidationResult[];\n files: ValidateStageFiles;\n};\n\nfunction resolveCliRepoRoot(): string {\n return resolveRepoRootFrom(path.dirname(fileURLToPath(import.meta.url)));\n}\n\nfunction buildSdkCandidates(): string[] {\n return ['@tiangong-lca/tidas-sdk/core'];\n}\n\nfunction resolveSdkModuleFromCandidates(\n requireFn: NodeJS.Require,\n candidates: string[],\n): ProcessSdkModule & { location: string } {\n const details: string[] = [];\n\n for (const candidate of candidates) {\n try {\n const loaded = requireFn(candidate) as ProcessSdkModule;\n if (typeof loaded.createProcess === 'function') {\n return {\n ...loaded,\n location: candidate,\n };\n }\n details.push(`Candidate missing createProcess export: ${candidate}`);\n } catch (error) {\n details.push(`Failed to load ${candidate}: ${String(error)}`);\n }\n }\n\n throw new CliError('Unable to resolve the local tidas-sdk process factory.', {\n code: 'FLOW_REGEN_PROCESS_SDK_NOT_FOUND',\n exitCode: 2,\n details,\n });\n}\n\nfunction resolveLocalSdkModule(): ProcessSdkModule & { location: string } {\n return resolveSdkModuleFromCandidates(createRequire(import.meta.url), buildSdkCandidates());\n}\n\nfunction cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction assertInputFile(inputFile: string, requiredCode: string, missingCode: string): string {\n if (!inputFile) {\n throw new CliError('Missing required input file value.', {\n code: requiredCode,\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code: missingCode,\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assertInputFiles(\n inputFiles: string[],\n requiredCode: string,\n missingCode: string,\n): string[] {\n if (!inputFiles.length) {\n throw new CliError('At least one input file is required.', {\n code: requiredCode,\n exitCode: 2,\n });\n }\n\n return inputFiles.map((inputFile) => assertInputFile(inputFile, requiredCode, missingCode));\n}\n\nfunction assertOutDir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_REGEN_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n return path.resolve(outDir);\n}\n\nfunction readJsonObjectFile(\n filePath: string,\n requiredCode: string,\n missingCode: string,\n invalidCode: string,\n): JsonRecord {\n const resolved = assertInputFile(filePath, requiredCode, missingCode);\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(resolved, 'utf8'));\n } catch (error) {\n throw new CliError(`Expected JSON object file: ${resolved}`, {\n code: invalidCode,\n exitCode: 2,\n details: String(error),\n });\n }\n\n if (!isRecord(parsed)) {\n throw new CliError(`Expected JSON object file: ${resolved}`, {\n code: invalidCode,\n exitCode: 2,\n });\n }\n\n return parsed;\n}\n\nfunction processDatasetFromRow(row: JsonRecord): JsonRecord {\n const payload = isRecord(row.json_ordered)\n ? row.json_ordered\n : isRecord(row.json)\n ? row.json\n : row;\n return isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n}\n\nfunction extractProcessIdentity(row: JsonRecord): ProcessIdentity {\n const dataset = processDatasetFromRow(row);\n const info = deepGet(dataset, ['processInformation', 'dataSetInformation'], {}) as JsonRecord;\n const id = coerceText(row.id) || coerceText(info['common:UUID']);\n const version =\n coerceText(row.version) ||\n coerceText(\n deepGet(dataset, [\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n ) ||\n '01.00.000';\n const name = coerceText(deepGet(info, ['name', 'baseName']) ?? info.name) || id;\n\n return { id, version, name };\n}\n\nfunction exchangeRecords(processRow: JsonRecord): JsonRecord[] {\n const dataset = processDatasetFromRow(processRow);\n return listify(deepGet(dataset, ['exchanges', 'exchange'], [])).filter(isRecord);\n}\n\nfunction extractProcessReferenceExchange(processRow: JsonRecord): JsonRecord | null {\n const dataset = processDatasetFromRow(processRow);\n const referenceInternalId = coerceText(\n deepGet(dataset, ['processInformation', 'quantitativeReference', 'referenceToReferenceFlow']),\n );\n const exchanges = exchangeRecords(processRow);\n\n if (referenceInternalId) {\n const exact = exchanges.find(\n (exchange) => coerceText(exchange['@dataSetInternalID']) === referenceInternalId,\n );\n if (exact) {\n return exact;\n }\n }\n\n const outputExchange = exchanges.find(\n (exchange) => coerceText(exchange.exchangeDirection).toLowerCase() === 'output',\n );\n if (outputExchange) {\n return outputExchange;\n }\n\n return exchanges[0] ?? null;\n}\n\nfunction extractReferenceText(ref: unknown): string {\n if (!isRecord(ref)) {\n return coerceText(ref);\n }\n return coerceText(ref['common:shortDescription']);\n}\n\nfunction extractProcessReferenceFlowRef(processRow: JsonRecord): {\n flow_id: string;\n flow_version: string;\n flow_text: string;\n exchange_internal_id: string;\n} {\n const exchange = extractProcessReferenceExchange(processRow) ?? {};\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n\n return {\n flow_id: coerceText(ref['@refObjectId']),\n flow_version: coerceText(ref['@version']),\n flow_text: extractReferenceText(ref),\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n };\n}\n\nfunction processRowKey(processRow: JsonRecord): string {\n const identity = extractProcessIdentity(processRow);\n if (!identity.id || !identity.version) {\n return '';\n }\n return `${identity.id}@${identity.version}`;\n}\n\nfunction versionKey(version: string): number[] {\n return String(version)\n .split('.')\n .map((part) => {\n const parsed = Number.parseInt(part, 10);\n return Number.isNaN(parsed) ? 0 : parsed;\n });\n}\n\nfunction compareVersionKeys(left: number[], right: number[]): number {\n const length = Math.max(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n const leftValue = left[index] ?? 0;\n const rightValue = right[index] ?? 0;\n if (leftValue !== rightValue) {\n return leftValue - rightValue;\n }\n }\n return 0;\n}\n\nfunction processRowSortComparator(left: JsonRecord, right: JsonRecord): number {\n const leftIdentity = extractProcessIdentity(left);\n const rightIdentity = extractProcessIdentity(right);\n\n const idCompare = leftIdentity.id.localeCompare(rightIdentity.id);\n if (idCompare !== 0) {\n return idCompare;\n }\n\n const versionCompare = compareVersionKeys(\n versionKey(leftIdentity.version),\n versionKey(rightIdentity.version),\n );\n if (versionCompare !== 0) {\n return versionCompare;\n }\n\n return leftIdentity.name.localeCompare(rightIdentity.name);\n}\n\nfunction buildFlowIndex(rows: JsonRecord[]): FlowIndex {\n const byUuid: Record<string, FlowRecord[]> = {};\n const byUuidVersion: Record<string, FlowRecord> = {};\n const byName: Record<string, FlowRecord[]> = {};\n const records: FlowRecord[] = [];\n\n for (const row of rows) {\n const record = extractFlowRecord(row);\n records.push(record);\n byUuid[record.id] ??= [];\n byUuid[record.id].push(record);\n byUuidVersion[`${record.id}@${record.version}`] = record;\n const normalizedName = normalizeText(record.name);\n byName[normalizedName] ??= [];\n byName[normalizedName].push(record);\n }\n\n return {\n records,\n byUuid,\n byUuidVersion,\n byName,\n };\n}\n\nfunction aliasLookup(\n aliasMap: JsonRecord,\n flowUuid: string,\n flowVersion: string | null,\n): JsonRecord | null {\n const versionedKey = flowVersion ? `${flowUuid}@${flowVersion}` : null;\n for (const key of [versionedKey, flowUuid]) {\n if (!key) {\n continue;\n }\n const candidate = aliasMap[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction buildLocalDatasetUri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n flow: 'flows',\n 'flow data set': 'flows',\n };\n const folder = folderMap[datasetKind.trim().toLowerCase()] ?? 'datasets';\n const versionText = version.trim() || '01.00.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction preserveShortDescriptionShape(existing: unknown, target: JsonRecord): unknown {\n if (Array.isArray(existing)) {\n if (existing.length > 0 && isRecord(existing[0])) {\n const patched = cloneJson(existing[0]);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return [patched];\n }\n return [cloneJson(target)];\n }\n\n if (isRecord(existing)) {\n const patched = cloneJson(existing);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return patched;\n }\n\n return cloneJson(target);\n}\n\nfunction flowReferenceFromRecord(record: FlowRecord): JsonRecord {\n const targetShortDescription =\n record.shortDescription ??\n ({\n '@xml:lang': 'en',\n '#text': record.name,\n } satisfies JsonRecord);\n\n return {\n '@type': 'flow data set',\n '@refObjectId': record.id,\n '@version': record.version,\n '@uri': buildLocalDatasetUri('flow data set', record.id, record.version),\n 'common:shortDescription': cloneJson(targetShortDescription),\n };\n}\n\nfunction patchedFlowReference(currentRef: unknown, record: FlowRecord): JsonRecord {\n const current = isRecord(currentRef) ? cloneJson(currentRef) : {};\n const target = flowReferenceFromRecord(record);\n\n current['@type'] = coerceText(current['@type']) || coerceText(target['@type']);\n current['@refObjectId'] = target['@refObjectId'];\n current['@version'] = target['@version'];\n current['@uri'] = target['@uri'];\n current['common:shortDescription'] = preserveShortDescriptionShape(\n current['common:shortDescription'],\n target['common:shortDescription'] as JsonRecord,\n );\n\n return current;\n}\n\nfunction langEntries(value: unknown): LangEntry[] {\n const entries: LangEntry[] = [];\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n entries.push(...langEntries(item));\n });\n return entries;\n }\n\n if (!isRecord(value)) {\n return entries;\n }\n\n if ('#text' in value || '@xml:lang' in value) {\n const text = coerceText(value['#text']);\n if (text) {\n entries.push({\n lang: coerceText(value['@xml:lang']) || 'en',\n text,\n });\n }\n return entries;\n }\n\n Object.values(value).forEach((nested) => {\n entries.push(...langEntries(nested));\n });\n\n return entries;\n}\n\nfunction textHasEmergyKeyword(text: string): boolean {\n const normalized = normalizeText(text);\n if (!normalized) {\n return false;\n }\n return EMERGY_TEXT_KEYWORDS.some((keyword) => normalized.includes(normalizeText(keyword)));\n}\n\nfunction uniqueNonEmptyTexts(values: string[]): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n\n values.forEach((value) => {\n const text = String(value || '').trim();\n if (!text) {\n return;\n }\n const normalized = normalizeText(text);\n if (seen.has(normalized)) {\n return;\n }\n seen.add(normalized);\n result.push(text);\n });\n\n return result;\n}\n\nfunction flowEmergyScopeDecision(row: JsonRecord): JsonRecord {\n const record = extractFlowRecord(row);\n const dataset = flowDatasetFromRow(row);\n const nameNode = deepGet(dataset, ['flowInformation', 'dataSetInformation', 'name'], {});\n const nameCandidates = langEntries(nameNode).map((entry) => entry.text);\n const signals: string[] = [];\n\n uniqueNonEmptyTexts(nameCandidates).forEach((text) => {\n if (textHasEmergyKeyword(text)) {\n signals.push(`emergy_name:${text}`);\n }\n });\n\n return {\n entity_type: 'flow',\n flow_id: record.id,\n version: record.version,\n name: record.name,\n flow_type: record.flowType,\n excluded: signals.length > 0,\n reason: signals.length > 0 ? 'emergy_named_flow' : '',\n signals,\n };\n}\n\nfunction processEmergyScopeDecision(\n processRow: JsonRecord,\n flowIndex: FlowIndex | null,\n): JsonRecord {\n const identity = extractProcessIdentity(processRow);\n const dataset = processDatasetFromRow(processRow);\n const referenceInfo = extractProcessReferenceFlowRef(processRow);\n const signals: string[] = [];\n let matchedRecord: FlowRecord | null =\n flowIndex?.byUuidVersion[`${referenceInfo.flow_id}@${referenceInfo.flow_version}`] ?? null;\n\n if (!matchedRecord && flowIndex?.byUuid[referenceInfo.flow_id]?.length) {\n matchedRecord = flowIndex.byUuid[referenceInfo.flow_id][0] ?? null;\n }\n\n if (matchedRecord) {\n const flowDecision = flowEmergyScopeDecision(matchedRecord.row);\n const flowSignals = (flowDecision.signals as unknown[]).filter(\n (value): value is string => typeof value === 'string',\n );\n signals.push(...flowSignals);\n }\n\n if (!signals.length) {\n const functionalUnitTexts = langEntries(\n deepGet(dataset, ['processInformation', 'quantitativeReference', 'functionalUnitOrOther']),\n ).map((entry) => entry.text);\n uniqueNonEmptyTexts([referenceInfo.flow_text, ...functionalUnitTexts]).forEach((text) => {\n if (textHasEmergyKeyword(text)) {\n signals.push(`process_ref_text:${text}`);\n }\n });\n }\n\n return {\n entity_type: 'process',\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n reference_flow_id: referenceInfo.flow_id,\n reference_flow_version: referenceInfo.flow_version,\n reference_exchange_internal_id: referenceInfo.exchange_internal_id,\n excluded: signals.length > 0,\n reason: signals.length > 0 ? 'reference_flow_name_mentions_emergy' : '',\n signals,\n };\n}\n\nfunction filterEmergyNamedProcesses(\n rows: JsonRecord[],\n flowIndex: FlowIndex | null,\n): {\n keptRows: JsonRecord[];\n excludedRows: JsonRecord[];\n} {\n const keptRows: JsonRecord[] = [];\n const excludedRows: JsonRecord[] = [];\n\n rows.forEach((row) => {\n const decision = processEmergyScopeDecision(row, flowIndex);\n if (decision.excluded === true) {\n excludedRows.push(decision);\n return;\n }\n keptRows.push(row);\n });\n\n return {\n keptRows,\n excludedRows,\n };\n}\n\nfunction classifyExchangeRef(\n processRow: JsonRecord,\n exchange: JsonRecord,\n scopeIndex: FlowIndex,\n catalogIndex: FlowIndex,\n aliasMap: JsonRecord,\n): ScanFinding {\n const identity = extractProcessIdentity(processRow);\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const flowUuid = coerceText(ref['@refObjectId']);\n const flowVersion = coerceText(ref['@version']);\n const finding: ScanFinding = {\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n exchange_direction: exchange.exchangeDirection,\n reference_flow_id: flowUuid,\n reference_flow_version: flowVersion,\n reference_flow_text: extractReferenceText(ref),\n issue_type: 'exists_in_target',\n severity: 'info',\n evidence: {},\n };\n\n if (!flowUuid) {\n finding.issue_type = 'no_reference';\n finding.severity = 'error';\n return finding;\n }\n\n const aliasTarget = aliasLookup(aliasMap, flowUuid, flowVersion || null);\n if (aliasTarget) {\n finding.issue_type = 'alias_target_available';\n finding.severity = 'warning';\n finding.evidence = {\n alias_target: aliasTarget,\n };\n }\n\n if (!flowVersion) {\n if (scopeIndex.byUuid[flowUuid]?.length) {\n finding.issue_type = 'version_missing';\n finding.severity = 'warning';\n return finding;\n }\n if (catalogIndex.byUuid[flowUuid]?.length) {\n finding.issue_type = 'exists_outside_target';\n finding.severity = 'warning';\n return finding;\n }\n finding.issue_type = 'missing_uuid';\n finding.severity = 'error';\n return finding;\n }\n\n const scopeMatch = scopeIndex.byUuidVersion[`${flowUuid}@${flowVersion}`];\n if (scopeMatch) {\n finding.evidence = {\n scope_group: '',\n flow_name: scopeMatch.name,\n };\n return finding;\n }\n\n if (scopeIndex.byUuid[flowUuid]?.length) {\n finding.issue_type = 'broken_version';\n finding.severity = 'error';\n finding.evidence = {\n available_versions_in_target: scopeIndex.byUuid[flowUuid]\n .map((record) => record.version)\n .sort(),\n };\n return finding;\n }\n\n if (\n catalogIndex.byUuidVersion[`${flowUuid}@${flowVersion}`] ||\n catalogIndex.byUuid[flowUuid]?.length\n ) {\n finding.issue_type = 'exists_outside_target';\n finding.severity = 'warning';\n return finding;\n }\n\n finding.issue_type = 'missing_uuid';\n finding.severity = 'error';\n return finding;\n}\n\nfunction buildFindingMap(findings: ScanFinding[]): Record<string, ScanFinding> {\n const result: Record<string, ScanFinding> = {};\n findings.forEach((finding) => {\n result[`${finding.process_id}@${finding.process_version}::${finding.exchange_internal_id}`] =\n finding;\n });\n return result;\n}\n\nfunction planExchangeRepair(\n exchange: JsonRecord,\n scopeIndex: FlowIndex,\n aliasMap: JsonRecord,\n finding: ScanFinding | null,\n autoPatchPolicy: AutoPatchPolicy,\n): RepairAction {\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const flowUuid = coerceText(ref['@refObjectId']);\n const flowVersion = coerceText(ref['@version']);\n const exchangeText =\n extractReferenceText(ref) || coerceText(exchange.exchangeName) || coerceText(exchange.name);\n\n const base: RepairAction = {\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n current_flow_id: flowUuid,\n current_flow_version: flowVersion,\n exchange_direction: exchange.exchangeDirection,\n exchange_text: exchangeText,\n current_issue_type: finding?.issue_type,\n auto_patch_policy: autoPatchPolicy,\n decision: 'manual_review',\n reason: 'no_deterministic_match',\n process_id: '',\n process_version: '',\n process_name: '',\n };\n\n if (flowUuid && flowVersion) {\n const currentRecord = scopeIndex.byUuidVersion[`${flowUuid}@${flowVersion}`];\n if (currentRecord) {\n return {\n ...base,\n decision: 'keep_as_is',\n reason: 'already_in_target',\n target_flow_id: currentRecord.id,\n target_flow_version: currentRecord.version,\n };\n }\n }\n\n const aliasTarget = aliasLookup(aliasMap, flowUuid, flowVersion || null);\n if (aliasTarget) {\n const targetRecord =\n scopeIndex.byUuidVersion[`${coerceText(aliasTarget.id)}@${coerceText(aliasTarget.version)}`];\n if (targetRecord && autoPatchPolicy !== 'disabled') {\n return {\n ...base,\n decision: 'auto_patch',\n reason: 'direct_alias_map',\n target_flow_id: targetRecord.id,\n target_flow_version: targetRecord.version,\n target_flow_name: targetRecord.name,\n target_reference: patchedFlowReference(ref, targetRecord),\n };\n }\n if (targetRecord) {\n return {\n ...base,\n decision: 'manual_review',\n reason: 'alias_target_found_but_policy_disallows_auto_patch',\n candidate_count: 1,\n candidate_refs: [\n {\n id: targetRecord.id,\n version: targetRecord.version,\n name: targetRecord.name,\n },\n ],\n };\n }\n }\n\n const candidates = scopeIndex.byName[normalizeText(exchangeText)] ?? [];\n if (candidates.length === 1) {\n const candidate = candidates[0];\n if (autoPatchPolicy === 'alias-or-unique-name') {\n return {\n ...base,\n decision: 'auto_patch',\n reason: 'unique_exact_name_match',\n target_flow_id: candidate.id,\n target_flow_version: candidate.version,\n target_flow_name: candidate.name,\n target_reference: patchedFlowReference(ref, candidate),\n };\n }\n return {\n ...base,\n decision: 'manual_review',\n reason: 'unique_exact_name_match_blocked_by_policy',\n candidate_count: 1,\n candidate_refs: [\n {\n id: candidate.id,\n version: candidate.version,\n name: candidate.name,\n },\n ],\n };\n }\n\n if (candidates.length > 1) {\n return {\n ...base,\n decision: 'manual_review',\n reason: 'ambiguous_exact_name_match',\n candidate_count: candidates.length,\n candidate_refs: candidates.map((candidate) => ({\n id: candidate.id,\n version: candidate.version,\n name: candidate.name,\n })),\n };\n }\n\n return base;\n}\n\nfunction buildUnifiedJsonDiff(before: unknown, after: unknown): string {\n const beforeLines = JSON.stringify(before, null, 2).split('\\n');\n const afterLines = JSON.stringify(after, null, 2).split('\\n');\n\n if (isDeepStrictEqual(beforeLines, afterLines)) {\n return '--- before.json\\n+++ after.json\\n';\n }\n\n let prefix = 0;\n while (\n prefix < beforeLines.length &&\n prefix < afterLines.length &&\n beforeLines[prefix] === afterLines[prefix]\n ) {\n prefix += 1;\n }\n\n let beforeSuffix = beforeLines.length - 1;\n let afterSuffix = afterLines.length - 1;\n while (\n beforeSuffix >= prefix &&\n afterSuffix >= prefix &&\n beforeLines[beforeSuffix] === afterLines[afterSuffix]\n ) {\n beforeSuffix -= 1;\n afterSuffix -= 1;\n }\n\n const beforeChanged = beforeLines.slice(prefix, beforeSuffix + 1);\n const afterChanged = afterLines.slice(prefix, afterSuffix + 1);\n const hunkHeader = `@@ -${prefix + 1},${beforeChanged.length} +${prefix + 1},${afterChanged.length} @@`;\n\n return [\n '--- before.json',\n '+++ after.json',\n hunkHeader,\n ...beforeChanged.map((line) => `-${line}`),\n ...afterChanged.map((line) => `+${line}`),\n '',\n ].join('\\n');\n}\n\nfunction deepDiffPaths(before: unknown, after: unknown, prefix: PathPart[] = []): PathPart[][] {\n if (typeof before !== typeof after || Array.isArray(before) !== Array.isArray(after)) {\n return [prefix];\n }\n\n if (Array.isArray(before) && Array.isArray(after)) {\n const paths: PathPart[][] = [];\n const maxLength = Math.max(before.length, after.length);\n for (let index = 0; index < maxLength; index += 1) {\n if (index >= before.length || index >= after.length) {\n paths.push([...prefix, index]);\n continue;\n }\n paths.push(...deepDiffPaths(before[index], after[index], [...prefix, index]));\n }\n return paths;\n }\n\n if (isRecord(before) && isRecord(after)) {\n const paths: PathPart[][] = [];\n const keys = new Set([...Object.keys(before), ...Object.keys(after)]);\n [...keys].sort().forEach((key) => {\n if (!(key in before) || !(key in after)) {\n paths.push([...prefix, key]);\n return;\n }\n paths.push(...deepDiffPaths(before[key], after[key], [...prefix, key]));\n });\n return paths;\n }\n\n return isDeepStrictEqual(before, after) ? [] : [prefix];\n}\n\nfunction pathContainsReferenceToFlow(pathParts: PathPart[]): boolean {\n return pathParts.includes('referenceToFlowDataSet');\n}\n\nfunction safeProcessKey(processId: string, version: string): string {\n const versionSlug = version.replace(/[^0-9A-Za-z._-]+/gu, '_') || 'unknown';\n return `${processId}__${versionSlug}`;\n}\n\nfunction writeRowsFile(filePath: string, rows: JsonRecord[]): string {\n if (filePath.toLowerCase().endsWith('.jsonl')) {\n return writeJsonLinesArtifact(filePath, rows);\n }\n return writeJsonArtifact(filePath, rows);\n}\n\nfunction mergeRowsByIdentity(\n existingRows: JsonRecord[],\n incomingRows: JsonRecord[],\n): {\n mergedRows: JsonRecord[];\n counts: {\n inserted: number;\n updated: number;\n unchanged: number;\n skipped_invalid: number;\n };\n} {\n const mergedRows = existingRows.map((row) => cloneJson(row));\n const keyToIndex: Record<string, number> = {};\n\n mergedRows.forEach((row, index) => {\n const identity = extractProcessIdentity(row);\n if (identity.id && identity.version) {\n keyToIndex[`${identity.id}@${identity.version}`] = index;\n }\n });\n\n let inserted = 0;\n let updated = 0;\n let unchanged = 0;\n let skippedInvalid = 0;\n\n incomingRows.forEach((row) => {\n const identity = extractProcessIdentity(row);\n if (!identity.id || !identity.version) {\n skippedInvalid += 1;\n return;\n }\n\n const key = `${identity.id}@${identity.version}`;\n if (!(key in keyToIndex)) {\n keyToIndex[key] = mergedRows.length;\n mergedRows.push(cloneJson(row));\n inserted += 1;\n return;\n }\n\n const existingIndex = keyToIndex[key];\n if (isDeepStrictEqual(mergedRows[existingIndex], row)) {\n unchanged += 1;\n return;\n }\n\n mergedRows[existingIndex] = cloneJson(row);\n updated += 1;\n });\n\n return {\n mergedRows,\n counts: {\n inserted,\n updated,\n unchanged,\n skipped_invalid: skippedInvalid,\n },\n };\n}\n\nfunction syncProcessPoolFile(poolFile: string, incomingRows: JsonRecord[]): JsonRecord {\n const poolPath = path.resolve(poolFile);\n const existingRows = existsSync(poolPath) ? loadRowsFromFile(poolPath) : [];\n const { mergedRows, counts } = mergeRowsByIdentity(existingRows, incomingRows);\n mergedRows.sort(processRowSortComparator);\n writeRowsFile(poolPath, mergedRows);\n\n return {\n pool_file: poolPath,\n pool_pre_count: existingRows.length,\n incoming_count: incomingRows.length,\n pool_post_count: mergedRows.length,\n ...counts,\n };\n}\n\nfunction resolveProcessValidator(\n tidasMode: TidasMode,\n deps: FlowRegenProductDeps,\n): {\n createProcess: ProcessSdkModule['createProcess'] | null;\n tidasValidation: boolean;\n} {\n if (tidasMode === 'skip') {\n return {\n createProcess: null,\n tidasValidation: false,\n };\n }\n\n try {\n const module = (deps.loadSdkModule ?? resolveLocalSdkModule)();\n if (typeof module.createProcess === 'function') {\n return {\n createProcess: module.createProcess,\n tidasValidation: true,\n };\n }\n\n if (tidasMode === 'required') {\n throw new CliError('Resolved tidas-sdk core module does not expose createProcess.', {\n code: 'FLOW_REGEN_PROCESS_SDK_INVALID',\n exitCode: 2,\n details: module.location ?? null,\n });\n }\n } catch (error) {\n if (tidasMode === 'required') {\n throw error;\n }\n }\n\n return {\n createProcess: null,\n tidasValidation: false,\n };\n}\n\nfunction formatValidationDetails(validation: unknown): string {\n if (validation === null || validation === undefined) {\n return 'Validator returned no result.';\n }\n\n if (validation instanceof Error) {\n return validation.message;\n }\n\n if (typeof validation === 'string') {\n return validation;\n }\n\n try {\n return JSON.stringify(validation);\n } catch {\n return String(validation);\n }\n}\n\nfunction evaluateProcessSdkValidation(\n payload: JsonRecord,\n createProcess: NonNullable<ProcessSdkModule['createProcess']>,\n): string | null {\n try {\n const entity = createProcess(payload, {\n mode: 'strict',\n throwOnError: false,\n deepValidation: true,\n });\n const validation =\n typeof entity?.validateEnhanced === 'function'\n ? entity.validateEnhanced()\n : typeof entity?.validate === 'function'\n ? entity.validate()\n : null;\n\n if (isRecord(validation) && validation.success === true) {\n return null;\n }\n\n return formatValidationDetails(validation);\n } catch (error) {\n return formatValidationDetails(error);\n }\n}\n\nfunction validateProcessPatch(\n originalRow: JsonRecord | null,\n patchedRow: JsonRecord,\n scopeIndex: FlowIndex,\n createProcess: NonNullable<ProcessSdkModule['createProcess']> | null,\n): ProcessPatchValidationResult {\n const identity = extractProcessIdentity(patchedRow);\n const issues: ProcessPatchValidationIssue[] = [];\n\n if (!originalRow) {\n issues.push({\n type: 'missing_original_row',\n severity: 'error',\n });\n return {\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n ok: false,\n issues,\n };\n }\n\n const illegalPaths = deepDiffPaths(originalRow, patchedRow).filter(\n (pathParts) => !pathContainsReferenceToFlow(pathParts),\n );\n if (illegalPaths.length > 0) {\n issues.push({\n type: 'non_reference_changes_detected',\n severity: 'error',\n paths: illegalPaths.map((pathParts) => pathParts.map((part) => String(part)).join('.')),\n });\n }\n\n const originalQuantitativeReference = coerceText(\n deepGet(processDatasetFromRow(originalRow), [\n 'processInformation',\n 'quantitativeReference',\n 'referenceToReferenceFlow',\n ]),\n );\n const patchedQuantitativeReference = coerceText(\n deepGet(processDatasetFromRow(patchedRow), [\n 'processInformation',\n 'quantitativeReference',\n 'referenceToReferenceFlow',\n ]),\n );\n if (originalQuantitativeReference !== patchedQuantitativeReference) {\n issues.push({\n type: 'quantitative_reference_changed',\n severity: 'error',\n before: originalQuantitativeReference,\n after: patchedQuantitativeReference,\n });\n }\n\n const originalExchangeCount = exchangeRecords(originalRow).length;\n const patchedExchangeCount = exchangeRecords(patchedRow).length;\n if (originalExchangeCount !== patchedExchangeCount) {\n issues.push({\n type: 'exchange_count_changed',\n severity: 'error',\n before: originalExchangeCount,\n after: patchedExchangeCount,\n });\n }\n\n exchangeRecords(patchedRow).forEach((exchange) => {\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const flowId = coerceText(ref['@refObjectId']);\n const flowVersion = coerceText(ref['@version']);\n\n if (!flowId || !flowVersion) {\n issues.push({\n type: 'missing_flow_reference_after_patch',\n severity: 'error',\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n flow_id: flowId,\n flow_version: flowVersion,\n });\n return;\n }\n\n if (!scopeIndex.byUuidVersion[`${flowId}@${flowVersion}`]) {\n issues.push({\n type: 'patched_reference_not_in_scope_catalog',\n severity: 'error',\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n flow_id: flowId,\n flow_version: flowVersion,\n });\n }\n });\n\n if (createProcess) {\n const details = evaluateProcessSdkValidation(processDatasetFromRow(patchedRow), createProcess);\n if (details !== null) {\n issues.push({\n type: 'tidas_validation_failed',\n severity: 'error',\n details,\n });\n }\n }\n\n return {\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n ok: issues.length === 0,\n issues,\n };\n}\n\nfunction buildScanStageFiles(outDir: string): ScanStageFiles {\n return {\n out_dir: outDir,\n emergy_excluded_processes: path.join(outDir, 'emergy-excluded-processes.json'),\n summary: path.join(outDir, 'scan-summary.json'),\n findings: path.join(outDir, 'scan-findings.json'),\n findings_jsonl: path.join(outDir, 'scan-findings.jsonl'),\n };\n}\n\nfunction buildRepairStageFiles(outDir: string): RepairStageFiles {\n return {\n out_dir: outDir,\n plan: path.join(outDir, 'repair-plan.json'),\n plan_jsonl: path.join(outDir, 'repair-plan.jsonl'),\n manual_review_queue: path.join(outDir, 'manual-review-queue.jsonl'),\n summary: path.join(outDir, 'repair-summary.json'),\n };\n}\n\nfunction buildApplyStageFiles(outDir: string): ApplyStageFiles {\n return {\n ...buildRepairStageFiles(outDir),\n patched_processes: path.join(outDir, 'patched-processes.json'),\n patch_root: path.join(outDir, 'process-patches'),\n };\n}\n\nfunction buildValidateStageFiles(outDir: string): ValidateStageFiles {\n return {\n out_dir: outDir,\n report: path.join(outDir, 'validation-report.json'),\n failures: path.join(outDir, 'validation-failures.jsonl'),\n };\n}\n\nfunction loadOptionalScanFindings(\n scanFindingsFile: string | null,\n requiredCode: string,\n missingCode: string,\n): {\n resolvedFile: string | null;\n scanFindings: ScanFinding[];\n} {\n if (!scanFindingsFile) {\n return {\n resolvedFile: null,\n scanFindings: [],\n };\n }\n\n const resolvedFile = assertInputFile(scanFindingsFile, requiredCode, missingCode);\n\n return {\n resolvedFile,\n scanFindings: loadRowsFromFile(resolvedFile) as ScanFinding[],\n };\n}\n\nfunction runScanStage(\n processes: JsonRecord[],\n scopeIndex: FlowIndex,\n catalogIndex: FlowIndex,\n aliasMap: JsonRecord,\n outDir: string,\n excludeEmergy: boolean,\n): ScanStageResult {\n const files = buildScanStageFiles(outDir);\n const { keptRows, excludedRows } = excludeEmergy\n ? filterEmergyNamedProcesses(processes, catalogIndex)\n : { keptRows: processes, excludedRows: [] };\n const findings: ScanFinding[] = [];\n const issueProcessKeys = new Set<string>();\n const issueCounts: Record<string, number> = {};\n let exchangeCount = 0;\n\n keptRows.forEach((processRow) => {\n const identity = extractProcessIdentity(processRow);\n const exchanges = exchangeRecords(processRow);\n exchangeCount += exchanges.length;\n\n exchanges.forEach((exchange) => {\n const finding = classifyExchangeRef(processRow, exchange, scopeIndex, catalogIndex, aliasMap);\n findings.push(finding);\n issueCounts[finding.issue_type] = (issueCounts[finding.issue_type] ?? 0) + 1;\n if (finding.issue_type !== 'exists_in_target') {\n issueProcessKeys.add(`${identity.id}@${identity.version}`);\n }\n });\n });\n\n const summary = {\n process_count_before_emergy_exclusion: processes.length,\n process_count: keptRows.length,\n emergy_excluded_process_count: excludedRows.length,\n exchange_count: exchangeCount,\n issue_counts: issueCounts,\n processes_with_issues: issueProcessKeys.size,\n };\n\n writeJsonArtifact(files.emergy_excluded_processes, excludedRows);\n writeJsonArtifact(files.summary, summary);\n writeJsonArtifact(files.findings, findings);\n writeJsonLinesArtifact(files.findings_jsonl, findings);\n\n return {\n filteredProcesses: keptRows,\n emergyExcludedProcesses: excludedRows,\n findings,\n summary,\n files,\n };\n}\n\nfunction runRepairStage(options: {\n processes: JsonRecord[];\n scopeIndex: FlowIndex;\n aliasMap: JsonRecord;\n scanFindings: ScanFinding[];\n autoPatchPolicy: AutoPatchPolicy;\n outDir: string;\n apply: boolean;\n processPoolFile: string | null;\n}): RepairStageResult {\n const files = options.apply\n ? buildApplyStageFiles(options.outDir)\n : buildRepairStageFiles(options.outDir);\n const findingMap = buildFindingMap(options.scanFindings);\n const repairPlan: RepairAction[] = [];\n const manualQueue: RepairAction[] = [];\n const patchedRows: JsonRecord[] = [];\n const decisionCounts: Record<string, number> = {};\n\n options.processes.forEach((processRow) => {\n const identity = extractProcessIdentity(processRow);\n const processKey = `${identity.id}@${identity.version}`;\n const workingRow = options.apply ? cloneJson(processRow) : processRow;\n const processPlan: RepairAction[] = [];\n let changed = false;\n\n exchangeRecords(workingRow).forEach((exchange) => {\n const action = planExchangeRepair(\n exchange,\n options.scopeIndex,\n options.aliasMap,\n findingMap[`${processKey}::${coerceText(exchange['@dataSetInternalID'])}`] ?? null,\n options.autoPatchPolicy,\n );\n action.process_id = identity.id;\n action.process_version = identity.version;\n action.process_name = identity.name;\n processPlan.push(action);\n repairPlan.push(action);\n decisionCounts[action.decision] = (decisionCounts[action.decision] ?? 0) + 1;\n\n if (action.decision === 'manual_review') {\n manualQueue.push(action);\n }\n\n if (options.apply && action.decision === 'auto_patch' && isRecord(action.target_reference)) {\n exchange.referenceToFlowDataSet = cloneJson(action.target_reference);\n changed = true;\n }\n });\n\n if (options.apply && changed) {\n patchedRows.push(workingRow);\n const patchRoot = (files as ApplyStageFiles).patch_root;\n const processDir = path.join(patchRoot, safeProcessKey(identity.id, identity.version));\n writeJsonArtifact(path.join(processDir, 'before.json'), processRow);\n writeJsonArtifact(path.join(processDir, 'after.json'), workingRow);\n writeJsonArtifact(\n path.join(processDir, 'evidence.json'),\n processPlan.filter((item) => item.decision === 'auto_patch'),\n );\n writeTextArtifact(\n path.join(processDir, 'diff.patch'),\n buildUnifiedJsonDiff(processRow, workingRow),\n );\n }\n });\n\n const summary: RepairStageResult['summary'] = {\n auto_patch_policy: options.autoPatchPolicy,\n process_count: options.processes.length,\n repair_item_count: repairPlan.length,\n decision_counts: decisionCounts,\n patched_process_count: options.apply ? patchedRows.length : 0,\n };\n\n if (options.apply && options.processPoolFile) {\n summary.process_pool_sync = syncProcessPoolFile(options.processPoolFile, patchedRows);\n }\n\n writeJsonArtifact(files.plan, repairPlan);\n writeJsonLinesArtifact(files.plan_jsonl, repairPlan);\n writeJsonLinesArtifact(files.manual_review_queue, manualQueue);\n writeJsonArtifact(files.summary, summary);\n\n if (options.apply) {\n writeJsonArtifact((files as ApplyStageFiles).patched_processes, patchedRows);\n }\n\n return {\n plan: repairPlan,\n manualQueue,\n summary,\n files,\n patchedRows,\n };\n}\n\nfunction runValidateStage(options: {\n originalRows: JsonRecord[];\n patchedRows: JsonRecord[];\n scopeIndex: FlowIndex;\n outDir: string;\n tidasMode: TidasMode;\n deps: FlowRegenProductDeps;\n}): ValidateStageResult {\n const files = buildValidateStageFiles(options.outDir);\n const validator = resolveProcessValidator(options.tidasMode, options.deps);\n const originalMap: Record<string, JsonRecord> = {};\n options.originalRows.forEach((row) => {\n const key = processRowKey(row);\n if (key) {\n originalMap[key] = row;\n }\n });\n\n const results = options.patchedRows.map((patchedRow) => {\n const key = processRowKey(patchedRow);\n return validateProcessPatch(\n key ? (originalMap[key] ?? null) : null,\n patchedRow,\n options.scopeIndex,\n validator.createProcess ?? null,\n );\n });\n const failures = results.filter((result) => !result.ok);\n const summary: ProcessPatchValidationSummary = {\n patched_process_count: options.patchedRows.length,\n passed: results.length - failures.length,\n failed: failures.length,\n tidas_validation: validator.tidasValidation,\n };\n const report: ProcessPatchValidationReport = {\n summary,\n results,\n };\n\n writeJsonArtifact(files.report, report);\n writeJsonLinesArtifact(files.failures, failures);\n\n return {\n summary,\n results,\n failures,\n files,\n };\n}\n\nexport async function runFlowScanProcessFlowRefs(\n options: RunFlowScanProcessFlowRefsOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowScanProcessFlowRefsReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_PROCESSES_FILE_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_SCAN_PROCESS_FLOW_REFS_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const catalogFlowFiles =\n options.catalogFlowFiles && options.catalogFlowFiles.length > 0\n ? assertInputFiles(\n options.catalogFlowFiles,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_CATALOG_FLOW_FILES_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_CATALOG_FLOW_FILE_NOT_FOUND',\n )\n : scopeFlowFiles;\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const outDir = assertOutDir(options.outDir);\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const catalogRows = catalogFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_NOT_FOUND',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const catalogIndex = buildFlowIndex(catalogRows);\n const scanStage = runScanStage(\n processes,\n scopeIndex,\n catalogIndex,\n aliasMap,\n outDir,\n options.excludeEmergy === true,\n );\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_scan_process_flow_refs',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n catalog_flow_files: catalogFlowFiles,\n alias_map_file: aliasMapFile,\n exclude_emergy: options.excludeEmergy === true,\n out_dir: outDir,\n summary: scanStage.summary,\n files: scanStage.files,\n };\n}\n\nexport async function runFlowPlanProcessFlowRepairs(\n options: RunFlowPlanProcessFlowRepairsOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowPlanProcessFlowRepairsReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const { resolvedFile: scanFindingsFile, scanFindings } = loadOptionalScanFindings(\n options.scanFindingsFile ?? null,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_NOT_FOUND',\n );\n const outDir = assertOutDir(options.outDir);\n const autoPatchPolicy = options.autoPatchPolicy ?? 'alias-only';\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const repairStage = runRepairStage({\n processes,\n scopeIndex,\n aliasMap,\n scanFindings,\n autoPatchPolicy,\n outDir,\n apply: false,\n processPoolFile: null,\n });\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_plan_process_flow_repairs',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n alias_map_file: aliasMapFile,\n scan_findings_file: scanFindingsFile,\n auto_patch_policy: autoPatchPolicy,\n out_dir: outDir,\n summary: repairStage.summary,\n files: repairStage.files as RepairStageFiles,\n };\n}\n\nexport async function runFlowApplyProcessFlowRepairs(\n options: RunFlowApplyProcessFlowRepairsOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowApplyProcessFlowRepairsReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const { resolvedFile: scanFindingsFile, scanFindings } = loadOptionalScanFindings(\n options.scanFindingsFile ?? null,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_NOT_FOUND',\n );\n const outDir = assertOutDir(options.outDir);\n const autoPatchPolicy = options.autoPatchPolicy ?? 'alias-only';\n const processPoolFile = options.processPoolFile ? path.resolve(options.processPoolFile) : null;\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const repairStage = runRepairStage({\n processes,\n scopeIndex,\n aliasMap,\n scanFindings,\n autoPatchPolicy,\n outDir,\n apply: true,\n processPoolFile,\n });\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_apply_process_flow_repairs',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n alias_map_file: aliasMapFile,\n scan_findings_file: scanFindingsFile,\n auto_patch_policy: autoPatchPolicy,\n process_pool_file: processPoolFile,\n out_dir: outDir,\n summary: repairStage.summary,\n files: repairStage.files as ApplyStageFiles,\n };\n}\n\nfunction buildReportFiles(outDir: string, apply: boolean): FlowRegenProductFiles {\n return {\n report: path.join(outDir, 'flow-regen-product-report.json'),\n scan: buildScanStageFiles(path.join(outDir, 'scan')),\n repair: buildRepairStageFiles(path.join(outDir, 'repair')),\n apply: apply ? buildApplyStageFiles(path.join(outDir, 'repair-apply')) : null,\n validate: apply ? buildValidateStageFiles(path.join(outDir, 'validate')) : null,\n };\n}\n\nexport async function runFlowRegenProduct(\n options: RunFlowRegenProductOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowRegenProductReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_REGEN_PROCESSES_FILE_REQUIRED',\n 'FLOW_REGEN_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_REGEN_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_REGEN_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const catalogFlowFiles =\n options.catalogFlowFiles && options.catalogFlowFiles.length > 0\n ? assertInputFiles(\n options.catalogFlowFiles,\n 'FLOW_REGEN_CATALOG_FLOW_FILE_REQUIRED',\n 'FLOW_REGEN_CATALOG_FLOW_FILE_NOT_FOUND',\n )\n : scopeFlowFiles;\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_REGEN_ALIAS_MAP_REQUIRED',\n 'FLOW_REGEN_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const outDir = assertOutDir(options.outDir);\n const processPoolFile = options.processPoolFile ? path.resolve(options.processPoolFile) : null;\n const apply = options.apply === true;\n const autoPatchPolicy = options.autoPatchPolicy ?? 'alias-only';\n const tidasMode = options.tidasMode ?? 'auto';\n const files = buildReportFiles(outDir, apply);\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const catalogRows = catalogFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_REGEN_ALIAS_MAP_REQUIRED',\n 'FLOW_REGEN_ALIAS_MAP_NOT_FOUND',\n 'FLOW_REGEN_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const catalogIndex = buildFlowIndex(catalogRows);\n\n const scanStage = runScanStage(\n processes,\n scopeIndex,\n catalogIndex,\n aliasMap,\n files.scan.out_dir,\n options.excludeEmergy === true,\n );\n const repairStage = runRepairStage({\n processes: scanStage.filteredProcesses,\n scopeIndex,\n aliasMap,\n scanFindings: scanStage.findings,\n autoPatchPolicy,\n outDir: files.repair.out_dir,\n apply: false,\n processPoolFile: null,\n });\n const applyStage = apply\n ? runRepairStage({\n processes: scanStage.filteredProcesses,\n scopeIndex,\n aliasMap,\n scanFindings: scanStage.findings,\n autoPatchPolicy,\n outDir: files.apply!.out_dir,\n apply: true,\n processPoolFile,\n })\n : null;\n const validateStage =\n apply && applyStage\n ? runValidateStage({\n originalRows: scanStage.filteredProcesses,\n patchedRows: applyStage.patchedRows,\n scopeIndex,\n outDir: files.validate!.out_dir,\n tidasMode,\n deps,\n })\n : null;\n\n const report: FlowRegenProductReport = {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_regen_product',\n mode: apply ? 'apply' : 'plan',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n catalog_flow_files: catalogFlowFiles,\n alias_map_file: aliasMapFile,\n exclude_emergy: options.excludeEmergy === true,\n auto_patch_policy: autoPatchPolicy,\n process_pool_file: processPoolFile,\n tidas_mode: tidasMode,\n out_dir: outDir,\n counts: {\n process_count_before_emergy_exclusion:\n scanStage.summary.process_count_before_emergy_exclusion,\n process_count: scanStage.summary.process_count,\n emergy_excluded_process_count: scanStage.summary.emergy_excluded_process_count,\n exchange_count: scanStage.summary.exchange_count,\n issue_counts: scanStage.summary.issue_counts,\n processes_with_issues: scanStage.summary.processes_with_issues,\n repair_item_count: repairStage.summary.repair_item_count,\n decision_counts: repairStage.summary.decision_counts,\n patched_process_count: applyStage?.summary.patched_process_count ?? 0,\n validation_passed_count: validateStage?.summary.passed ?? null,\n validation_failed_count: validateStage?.summary.failed ?? null,\n },\n validation: {\n enabled: apply,\n tidas_validation: validateStage?.summary.tidas_validation ?? false,\n ok: validateStage ? validateStage.summary.failed === 0 : null,\n },\n files,\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport async function runFlowValidateProcesses(\n options: RunFlowValidateProcessesOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowValidateProcessesReport> {\n const originalProcessesFile = assertInputFile(\n options.originalProcessesFile,\n 'FLOW_VALIDATE_PROCESSES_ORIGINAL_FILE_REQUIRED',\n 'FLOW_VALIDATE_PROCESSES_ORIGINAL_FILE_NOT_FOUND',\n );\n const patchedProcessesFile = assertInputFile(\n options.patchedProcessesFile,\n 'FLOW_VALIDATE_PROCESSES_PATCHED_FILE_REQUIRED',\n 'FLOW_VALIDATE_PROCESSES_PATCHED_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_VALIDATE_PROCESSES_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_VALIDATE_PROCESSES_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const outDir = assertOutDir(options.outDir);\n const tidasMode = options.tidasMode ?? 'auto';\n const now = deps.now ?? (() => new Date());\n\n const originalRows = loadRowsFromFile(originalProcessesFile);\n const patchedRows = loadRowsFromFile(patchedProcessesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const scopeIndex = buildFlowIndex(scopeRows);\n const validateStage = runValidateStage({\n originalRows,\n patchedRows,\n scopeIndex,\n outDir,\n tidasMode,\n deps,\n });\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_validate_processes',\n original_processes_file: originalProcessesFile,\n patched_processes_file: patchedProcessesFile,\n scope_flow_files: scopeFlowFiles,\n out_dir: outDir,\n tidas_mode: tidasMode,\n summary: validateStage.summary,\n files: validateStage.files,\n results: validateStage.results,\n };\n}\n\nexport const __testInternals = {\n resolveCliRepoRoot,\n assertInputFile,\n assertInputFiles,\n assertOutDir,\n readJsonObjectFile,\n resolveLocalSdkModule,\n processDatasetFromRow,\n extractProcessIdentity,\n exchangeRecords,\n extractProcessReferenceExchange,\n extractReferenceText,\n extractProcessReferenceFlowRef,\n processRowKey,\n versionKey,\n compareVersionKeys,\n processRowSortComparator,\n buildFlowIndex,\n aliasLookup,\n buildLocalDatasetUri,\n preserveShortDescriptionShape,\n flowReferenceFromRecord,\n patchedFlowReference,\n langEntries,\n textHasEmergyKeyword,\n uniqueNonEmptyTexts,\n flowEmergyScopeDecision,\n processEmergyScopeDecision,\n filterEmergyNamedProcesses,\n classifyExchangeRef,\n buildFindingMap,\n planExchangeRepair,\n buildUnifiedJsonDiff,\n deepDiffPaths,\n pathContainsReferenceToFlow,\n safeProcessKey,\n writeRowsFile,\n mergeRowsByIdentity,\n syncProcessPoolFile,\n buildSdkCandidates,\n resolveSdkModuleFromCandidates,\n resolveProcessValidator,\n formatValidationDetails,\n evaluateProcessSdkValidation,\n validateProcessPatch,\n buildScanStageFiles,\n buildRepairStageFiles,\n buildApplyStageFiles,\n buildValidateStageFiles,\n runScanStage,\n runRepairStage,\n runValidateStage,\n buildReportFiles,\n};\n"]}
1
+ {"version":3,"file":"flow-regen-product.js","sourceRoot":"","sources":["../../../src/lib/flow-regen-product.ts"],"names":[],"mappings":"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","sourcesContent":["import { createRequire } from 'node:module';\nimport { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { isDeepStrictEqual } from 'node:util';\nimport { fileURLToPath } from 'node:url';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n deepGet,\n extractFlowRecord,\n flowDatasetFromRow,\n isRecord,\n listify,\n loadRowsFromFile,\n normalizeText,\n type FlowRecord,\n type JsonRecord,\n} from './flow-governance.js';\nimport {\n type SdkValidationEntity,\n validateEntityWithDeepFallback,\n} from './tidas-sdk-validation.js';\nimport { resolveRepoRootFrom } from './validation.js';\n\nconst EMERGY_TEXT_KEYWORDS = [\n 'emergy',\n '能值',\n '太阳能值',\n 'solar emergy',\n 'solar emjoule',\n 'sej',\n] as const;\n\nexport type AutoPatchPolicy = 'disabled' | 'alias-only' | 'alias-or-unique-name';\nexport type TidasMode = 'auto' | 'required' | 'skip';\ntype PathPart = string | number;\n\ntype LangEntry = {\n lang: string;\n text: string;\n};\n\ntype ProcessIdentity = {\n id: string;\n version: string;\n name: string;\n};\n\ntype FlowIndex = {\n records: FlowRecord[];\n byUuid: Record<string, FlowRecord[]>;\n byUuidVersion: Record<string, FlowRecord>;\n byName: Record<string, FlowRecord[]>;\n};\n\ntype ScanFinding = {\n process_id: string;\n process_version: string;\n process_name: string;\n exchange_internal_id: string;\n exchange_direction: unknown;\n reference_flow_id: string;\n reference_flow_version: string;\n reference_flow_text: string;\n issue_type: string;\n severity: 'info' | 'warning' | 'error';\n evidence: JsonRecord;\n};\n\ntype RepairAction = {\n process_id: string;\n process_version: string;\n process_name: string;\n exchange_internal_id: string;\n current_flow_id: string;\n current_flow_version: string;\n exchange_direction: unknown;\n exchange_text: string;\n current_issue_type?: string;\n auto_patch_policy: AutoPatchPolicy;\n decision: 'keep_as_is' | 'auto_patch' | 'manual_review';\n reason: string;\n target_flow_id?: string;\n target_flow_version?: string;\n target_flow_name?: string;\n target_reference?: JsonRecord;\n candidate_count?: number;\n candidate_refs?: Array<Record<string, string>>;\n};\n\nexport type ProcessPatchValidationIssue = JsonRecord & {\n type: string;\n severity: 'error';\n};\n\nexport type ProcessPatchValidationResult = {\n process_id: string;\n process_version: string;\n process_name: string;\n ok: boolean;\n issues: ProcessPatchValidationIssue[];\n};\n\nexport type ProcessPatchValidationSummary = {\n patched_process_count: number;\n passed: number;\n failed: number;\n tidas_validation: boolean;\n};\n\ntype ProcessPatchValidationReport = {\n summary: ProcessPatchValidationSummary;\n results: ProcessPatchValidationResult[];\n};\n\nexport type ScanStageFiles = {\n out_dir: string;\n emergy_excluded_processes: string;\n summary: string;\n findings: string;\n findings_jsonl: string;\n};\n\nexport type RepairStageFiles = {\n out_dir: string;\n plan: string;\n plan_jsonl: string;\n manual_review_queue: string;\n summary: string;\n};\n\nexport type ApplyStageFiles = RepairStageFiles & {\n patched_processes: string;\n patch_root: string;\n};\n\nexport type ValidateStageFiles = {\n out_dir: string;\n report: string;\n failures: string;\n};\n\nexport type FlowProcessRefScanSummary = {\n process_count_before_emergy_exclusion: number;\n process_count: number;\n emergy_excluded_process_count: number;\n exchange_count: number;\n issue_counts: Record<string, number>;\n processes_with_issues: number;\n};\n\nexport type FlowProcessFlowRepairSummary = {\n auto_patch_policy: AutoPatchPolicy;\n process_count: number;\n repair_item_count: number;\n decision_counts: Record<string, number>;\n patched_process_count: number;\n process_pool_sync?: JsonRecord;\n};\n\ntype FlowRegenProductFiles = {\n report: string;\n scan: ScanStageFiles;\n repair: RepairStageFiles;\n apply: ApplyStageFiles | null;\n validate: ValidateStageFiles | null;\n};\n\ntype FlowRegenProductCounts = {\n process_count_before_emergy_exclusion: number;\n process_count: number;\n emergy_excluded_process_count: number;\n exchange_count: number;\n issue_counts: Record<string, number>;\n processes_with_issues: number;\n repair_item_count: number;\n decision_counts: Record<string, number>;\n patched_process_count: number;\n validation_passed_count: number | null;\n validation_failed_count: number | null;\n};\n\nexport type FlowRegenProductReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_regen_product';\n mode: 'plan' | 'apply';\n processes_file: string;\n scope_flow_files: string[];\n catalog_flow_files: string[];\n alias_map_file: string | null;\n exclude_emergy: boolean;\n auto_patch_policy: AutoPatchPolicy;\n process_pool_file: string | null;\n tidas_mode: TidasMode;\n out_dir: string;\n counts: FlowRegenProductCounts;\n validation: {\n enabled: boolean;\n tidas_validation: boolean;\n ok: boolean | null;\n };\n files: FlowRegenProductFiles;\n};\n\nexport type RunFlowRegenProductOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n catalogFlowFiles?: string[];\n aliasMapFile?: string | null;\n outDir: string;\n excludeEmergy?: boolean;\n autoPatchPolicy?: AutoPatchPolicy;\n apply?: boolean;\n processPoolFile?: string | null;\n tidasMode?: TidasMode;\n};\n\nexport type RunFlowValidateProcessesOptions = {\n originalProcessesFile: string;\n patchedProcessesFile: string;\n scopeFlowFiles: string[];\n outDir: string;\n tidasMode?: TidasMode;\n};\n\nexport type RunFlowScanProcessFlowRefsOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n catalogFlowFiles?: string[];\n aliasMapFile?: string | null;\n excludeEmergy?: boolean;\n outDir: string;\n};\n\nexport type RunFlowPlanProcessFlowRepairsOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n aliasMapFile?: string | null;\n scanFindingsFile?: string | null;\n autoPatchPolicy?: AutoPatchPolicy;\n outDir: string;\n};\n\nexport type RunFlowApplyProcessFlowRepairsOptions = {\n processesFile: string;\n scopeFlowFiles: string[];\n aliasMapFile?: string | null;\n scanFindingsFile?: string | null;\n autoPatchPolicy?: AutoPatchPolicy;\n processPoolFile?: string | null;\n outDir: string;\n};\n\nexport type FlowValidateProcessesReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_validate_processes';\n original_processes_file: string;\n patched_processes_file: string;\n scope_flow_files: string[];\n out_dir: string;\n tidas_mode: TidasMode;\n summary: ProcessPatchValidationSummary;\n files: ValidateStageFiles;\n results: ProcessPatchValidationResult[];\n};\n\nexport type FlowScanProcessFlowRefsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_scan_process_flow_refs';\n processes_file: string;\n scope_flow_files: string[];\n catalog_flow_files: string[];\n alias_map_file: string | null;\n exclude_emergy: boolean;\n out_dir: string;\n summary: FlowProcessRefScanSummary;\n files: ScanStageFiles;\n};\n\nexport type FlowPlanProcessFlowRepairsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_plan_process_flow_repairs';\n processes_file: string;\n scope_flow_files: string[];\n alias_map_file: string | null;\n scan_findings_file: string | null;\n auto_patch_policy: AutoPatchPolicy;\n out_dir: string;\n summary: FlowProcessFlowRepairSummary;\n files: RepairStageFiles;\n};\n\nexport type FlowApplyProcessFlowRepairsReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_apply_process_flow_repairs';\n processes_file: string;\n scope_flow_files: string[];\n alias_map_file: string | null;\n scan_findings_file: string | null;\n auto_patch_policy: AutoPatchPolicy;\n process_pool_file: string | null;\n out_dir: string;\n summary: FlowProcessFlowRepairSummary;\n files: ApplyStageFiles;\n};\n\ntype ProcessSdkModule = {\n createProcess?: (\n data?: unknown,\n validationConfig?: {\n mode?: 'strict' | 'weak' | 'ignore';\n throwOnError?: boolean;\n deepValidation?: boolean;\n },\n ) => SdkValidationEntity;\n location?: string;\n};\n\ntype FlowRegenProductDeps = {\n loadSdkModule?: () => ProcessSdkModule;\n now?: () => Date;\n};\n\ntype ScanStageResult = {\n filteredProcesses: JsonRecord[];\n emergyExcludedProcesses: JsonRecord[];\n findings: ScanFinding[];\n summary: FlowProcessRefScanSummary;\n files: ScanStageFiles;\n};\n\ntype RepairStageResult = {\n plan: RepairAction[];\n manualQueue: RepairAction[];\n summary: FlowProcessFlowRepairSummary;\n files: RepairStageFiles | ApplyStageFiles;\n patchedRows: JsonRecord[];\n};\n\ntype ValidateStageResult = {\n summary: ProcessPatchValidationSummary;\n results: ProcessPatchValidationResult[];\n failures: ProcessPatchValidationResult[];\n files: ValidateStageFiles;\n};\n\nfunction resolveCliRepoRoot(): string {\n return resolveRepoRootFrom(path.dirname(fileURLToPath(import.meta.url)));\n}\n\nfunction buildSdkCandidates(): string[] {\n return ['@tiangong-lca/tidas-sdk/core'];\n}\n\nfunction resolveSdkModuleFromCandidates(\n requireFn: NodeJS.Require,\n candidates: string[],\n): ProcessSdkModule & { location: string } {\n const details: string[] = [];\n\n for (const candidate of candidates) {\n try {\n const loaded = requireFn(candidate) as ProcessSdkModule;\n if (typeof loaded.createProcess === 'function') {\n return {\n ...loaded,\n location: candidate,\n };\n }\n details.push(`Candidate missing createProcess export: ${candidate}`);\n } catch (error) {\n details.push(`Failed to load ${candidate}: ${String(error)}`);\n }\n }\n\n throw new CliError('Unable to resolve the local tidas-sdk process factory.', {\n code: 'FLOW_REGEN_PROCESS_SDK_NOT_FOUND',\n exitCode: 2,\n details,\n });\n}\n\nfunction resolveLocalSdkModule(): ProcessSdkModule & { location: string } {\n return resolveSdkModuleFromCandidates(createRequire(import.meta.url), buildSdkCandidates());\n}\n\nfunction cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction assertInputFile(inputFile: string, requiredCode: string, missingCode: string): string {\n if (!inputFile) {\n throw new CliError('Missing required input file value.', {\n code: requiredCode,\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code: missingCode,\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assertInputFiles(\n inputFiles: string[],\n requiredCode: string,\n missingCode: string,\n): string[] {\n if (!inputFiles.length) {\n throw new CliError('At least one input file is required.', {\n code: requiredCode,\n exitCode: 2,\n });\n }\n\n return inputFiles.map((inputFile) => assertInputFile(inputFile, requiredCode, missingCode));\n}\n\nfunction assertOutDir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_REGEN_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n\n return path.resolve(outDir);\n}\n\nfunction readJsonObjectFile(\n filePath: string,\n requiredCode: string,\n missingCode: string,\n invalidCode: string,\n): JsonRecord {\n const resolved = assertInputFile(filePath, requiredCode, missingCode);\n let parsed: unknown;\n try {\n parsed = JSON.parse(readFileSync(resolved, 'utf8'));\n } catch (error) {\n throw new CliError(`Expected JSON object file: ${resolved}`, {\n code: invalidCode,\n exitCode: 2,\n details: String(error),\n });\n }\n\n if (!isRecord(parsed)) {\n throw new CliError(`Expected JSON object file: ${resolved}`, {\n code: invalidCode,\n exitCode: 2,\n });\n }\n\n return parsed;\n}\n\nfunction processDatasetFromRow(row: JsonRecord): JsonRecord {\n const payload = isRecord(row.json_ordered)\n ? row.json_ordered\n : isRecord(row.json)\n ? row.json\n : row;\n return isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n}\n\nfunction extractProcessIdentity(row: JsonRecord): ProcessIdentity {\n const dataset = processDatasetFromRow(row);\n const info = deepGet(dataset, ['processInformation', 'dataSetInformation'], {}) as JsonRecord;\n const id = coerceText(row.id) || coerceText(info['common:UUID']);\n const version =\n coerceText(row.version) ||\n coerceText(\n deepGet(dataset, [\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n ) ||\n '01.00.000';\n const name = coerceText(deepGet(info, ['name', 'baseName']) ?? info.name) || id;\n\n return { id, version, name };\n}\n\nfunction exchangeRecords(processRow: JsonRecord): JsonRecord[] {\n const dataset = processDatasetFromRow(processRow);\n return listify(deepGet(dataset, ['exchanges', 'exchange'], [])).filter(isRecord);\n}\n\nfunction extractProcessReferenceExchange(processRow: JsonRecord): JsonRecord | null {\n const dataset = processDatasetFromRow(processRow);\n const referenceInternalId = coerceText(\n deepGet(dataset, ['processInformation', 'quantitativeReference', 'referenceToReferenceFlow']),\n );\n const exchanges = exchangeRecords(processRow);\n\n if (referenceInternalId) {\n const exact = exchanges.find(\n (exchange) => coerceText(exchange['@dataSetInternalID']) === referenceInternalId,\n );\n if (exact) {\n return exact;\n }\n }\n\n const outputExchange = exchanges.find(\n (exchange) => coerceText(exchange.exchangeDirection).toLowerCase() === 'output',\n );\n if (outputExchange) {\n return outputExchange;\n }\n\n return exchanges[0] ?? null;\n}\n\nfunction extractReferenceText(ref: unknown): string {\n if (!isRecord(ref)) {\n return coerceText(ref);\n }\n return coerceText(ref['common:shortDescription']);\n}\n\nfunction extractProcessReferenceFlowRef(processRow: JsonRecord): {\n flow_id: string;\n flow_version: string;\n flow_text: string;\n exchange_internal_id: string;\n} {\n const exchange = extractProcessReferenceExchange(processRow) ?? {};\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n\n return {\n flow_id: coerceText(ref['@refObjectId']),\n flow_version: coerceText(ref['@version']),\n flow_text: extractReferenceText(ref),\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n };\n}\n\nfunction processRowKey(processRow: JsonRecord): string {\n const identity = extractProcessIdentity(processRow);\n if (!identity.id || !identity.version) {\n return '';\n }\n return `${identity.id}@${identity.version}`;\n}\n\nfunction versionKey(version: string): number[] {\n return String(version)\n .split('.')\n .map((part) => {\n const parsed = Number.parseInt(part, 10);\n return Number.isNaN(parsed) ? 0 : parsed;\n });\n}\n\nfunction compareVersionKeys(left: number[], right: number[]): number {\n const length = Math.max(left.length, right.length);\n for (let index = 0; index < length; index += 1) {\n const leftValue = left[index] ?? 0;\n const rightValue = right[index] ?? 0;\n if (leftValue !== rightValue) {\n return leftValue - rightValue;\n }\n }\n return 0;\n}\n\nfunction processRowSortComparator(left: JsonRecord, right: JsonRecord): number {\n const leftIdentity = extractProcessIdentity(left);\n const rightIdentity = extractProcessIdentity(right);\n\n const idCompare = leftIdentity.id.localeCompare(rightIdentity.id);\n if (idCompare !== 0) {\n return idCompare;\n }\n\n const versionCompare = compareVersionKeys(\n versionKey(leftIdentity.version),\n versionKey(rightIdentity.version),\n );\n if (versionCompare !== 0) {\n return versionCompare;\n }\n\n return leftIdentity.name.localeCompare(rightIdentity.name);\n}\n\nfunction buildFlowIndex(rows: JsonRecord[]): FlowIndex {\n const byUuid: Record<string, FlowRecord[]> = {};\n const byUuidVersion: Record<string, FlowRecord> = {};\n const byName: Record<string, FlowRecord[]> = {};\n const records: FlowRecord[] = [];\n\n for (const row of rows) {\n const record = extractFlowRecord(row);\n records.push(record);\n byUuid[record.id] ??= [];\n byUuid[record.id].push(record);\n byUuidVersion[`${record.id}@${record.version}`] = record;\n const normalizedName = normalizeText(record.name);\n byName[normalizedName] ??= [];\n byName[normalizedName].push(record);\n }\n\n return {\n records,\n byUuid,\n byUuidVersion,\n byName,\n };\n}\n\nfunction aliasLookup(\n aliasMap: JsonRecord,\n flowUuid: string,\n flowVersion: string | null,\n): JsonRecord | null {\n const versionedKey = flowVersion ? `${flowUuid}@${flowVersion}` : null;\n for (const key of [versionedKey, flowUuid]) {\n if (!key) {\n continue;\n }\n const candidate = aliasMap[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction buildLocalDatasetUri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n flow: 'flows',\n 'flow data set': 'flows',\n };\n const folder = folderMap[datasetKind.trim().toLowerCase()] ?? 'datasets';\n const versionText = version.trim() || '01.00.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction preserveShortDescriptionShape(existing: unknown, target: JsonRecord): unknown {\n if (Array.isArray(existing)) {\n if (existing.length > 0 && isRecord(existing[0])) {\n const patched = cloneJson(existing[0]);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return [patched];\n }\n return [cloneJson(target)];\n }\n\n if (isRecord(existing)) {\n const patched = cloneJson(existing);\n patched['@xml:lang'] =\n coerceText(target['@xml:lang']) || coerceText(patched['@xml:lang']) || 'en';\n patched['#text'] = coerceText(target['#text']);\n return patched;\n }\n\n return cloneJson(target);\n}\n\nfunction flowReferenceFromRecord(record: FlowRecord): JsonRecord {\n const targetShortDescription =\n record.shortDescription ??\n ({\n '@xml:lang': 'en',\n '#text': record.name,\n } satisfies JsonRecord);\n\n return {\n '@type': 'flow data set',\n '@refObjectId': record.id,\n '@version': record.version,\n '@uri': buildLocalDatasetUri('flow data set', record.id, record.version),\n 'common:shortDescription': cloneJson(targetShortDescription),\n };\n}\n\nfunction patchedFlowReference(currentRef: unknown, record: FlowRecord): JsonRecord {\n const current = isRecord(currentRef) ? cloneJson(currentRef) : {};\n const target = flowReferenceFromRecord(record);\n\n current['@type'] = coerceText(current['@type']) || coerceText(target['@type']);\n current['@refObjectId'] = target['@refObjectId'];\n current['@version'] = target['@version'];\n current['@uri'] = target['@uri'];\n current['common:shortDescription'] = preserveShortDescriptionShape(\n current['common:shortDescription'],\n target['common:shortDescription'] as JsonRecord,\n );\n\n return current;\n}\n\nfunction langEntries(value: unknown): LangEntry[] {\n const entries: LangEntry[] = [];\n\n if (Array.isArray(value)) {\n value.forEach((item) => {\n entries.push(...langEntries(item));\n });\n return entries;\n }\n\n if (!isRecord(value)) {\n return entries;\n }\n\n if ('#text' in value || '@xml:lang' in value) {\n const text = coerceText(value['#text']);\n if (text) {\n entries.push({\n lang: coerceText(value['@xml:lang']) || 'en',\n text,\n });\n }\n return entries;\n }\n\n Object.values(value).forEach((nested) => {\n entries.push(...langEntries(nested));\n });\n\n return entries;\n}\n\nfunction textHasEmergyKeyword(text: string): boolean {\n const normalized = normalizeText(text);\n if (!normalized) {\n return false;\n }\n return EMERGY_TEXT_KEYWORDS.some((keyword) => normalized.includes(normalizeText(keyword)));\n}\n\nfunction uniqueNonEmptyTexts(values: string[]): string[] {\n const seen = new Set<string>();\n const result: string[] = [];\n\n values.forEach((value) => {\n const text = String(value || '').trim();\n if (!text) {\n return;\n }\n const normalized = normalizeText(text);\n if (seen.has(normalized)) {\n return;\n }\n seen.add(normalized);\n result.push(text);\n });\n\n return result;\n}\n\nfunction flowEmergyScopeDecision(row: JsonRecord): JsonRecord {\n const record = extractFlowRecord(row);\n const dataset = flowDatasetFromRow(row);\n const nameNode = deepGet(dataset, ['flowInformation', 'dataSetInformation', 'name'], {});\n const nameCandidates = langEntries(nameNode).map((entry) => entry.text);\n const signals: string[] = [];\n\n uniqueNonEmptyTexts(nameCandidates).forEach((text) => {\n if (textHasEmergyKeyword(text)) {\n signals.push(`emergy_name:${text}`);\n }\n });\n\n return {\n entity_type: 'flow',\n flow_id: record.id,\n version: record.version,\n name: record.name,\n flow_type: record.flowType,\n excluded: signals.length > 0,\n reason: signals.length > 0 ? 'emergy_named_flow' : '',\n signals,\n };\n}\n\nfunction processEmergyScopeDecision(\n processRow: JsonRecord,\n flowIndex: FlowIndex | null,\n): JsonRecord {\n const identity = extractProcessIdentity(processRow);\n const dataset = processDatasetFromRow(processRow);\n const referenceInfo = extractProcessReferenceFlowRef(processRow);\n const signals: string[] = [];\n let matchedRecord: FlowRecord | null =\n flowIndex?.byUuidVersion[`${referenceInfo.flow_id}@${referenceInfo.flow_version}`] ?? null;\n\n if (!matchedRecord && flowIndex?.byUuid[referenceInfo.flow_id]?.length) {\n matchedRecord = flowIndex.byUuid[referenceInfo.flow_id][0] ?? null;\n }\n\n if (matchedRecord) {\n const flowDecision = flowEmergyScopeDecision(matchedRecord.row);\n const flowSignals = (flowDecision.signals as unknown[]).filter(\n (value): value is string => typeof value === 'string',\n );\n signals.push(...flowSignals);\n }\n\n if (!signals.length) {\n const functionalUnitTexts = langEntries(\n deepGet(dataset, ['processInformation', 'quantitativeReference', 'functionalUnitOrOther']),\n ).map((entry) => entry.text);\n uniqueNonEmptyTexts([referenceInfo.flow_text, ...functionalUnitTexts]).forEach((text) => {\n if (textHasEmergyKeyword(text)) {\n signals.push(`process_ref_text:${text}`);\n }\n });\n }\n\n return {\n entity_type: 'process',\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n reference_flow_id: referenceInfo.flow_id,\n reference_flow_version: referenceInfo.flow_version,\n reference_exchange_internal_id: referenceInfo.exchange_internal_id,\n excluded: signals.length > 0,\n reason: signals.length > 0 ? 'reference_flow_name_mentions_emergy' : '',\n signals,\n };\n}\n\nfunction filterEmergyNamedProcesses(\n rows: JsonRecord[],\n flowIndex: FlowIndex | null,\n): {\n keptRows: JsonRecord[];\n excludedRows: JsonRecord[];\n} {\n const keptRows: JsonRecord[] = [];\n const excludedRows: JsonRecord[] = [];\n\n rows.forEach((row) => {\n const decision = processEmergyScopeDecision(row, flowIndex);\n if (decision.excluded === true) {\n excludedRows.push(decision);\n return;\n }\n keptRows.push(row);\n });\n\n return {\n keptRows,\n excludedRows,\n };\n}\n\nfunction classifyExchangeRef(\n processRow: JsonRecord,\n exchange: JsonRecord,\n scopeIndex: FlowIndex,\n catalogIndex: FlowIndex,\n aliasMap: JsonRecord,\n): ScanFinding {\n const identity = extractProcessIdentity(processRow);\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const flowUuid = coerceText(ref['@refObjectId']);\n const flowVersion = coerceText(ref['@version']);\n const finding: ScanFinding = {\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n exchange_direction: exchange.exchangeDirection,\n reference_flow_id: flowUuid,\n reference_flow_version: flowVersion,\n reference_flow_text: extractReferenceText(ref),\n issue_type: 'exists_in_target',\n severity: 'info',\n evidence: {},\n };\n\n if (!flowUuid) {\n finding.issue_type = 'no_reference';\n finding.severity = 'error';\n return finding;\n }\n\n const aliasTarget = aliasLookup(aliasMap, flowUuid, flowVersion || null);\n if (aliasTarget) {\n finding.issue_type = 'alias_target_available';\n finding.severity = 'warning';\n finding.evidence = {\n alias_target: aliasTarget,\n };\n }\n\n if (!flowVersion) {\n if (scopeIndex.byUuid[flowUuid]?.length) {\n finding.issue_type = 'version_missing';\n finding.severity = 'warning';\n return finding;\n }\n if (catalogIndex.byUuid[flowUuid]?.length) {\n finding.issue_type = 'exists_outside_target';\n finding.severity = 'warning';\n return finding;\n }\n finding.issue_type = 'missing_uuid';\n finding.severity = 'error';\n return finding;\n }\n\n const scopeMatch = scopeIndex.byUuidVersion[`${flowUuid}@${flowVersion}`];\n if (scopeMatch) {\n finding.evidence = {\n scope_group: '',\n flow_name: scopeMatch.name,\n };\n return finding;\n }\n\n if (scopeIndex.byUuid[flowUuid]?.length) {\n finding.issue_type = 'broken_version';\n finding.severity = 'error';\n finding.evidence = {\n available_versions_in_target: scopeIndex.byUuid[flowUuid]\n .map((record) => record.version)\n .sort(),\n };\n return finding;\n }\n\n if (\n catalogIndex.byUuidVersion[`${flowUuid}@${flowVersion}`] ||\n catalogIndex.byUuid[flowUuid]?.length\n ) {\n finding.issue_type = 'exists_outside_target';\n finding.severity = 'warning';\n return finding;\n }\n\n finding.issue_type = 'missing_uuid';\n finding.severity = 'error';\n return finding;\n}\n\nfunction buildFindingMap(findings: ScanFinding[]): Record<string, ScanFinding> {\n const result: Record<string, ScanFinding> = {};\n findings.forEach((finding) => {\n result[`${finding.process_id}@${finding.process_version}::${finding.exchange_internal_id}`] =\n finding;\n });\n return result;\n}\n\nfunction planExchangeRepair(\n exchange: JsonRecord,\n scopeIndex: FlowIndex,\n aliasMap: JsonRecord,\n finding: ScanFinding | null,\n autoPatchPolicy: AutoPatchPolicy,\n): RepairAction {\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const flowUuid = coerceText(ref['@refObjectId']);\n const flowVersion = coerceText(ref['@version']);\n const exchangeText =\n extractReferenceText(ref) || coerceText(exchange.exchangeName) || coerceText(exchange.name);\n\n const base: RepairAction = {\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n current_flow_id: flowUuid,\n current_flow_version: flowVersion,\n exchange_direction: exchange.exchangeDirection,\n exchange_text: exchangeText,\n current_issue_type: finding?.issue_type,\n auto_patch_policy: autoPatchPolicy,\n decision: 'manual_review',\n reason: 'no_deterministic_match',\n process_id: '',\n process_version: '',\n process_name: '',\n };\n\n if (flowUuid && flowVersion) {\n const currentRecord = scopeIndex.byUuidVersion[`${flowUuid}@${flowVersion}`];\n if (currentRecord) {\n return {\n ...base,\n decision: 'keep_as_is',\n reason: 'already_in_target',\n target_flow_id: currentRecord.id,\n target_flow_version: currentRecord.version,\n };\n }\n }\n\n const aliasTarget = aliasLookup(aliasMap, flowUuid, flowVersion || null);\n if (aliasTarget) {\n const targetRecord =\n scopeIndex.byUuidVersion[`${coerceText(aliasTarget.id)}@${coerceText(aliasTarget.version)}`];\n if (targetRecord && autoPatchPolicy !== 'disabled') {\n return {\n ...base,\n decision: 'auto_patch',\n reason: 'direct_alias_map',\n target_flow_id: targetRecord.id,\n target_flow_version: targetRecord.version,\n target_flow_name: targetRecord.name,\n target_reference: patchedFlowReference(ref, targetRecord),\n };\n }\n if (targetRecord) {\n return {\n ...base,\n decision: 'manual_review',\n reason: 'alias_target_found_but_policy_disallows_auto_patch',\n candidate_count: 1,\n candidate_refs: [\n {\n id: targetRecord.id,\n version: targetRecord.version,\n name: targetRecord.name,\n },\n ],\n };\n }\n }\n\n const candidates = scopeIndex.byName[normalizeText(exchangeText)] ?? [];\n if (candidates.length === 1) {\n const candidate = candidates[0];\n if (autoPatchPolicy === 'alias-or-unique-name') {\n return {\n ...base,\n decision: 'auto_patch',\n reason: 'unique_exact_name_match',\n target_flow_id: candidate.id,\n target_flow_version: candidate.version,\n target_flow_name: candidate.name,\n target_reference: patchedFlowReference(ref, candidate),\n };\n }\n return {\n ...base,\n decision: 'manual_review',\n reason: 'unique_exact_name_match_blocked_by_policy',\n candidate_count: 1,\n candidate_refs: [\n {\n id: candidate.id,\n version: candidate.version,\n name: candidate.name,\n },\n ],\n };\n }\n\n if (candidates.length > 1) {\n return {\n ...base,\n decision: 'manual_review',\n reason: 'ambiguous_exact_name_match',\n candidate_count: candidates.length,\n candidate_refs: candidates.map((candidate) => ({\n id: candidate.id,\n version: candidate.version,\n name: candidate.name,\n })),\n };\n }\n\n return base;\n}\n\nfunction buildUnifiedJsonDiff(before: unknown, after: unknown): string {\n const beforeLines = JSON.stringify(before, null, 2).split('\\n');\n const afterLines = JSON.stringify(after, null, 2).split('\\n');\n\n if (isDeepStrictEqual(beforeLines, afterLines)) {\n return '--- before.json\\n+++ after.json\\n';\n }\n\n let prefix = 0;\n while (\n prefix < beforeLines.length &&\n prefix < afterLines.length &&\n beforeLines[prefix] === afterLines[prefix]\n ) {\n prefix += 1;\n }\n\n let beforeSuffix = beforeLines.length - 1;\n let afterSuffix = afterLines.length - 1;\n while (\n beforeSuffix >= prefix &&\n afterSuffix >= prefix &&\n beforeLines[beforeSuffix] === afterLines[afterSuffix]\n ) {\n beforeSuffix -= 1;\n afterSuffix -= 1;\n }\n\n const beforeChanged = beforeLines.slice(prefix, beforeSuffix + 1);\n const afterChanged = afterLines.slice(prefix, afterSuffix + 1);\n const hunkHeader = `@@ -${prefix + 1},${beforeChanged.length} +${prefix + 1},${afterChanged.length} @@`;\n\n return [\n '--- before.json',\n '+++ after.json',\n hunkHeader,\n ...beforeChanged.map((line) => `-${line}`),\n ...afterChanged.map((line) => `+${line}`),\n '',\n ].join('\\n');\n}\n\nfunction deepDiffPaths(before: unknown, after: unknown, prefix: PathPart[] = []): PathPart[][] {\n if (typeof before !== typeof after || Array.isArray(before) !== Array.isArray(after)) {\n return [prefix];\n }\n\n if (Array.isArray(before) && Array.isArray(after)) {\n const paths: PathPart[][] = [];\n const maxLength = Math.max(before.length, after.length);\n for (let index = 0; index < maxLength; index += 1) {\n if (index >= before.length || index >= after.length) {\n paths.push([...prefix, index]);\n continue;\n }\n paths.push(...deepDiffPaths(before[index], after[index], [...prefix, index]));\n }\n return paths;\n }\n\n if (isRecord(before) && isRecord(after)) {\n const paths: PathPart[][] = [];\n const keys = new Set([...Object.keys(before), ...Object.keys(after)]);\n [...keys].sort().forEach((key) => {\n if (!(key in before) || !(key in after)) {\n paths.push([...prefix, key]);\n return;\n }\n paths.push(...deepDiffPaths(before[key], after[key], [...prefix, key]));\n });\n return paths;\n }\n\n return isDeepStrictEqual(before, after) ? [] : [prefix];\n}\n\nfunction pathContainsReferenceToFlow(pathParts: PathPart[]): boolean {\n return pathParts.includes('referenceToFlowDataSet');\n}\n\nfunction safeProcessKey(processId: string, version: string): string {\n const versionSlug = version.replace(/[^0-9A-Za-z._-]+/gu, '_') || 'unknown';\n return `${processId}__${versionSlug}`;\n}\n\nfunction writeRowsFile(filePath: string, rows: JsonRecord[]): string {\n if (filePath.toLowerCase().endsWith('.jsonl')) {\n return writeJsonLinesArtifact(filePath, rows);\n }\n return writeJsonArtifact(filePath, rows);\n}\n\nfunction mergeRowsByIdentity(\n existingRows: JsonRecord[],\n incomingRows: JsonRecord[],\n): {\n mergedRows: JsonRecord[];\n counts: {\n inserted: number;\n updated: number;\n unchanged: number;\n skipped_invalid: number;\n };\n} {\n const mergedRows = existingRows.map((row) => cloneJson(row));\n const keyToIndex: Record<string, number> = {};\n\n mergedRows.forEach((row, index) => {\n const identity = extractProcessIdentity(row);\n if (identity.id && identity.version) {\n keyToIndex[`${identity.id}@${identity.version}`] = index;\n }\n });\n\n let inserted = 0;\n let updated = 0;\n let unchanged = 0;\n let skippedInvalid = 0;\n\n incomingRows.forEach((row) => {\n const identity = extractProcessIdentity(row);\n if (!identity.id || !identity.version) {\n skippedInvalid += 1;\n return;\n }\n\n const key = `${identity.id}@${identity.version}`;\n if (!(key in keyToIndex)) {\n keyToIndex[key] = mergedRows.length;\n mergedRows.push(cloneJson(row));\n inserted += 1;\n return;\n }\n\n const existingIndex = keyToIndex[key];\n if (isDeepStrictEqual(mergedRows[existingIndex], row)) {\n unchanged += 1;\n return;\n }\n\n mergedRows[existingIndex] = cloneJson(row);\n updated += 1;\n });\n\n return {\n mergedRows,\n counts: {\n inserted,\n updated,\n unchanged,\n skipped_invalid: skippedInvalid,\n },\n };\n}\n\nfunction syncProcessPoolFile(poolFile: string, incomingRows: JsonRecord[]): JsonRecord {\n const poolPath = path.resolve(poolFile);\n const existingRows = existsSync(poolPath) ? loadRowsFromFile(poolPath) : [];\n const { mergedRows, counts } = mergeRowsByIdentity(existingRows, incomingRows);\n mergedRows.sort(processRowSortComparator);\n writeRowsFile(poolPath, mergedRows);\n\n return {\n pool_file: poolPath,\n pool_pre_count: existingRows.length,\n incoming_count: incomingRows.length,\n pool_post_count: mergedRows.length,\n ...counts,\n };\n}\n\nfunction resolveProcessValidator(\n tidasMode: TidasMode,\n deps: FlowRegenProductDeps,\n): {\n createProcess: ProcessSdkModule['createProcess'] | null;\n tidasValidation: boolean;\n} {\n if (tidasMode === 'skip') {\n return {\n createProcess: null,\n tidasValidation: false,\n };\n }\n\n try {\n const module = (deps.loadSdkModule ?? resolveLocalSdkModule)();\n if (typeof module.createProcess === 'function') {\n return {\n createProcess: module.createProcess,\n tidasValidation: true,\n };\n }\n\n if (tidasMode === 'required') {\n throw new CliError('Resolved tidas-sdk core module does not expose createProcess.', {\n code: 'FLOW_REGEN_PROCESS_SDK_INVALID',\n exitCode: 2,\n details: module.location ?? null,\n });\n }\n } catch (error) {\n if (tidasMode === 'required') {\n throw error;\n }\n }\n\n return {\n createProcess: null,\n tidasValidation: false,\n };\n}\n\nfunction formatValidationDetails(validation: unknown): string {\n if (validation === null || validation === undefined) {\n return 'Validator returned no result.';\n }\n\n if (validation instanceof Error) {\n return validation.message;\n }\n\n if (typeof validation === 'string') {\n return validation;\n }\n\n try {\n return JSON.stringify(validation);\n } catch {\n return String(validation);\n }\n}\n\nfunction evaluateProcessSdkValidation(\n payload: JsonRecord,\n createProcess: NonNullable<ProcessSdkModule['createProcess']>,\n): string | null {\n try {\n const validation = validateEntityWithDeepFallback(payload, createProcess);\n\n if (isRecord(validation) && validation.success === true) {\n return null;\n }\n\n return formatValidationDetails(validation);\n } catch (error) {\n return formatValidationDetails(error);\n }\n}\n\nfunction validateProcessPatch(\n originalRow: JsonRecord | null,\n patchedRow: JsonRecord,\n scopeIndex: FlowIndex,\n createProcess: NonNullable<ProcessSdkModule['createProcess']> | null,\n): ProcessPatchValidationResult {\n const identity = extractProcessIdentity(patchedRow);\n const issues: ProcessPatchValidationIssue[] = [];\n\n if (!originalRow) {\n issues.push({\n type: 'missing_original_row',\n severity: 'error',\n });\n return {\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n ok: false,\n issues,\n };\n }\n\n const illegalPaths = deepDiffPaths(originalRow, patchedRow).filter(\n (pathParts) => !pathContainsReferenceToFlow(pathParts),\n );\n if (illegalPaths.length > 0) {\n issues.push({\n type: 'non_reference_changes_detected',\n severity: 'error',\n paths: illegalPaths.map((pathParts) => pathParts.map((part) => String(part)).join('.')),\n });\n }\n\n const originalQuantitativeReference = coerceText(\n deepGet(processDatasetFromRow(originalRow), [\n 'processInformation',\n 'quantitativeReference',\n 'referenceToReferenceFlow',\n ]),\n );\n const patchedQuantitativeReference = coerceText(\n deepGet(processDatasetFromRow(patchedRow), [\n 'processInformation',\n 'quantitativeReference',\n 'referenceToReferenceFlow',\n ]),\n );\n if (originalQuantitativeReference !== patchedQuantitativeReference) {\n issues.push({\n type: 'quantitative_reference_changed',\n severity: 'error',\n before: originalQuantitativeReference,\n after: patchedQuantitativeReference,\n });\n }\n\n const originalExchangeCount = exchangeRecords(originalRow).length;\n const patchedExchangeCount = exchangeRecords(patchedRow).length;\n if (originalExchangeCount !== patchedExchangeCount) {\n issues.push({\n type: 'exchange_count_changed',\n severity: 'error',\n before: originalExchangeCount,\n after: patchedExchangeCount,\n });\n }\n\n exchangeRecords(patchedRow).forEach((exchange) => {\n const ref = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const flowId = coerceText(ref['@refObjectId']);\n const flowVersion = coerceText(ref['@version']);\n\n if (!flowId || !flowVersion) {\n issues.push({\n type: 'missing_flow_reference_after_patch',\n severity: 'error',\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n flow_id: flowId,\n flow_version: flowVersion,\n });\n return;\n }\n\n if (!scopeIndex.byUuidVersion[`${flowId}@${flowVersion}`]) {\n issues.push({\n type: 'patched_reference_not_in_scope_catalog',\n severity: 'error',\n exchange_internal_id: coerceText(exchange['@dataSetInternalID']),\n flow_id: flowId,\n flow_version: flowVersion,\n });\n }\n });\n\n if (createProcess) {\n const details = evaluateProcessSdkValidation(processDatasetFromRow(patchedRow), createProcess);\n if (details !== null) {\n issues.push({\n type: 'tidas_validation_failed',\n severity: 'error',\n details,\n });\n }\n }\n\n return {\n process_id: identity.id,\n process_version: identity.version,\n process_name: identity.name,\n ok: issues.length === 0,\n issues,\n };\n}\n\nfunction buildScanStageFiles(outDir: string): ScanStageFiles {\n return {\n out_dir: outDir,\n emergy_excluded_processes: path.join(outDir, 'emergy-excluded-processes.json'),\n summary: path.join(outDir, 'scan-summary.json'),\n findings: path.join(outDir, 'scan-findings.json'),\n findings_jsonl: path.join(outDir, 'scan-findings.jsonl'),\n };\n}\n\nfunction buildRepairStageFiles(outDir: string): RepairStageFiles {\n return {\n out_dir: outDir,\n plan: path.join(outDir, 'repair-plan.json'),\n plan_jsonl: path.join(outDir, 'repair-plan.jsonl'),\n manual_review_queue: path.join(outDir, 'manual-review-queue.jsonl'),\n summary: path.join(outDir, 'repair-summary.json'),\n };\n}\n\nfunction buildApplyStageFiles(outDir: string): ApplyStageFiles {\n return {\n ...buildRepairStageFiles(outDir),\n patched_processes: path.join(outDir, 'patched-processes.json'),\n patch_root: path.join(outDir, 'process-patches'),\n };\n}\n\nfunction buildValidateStageFiles(outDir: string): ValidateStageFiles {\n return {\n out_dir: outDir,\n report: path.join(outDir, 'validation-report.json'),\n failures: path.join(outDir, 'validation-failures.jsonl'),\n };\n}\n\nfunction loadOptionalScanFindings(\n scanFindingsFile: string | null,\n requiredCode: string,\n missingCode: string,\n): {\n resolvedFile: string | null;\n scanFindings: ScanFinding[];\n} {\n if (!scanFindingsFile) {\n return {\n resolvedFile: null,\n scanFindings: [],\n };\n }\n\n const resolvedFile = assertInputFile(scanFindingsFile, requiredCode, missingCode);\n\n return {\n resolvedFile,\n scanFindings: loadRowsFromFile(resolvedFile) as ScanFinding[],\n };\n}\n\nfunction runScanStage(\n processes: JsonRecord[],\n scopeIndex: FlowIndex,\n catalogIndex: FlowIndex,\n aliasMap: JsonRecord,\n outDir: string,\n excludeEmergy: boolean,\n): ScanStageResult {\n const files = buildScanStageFiles(outDir);\n const { keptRows, excludedRows } = excludeEmergy\n ? filterEmergyNamedProcesses(processes, catalogIndex)\n : { keptRows: processes, excludedRows: [] };\n const findings: ScanFinding[] = [];\n const issueProcessKeys = new Set<string>();\n const issueCounts: Record<string, number> = {};\n let exchangeCount = 0;\n\n keptRows.forEach((processRow) => {\n const identity = extractProcessIdentity(processRow);\n const exchanges = exchangeRecords(processRow);\n exchangeCount += exchanges.length;\n\n exchanges.forEach((exchange) => {\n const finding = classifyExchangeRef(processRow, exchange, scopeIndex, catalogIndex, aliasMap);\n findings.push(finding);\n issueCounts[finding.issue_type] = (issueCounts[finding.issue_type] ?? 0) + 1;\n if (finding.issue_type !== 'exists_in_target') {\n issueProcessKeys.add(`${identity.id}@${identity.version}`);\n }\n });\n });\n\n const summary = {\n process_count_before_emergy_exclusion: processes.length,\n process_count: keptRows.length,\n emergy_excluded_process_count: excludedRows.length,\n exchange_count: exchangeCount,\n issue_counts: issueCounts,\n processes_with_issues: issueProcessKeys.size,\n };\n\n writeJsonArtifact(files.emergy_excluded_processes, excludedRows);\n writeJsonArtifact(files.summary, summary);\n writeJsonArtifact(files.findings, findings);\n writeJsonLinesArtifact(files.findings_jsonl, findings);\n\n return {\n filteredProcesses: keptRows,\n emergyExcludedProcesses: excludedRows,\n findings,\n summary,\n files,\n };\n}\n\nfunction runRepairStage(options: {\n processes: JsonRecord[];\n scopeIndex: FlowIndex;\n aliasMap: JsonRecord;\n scanFindings: ScanFinding[];\n autoPatchPolicy: AutoPatchPolicy;\n outDir: string;\n apply: boolean;\n processPoolFile: string | null;\n}): RepairStageResult {\n const files = options.apply\n ? buildApplyStageFiles(options.outDir)\n : buildRepairStageFiles(options.outDir);\n const findingMap = buildFindingMap(options.scanFindings);\n const repairPlan: RepairAction[] = [];\n const manualQueue: RepairAction[] = [];\n const patchedRows: JsonRecord[] = [];\n const decisionCounts: Record<string, number> = {};\n\n options.processes.forEach((processRow) => {\n const identity = extractProcessIdentity(processRow);\n const processKey = `${identity.id}@${identity.version}`;\n const workingRow = options.apply ? cloneJson(processRow) : processRow;\n const processPlan: RepairAction[] = [];\n let changed = false;\n\n exchangeRecords(workingRow).forEach((exchange) => {\n const action = planExchangeRepair(\n exchange,\n options.scopeIndex,\n options.aliasMap,\n findingMap[`${processKey}::${coerceText(exchange['@dataSetInternalID'])}`] ?? null,\n options.autoPatchPolicy,\n );\n action.process_id = identity.id;\n action.process_version = identity.version;\n action.process_name = identity.name;\n processPlan.push(action);\n repairPlan.push(action);\n decisionCounts[action.decision] = (decisionCounts[action.decision] ?? 0) + 1;\n\n if (action.decision === 'manual_review') {\n manualQueue.push(action);\n }\n\n if (options.apply && action.decision === 'auto_patch' && isRecord(action.target_reference)) {\n exchange.referenceToFlowDataSet = cloneJson(action.target_reference);\n changed = true;\n }\n });\n\n if (options.apply && changed) {\n patchedRows.push(workingRow);\n const patchRoot = (files as ApplyStageFiles).patch_root;\n const processDir = path.join(patchRoot, safeProcessKey(identity.id, identity.version));\n writeJsonArtifact(path.join(processDir, 'before.json'), processRow);\n writeJsonArtifact(path.join(processDir, 'after.json'), workingRow);\n writeJsonArtifact(\n path.join(processDir, 'evidence.json'),\n processPlan.filter((item) => item.decision === 'auto_patch'),\n );\n writeTextArtifact(\n path.join(processDir, 'diff.patch'),\n buildUnifiedJsonDiff(processRow, workingRow),\n );\n }\n });\n\n const summary: RepairStageResult['summary'] = {\n auto_patch_policy: options.autoPatchPolicy,\n process_count: options.processes.length,\n repair_item_count: repairPlan.length,\n decision_counts: decisionCounts,\n patched_process_count: options.apply ? patchedRows.length : 0,\n };\n\n if (options.apply && options.processPoolFile) {\n summary.process_pool_sync = syncProcessPoolFile(options.processPoolFile, patchedRows);\n }\n\n writeJsonArtifact(files.plan, repairPlan);\n writeJsonLinesArtifact(files.plan_jsonl, repairPlan);\n writeJsonLinesArtifact(files.manual_review_queue, manualQueue);\n writeJsonArtifact(files.summary, summary);\n\n if (options.apply) {\n writeJsonArtifact((files as ApplyStageFiles).patched_processes, patchedRows);\n }\n\n return {\n plan: repairPlan,\n manualQueue,\n summary,\n files,\n patchedRows,\n };\n}\n\nfunction runValidateStage(options: {\n originalRows: JsonRecord[];\n patchedRows: JsonRecord[];\n scopeIndex: FlowIndex;\n outDir: string;\n tidasMode: TidasMode;\n deps: FlowRegenProductDeps;\n}): ValidateStageResult {\n const files = buildValidateStageFiles(options.outDir);\n const validator = resolveProcessValidator(options.tidasMode, options.deps);\n const originalMap: Record<string, JsonRecord> = {};\n options.originalRows.forEach((row) => {\n const key = processRowKey(row);\n if (key) {\n originalMap[key] = row;\n }\n });\n\n const results = options.patchedRows.map((patchedRow) => {\n const key = processRowKey(patchedRow);\n return validateProcessPatch(\n key ? (originalMap[key] ?? null) : null,\n patchedRow,\n options.scopeIndex,\n validator.createProcess ?? null,\n );\n });\n const failures = results.filter((result) => !result.ok);\n const summary: ProcessPatchValidationSummary = {\n patched_process_count: options.patchedRows.length,\n passed: results.length - failures.length,\n failed: failures.length,\n tidas_validation: validator.tidasValidation,\n };\n const report: ProcessPatchValidationReport = {\n summary,\n results,\n };\n\n writeJsonArtifact(files.report, report);\n writeJsonLinesArtifact(files.failures, failures);\n\n return {\n summary,\n results,\n failures,\n files,\n };\n}\n\nexport async function runFlowScanProcessFlowRefs(\n options: RunFlowScanProcessFlowRefsOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowScanProcessFlowRefsReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_PROCESSES_FILE_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_SCAN_PROCESS_FLOW_REFS_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const catalogFlowFiles =\n options.catalogFlowFiles && options.catalogFlowFiles.length > 0\n ? assertInputFiles(\n options.catalogFlowFiles,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_CATALOG_FLOW_FILES_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_CATALOG_FLOW_FILE_NOT_FOUND',\n )\n : scopeFlowFiles;\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const outDir = assertOutDir(options.outDir);\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const catalogRows = catalogFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_REQUIRED',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_NOT_FOUND',\n 'FLOW_SCAN_PROCESS_FLOW_REFS_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const catalogIndex = buildFlowIndex(catalogRows);\n const scanStage = runScanStage(\n processes,\n scopeIndex,\n catalogIndex,\n aliasMap,\n outDir,\n options.excludeEmergy === true,\n );\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_scan_process_flow_refs',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n catalog_flow_files: catalogFlowFiles,\n alias_map_file: aliasMapFile,\n exclude_emergy: options.excludeEmergy === true,\n out_dir: outDir,\n summary: scanStage.summary,\n files: scanStage.files,\n };\n}\n\nexport async function runFlowPlanProcessFlowRepairs(\n options: RunFlowPlanProcessFlowRepairsOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowPlanProcessFlowRepairsReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const { resolvedFile: scanFindingsFile, scanFindings } = loadOptionalScanFindings(\n options.scanFindingsFile ?? null,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_NOT_FOUND',\n );\n const outDir = assertOutDir(options.outDir);\n const autoPatchPolicy = options.autoPatchPolicy ?? 'alias-only';\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n 'FLOW_PLAN_PROCESS_FLOW_REPAIRS_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const repairStage = runRepairStage({\n processes,\n scopeIndex,\n aliasMap,\n scanFindings,\n autoPatchPolicy,\n outDir,\n apply: false,\n processPoolFile: null,\n });\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_plan_process_flow_repairs',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n alias_map_file: aliasMapFile,\n scan_findings_file: scanFindingsFile,\n auto_patch_policy: autoPatchPolicy,\n out_dir: outDir,\n summary: repairStage.summary,\n files: repairStage.files as RepairStageFiles,\n };\n}\n\nexport async function runFlowApplyProcessFlowRepairs(\n options: RunFlowApplyProcessFlowRepairsOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowApplyProcessFlowRepairsReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const { resolvedFile: scanFindingsFile, scanFindings } = loadOptionalScanFindings(\n options.scanFindingsFile ?? null,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_SCAN_FINDINGS_NOT_FOUND',\n );\n const outDir = assertOutDir(options.outDir);\n const autoPatchPolicy = options.autoPatchPolicy ?? 'alias-only';\n const processPoolFile = options.processPoolFile ? path.resolve(options.processPoolFile) : null;\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_REQUIRED',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_NOT_FOUND',\n 'FLOW_APPLY_PROCESS_FLOW_REPAIRS_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const repairStage = runRepairStage({\n processes,\n scopeIndex,\n aliasMap,\n scanFindings,\n autoPatchPolicy,\n outDir,\n apply: true,\n processPoolFile,\n });\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_apply_process_flow_repairs',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n alias_map_file: aliasMapFile,\n scan_findings_file: scanFindingsFile,\n auto_patch_policy: autoPatchPolicy,\n process_pool_file: processPoolFile,\n out_dir: outDir,\n summary: repairStage.summary,\n files: repairStage.files as ApplyStageFiles,\n };\n}\n\nfunction buildReportFiles(outDir: string, apply: boolean): FlowRegenProductFiles {\n return {\n report: path.join(outDir, 'flow-regen-product-report.json'),\n scan: buildScanStageFiles(path.join(outDir, 'scan')),\n repair: buildRepairStageFiles(path.join(outDir, 'repair')),\n apply: apply ? buildApplyStageFiles(path.join(outDir, 'repair-apply')) : null,\n validate: apply ? buildValidateStageFiles(path.join(outDir, 'validate')) : null,\n };\n}\n\nexport async function runFlowRegenProduct(\n options: RunFlowRegenProductOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowRegenProductReport> {\n const processesFile = assertInputFile(\n options.processesFile,\n 'FLOW_REGEN_PROCESSES_FILE_REQUIRED',\n 'FLOW_REGEN_PROCESSES_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_REGEN_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_REGEN_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const catalogFlowFiles =\n options.catalogFlowFiles && options.catalogFlowFiles.length > 0\n ? assertInputFiles(\n options.catalogFlowFiles,\n 'FLOW_REGEN_CATALOG_FLOW_FILE_REQUIRED',\n 'FLOW_REGEN_CATALOG_FLOW_FILE_NOT_FOUND',\n )\n : scopeFlowFiles;\n const aliasMapFile = options.aliasMapFile\n ? assertInputFile(\n options.aliasMapFile,\n 'FLOW_REGEN_ALIAS_MAP_REQUIRED',\n 'FLOW_REGEN_ALIAS_MAP_NOT_FOUND',\n )\n : null;\n const outDir = assertOutDir(options.outDir);\n const processPoolFile = options.processPoolFile ? path.resolve(options.processPoolFile) : null;\n const apply = options.apply === true;\n const autoPatchPolicy = options.autoPatchPolicy ?? 'alias-only';\n const tidasMode = options.tidasMode ?? 'auto';\n const files = buildReportFiles(outDir, apply);\n const now = deps.now ?? (() => new Date());\n\n const processes = loadRowsFromFile(processesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const catalogRows = catalogFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const aliasMap = aliasMapFile\n ? readJsonObjectFile(\n aliasMapFile,\n 'FLOW_REGEN_ALIAS_MAP_REQUIRED',\n 'FLOW_REGEN_ALIAS_MAP_NOT_FOUND',\n 'FLOW_REGEN_ALIAS_MAP_INVALID',\n )\n : {};\n const scopeIndex = buildFlowIndex(scopeRows);\n const catalogIndex = buildFlowIndex(catalogRows);\n\n const scanStage = runScanStage(\n processes,\n scopeIndex,\n catalogIndex,\n aliasMap,\n files.scan.out_dir,\n options.excludeEmergy === true,\n );\n const repairStage = runRepairStage({\n processes: scanStage.filteredProcesses,\n scopeIndex,\n aliasMap,\n scanFindings: scanStage.findings,\n autoPatchPolicy,\n outDir: files.repair.out_dir,\n apply: false,\n processPoolFile: null,\n });\n const applyStage = apply\n ? runRepairStage({\n processes: scanStage.filteredProcesses,\n scopeIndex,\n aliasMap,\n scanFindings: scanStage.findings,\n autoPatchPolicy,\n outDir: files.apply!.out_dir,\n apply: true,\n processPoolFile,\n })\n : null;\n const validateStage =\n apply && applyStage\n ? runValidateStage({\n originalRows: scanStage.filteredProcesses,\n patchedRows: applyStage.patchedRows,\n scopeIndex,\n outDir: files.validate!.out_dir,\n tidasMode,\n deps,\n })\n : null;\n\n const report: FlowRegenProductReport = {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_regen_product',\n mode: apply ? 'apply' : 'plan',\n processes_file: processesFile,\n scope_flow_files: scopeFlowFiles,\n catalog_flow_files: catalogFlowFiles,\n alias_map_file: aliasMapFile,\n exclude_emergy: options.excludeEmergy === true,\n auto_patch_policy: autoPatchPolicy,\n process_pool_file: processPoolFile,\n tidas_mode: tidasMode,\n out_dir: outDir,\n counts: {\n process_count_before_emergy_exclusion:\n scanStage.summary.process_count_before_emergy_exclusion,\n process_count: scanStage.summary.process_count,\n emergy_excluded_process_count: scanStage.summary.emergy_excluded_process_count,\n exchange_count: scanStage.summary.exchange_count,\n issue_counts: scanStage.summary.issue_counts,\n processes_with_issues: scanStage.summary.processes_with_issues,\n repair_item_count: repairStage.summary.repair_item_count,\n decision_counts: repairStage.summary.decision_counts,\n patched_process_count: applyStage?.summary.patched_process_count ?? 0,\n validation_passed_count: validateStage?.summary.passed ?? null,\n validation_failed_count: validateStage?.summary.failed ?? null,\n },\n validation: {\n enabled: apply,\n tidas_validation: validateStage?.summary.tidas_validation ?? false,\n ok: validateStage ? validateStage.summary.failed === 0 : null,\n },\n files,\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport async function runFlowValidateProcesses(\n options: RunFlowValidateProcessesOptions,\n deps: FlowRegenProductDeps = {},\n): Promise<FlowValidateProcessesReport> {\n const originalProcessesFile = assertInputFile(\n options.originalProcessesFile,\n 'FLOW_VALIDATE_PROCESSES_ORIGINAL_FILE_REQUIRED',\n 'FLOW_VALIDATE_PROCESSES_ORIGINAL_FILE_NOT_FOUND',\n );\n const patchedProcessesFile = assertInputFile(\n options.patchedProcessesFile,\n 'FLOW_VALIDATE_PROCESSES_PATCHED_FILE_REQUIRED',\n 'FLOW_VALIDATE_PROCESSES_PATCHED_FILE_NOT_FOUND',\n );\n const scopeFlowFiles = assertInputFiles(\n options.scopeFlowFiles ?? [],\n 'FLOW_VALIDATE_PROCESSES_SCOPE_FLOW_FILES_REQUIRED',\n 'FLOW_VALIDATE_PROCESSES_SCOPE_FLOW_FILE_NOT_FOUND',\n );\n const outDir = assertOutDir(options.outDir);\n const tidasMode = options.tidasMode ?? 'auto';\n const now = deps.now ?? (() => new Date());\n\n const originalRows = loadRowsFromFile(originalProcessesFile);\n const patchedRows = loadRowsFromFile(patchedProcessesFile);\n const scopeRows = scopeFlowFiles.flatMap((filePath) => loadRowsFromFile(filePath));\n const scopeIndex = buildFlowIndex(scopeRows);\n const validateStage = runValidateStage({\n originalRows,\n patchedRows,\n scopeIndex,\n outDir,\n tidasMode,\n deps,\n });\n\n return {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_validate_processes',\n original_processes_file: originalProcessesFile,\n patched_processes_file: patchedProcessesFile,\n scope_flow_files: scopeFlowFiles,\n out_dir: outDir,\n tidas_mode: tidasMode,\n summary: validateStage.summary,\n files: validateStage.files,\n results: validateStage.results,\n };\n}\n\nexport const __testInternals = {\n resolveCliRepoRoot,\n assertInputFile,\n assertInputFiles,\n assertOutDir,\n readJsonObjectFile,\n resolveLocalSdkModule,\n processDatasetFromRow,\n extractProcessIdentity,\n exchangeRecords,\n extractProcessReferenceExchange,\n extractReferenceText,\n extractProcessReferenceFlowRef,\n processRowKey,\n versionKey,\n compareVersionKeys,\n processRowSortComparator,\n buildFlowIndex,\n aliasLookup,\n buildLocalDatasetUri,\n preserveShortDescriptionShape,\n flowReferenceFromRecord,\n patchedFlowReference,\n langEntries,\n textHasEmergyKeyword,\n uniqueNonEmptyTexts,\n flowEmergyScopeDecision,\n processEmergyScopeDecision,\n filterEmergyNamedProcesses,\n classifyExchangeRef,\n buildFindingMap,\n planExchangeRepair,\n buildUnifiedJsonDiff,\n deepDiffPaths,\n pathContainsReferenceToFlow,\n safeProcessKey,\n writeRowsFile,\n mergeRowsByIdentity,\n syncProcessPoolFile,\n buildSdkCandidates,\n resolveSdkModuleFromCandidates,\n resolveProcessValidator,\n formatValidationDetails,\n evaluateProcessSdkValidation,\n validateProcessPatch,\n buildScanStageFiles,\n buildRepairStageFiles,\n buildApplyStageFiles,\n buildValidateStageFiles,\n runScanStage,\n runRepairStage,\n runValidateStage,\n buildReportFiles,\n};\n"]}
@@ -4,6 +4,7 @@ import path from 'node:path';
4
4
  import { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';
5
5
  import { CliError } from './errors.js';
6
6
  import { coerceText, deepGet, isRecord, loadRowsFromFile, normalizeText, } from './flow-governance.js';
7
+ import { validateEntityWithDeepFallback, } from './tidas-sdk-validation.js';
7
8
  const CONTACT_UUID = 'f4b4c314-8c4c-4c83-968f-5b3c7724f6a8';
8
9
  const CONTACT_VERSION = '01.00.000';
9
10
  const COMPLIANCE_SOURCE_UUID = 'd92a1a12-2545-49e2-a585-55c259997756';
@@ -489,19 +490,14 @@ function validate_flow_payload(payload, deps) {
489
490
  });
490
491
  }
491
492
  try {
492
- const entity = sdkModule.createFlow(payload, {
493
- mode: 'strict',
494
- throwOnError: false,
495
- deepValidation: true,
496
- });
497
- if (!entity || typeof entity.validate !== 'function') {
498
- throw new CliError('Resolved tidas-sdk flow entity does not expose validate().', {
493
+ const result = validateEntityWithDeepFallback(payload, sdkModule.createFlow);
494
+ if (!result) {
495
+ throw new CliError('Resolved tidas-sdk flow entity does not expose validateEnhanced() or validate().', {
499
496
  code: 'FLOW_REMEDIATE_SDK_INVALID',
500
497
  exitCode: 2,
501
498
  details: sdkModule.location ?? null,
502
499
  });
503
500
  }
504
- const result = entity.validate();
505
501
  if (isRecord(result) && result.success === true) {
506
502
  return { success: true };
507
503
  }