But I can tell you how it works for other grids =).
The contents of `tiles` key are an array of tile shapes. Possible directions where there are connections are binary-encoded. For example, on a square grid 1 means right, 2 means up, 4 means left and 8 means down. So a 3 means a corner piece connecting up and right, a 5 is a horizontal straight piece. A 0 means an empty tile, 15 in this case is a fully connected + tile. It's similar for other grids.
How the tiles are numbered depends on grid implementation. In a square 5x5 puzzle the indices would go like this:
0 1 2 3 4
5 6 7 8 9
...
You can look at grid implementations here: https://github.com/gereleth/hexapipes/tree/main/src/lib/puzz...
You can also import a downloaded puzzle (non-penrose) on the custom puzzle page and watch my solver work on it)). https://hexapipes.vercel.app/custom