Can I run polygon insetting on the surface of a mesh? I have a set of closed loops on the surface of a non-self-intersecting triangle mesh, and I need to create inset versions of them on the surface of the mesh. In other words, I want to generate a straight skeleton from them.

Within each single triangle of the mesh, this algorithm should behave just like a 2D straight skeleton.

I've found several tools for offsetting loops of edges in a mesh, or generating loops equidistant from a point on the mesh, but I need to be able to input arbitrary loops of my own and offset them.

I ran through various corner cases by hand on some graph paper, and it seems to me the algorithm described by Felkel and Obdrzalek should be perfectly applicable, except the wavefront may at times have to switch between contracting and expanding when it encounters geometries that give it more space.

This algorithm seems like it would be useful in several CAM applications, does anyone know of an existing implementation?
This is more of a long comment

Yes you can do this. The problem lies in how you measure the surface. I tried to do this manually by progressively extruding tubes along the edges, and finding their intersection with the surface. It would work but is a bit hard to compute. Obviously you may want to take more steps than i did for a more accurate solution. 



Image 1 Straight skeleton (magenta)  and insets by finding the intersection of tubes along edges, and then the created edges on mesh (blue) 
From this experiment I can conclude that are many complex cases to consider.