new tools, fixes
Fixed the in-tool operators toolbar drift in core/src/main/kotlin/com/github/alfu32/sketch/ui/SketchUiOverlay.kt.

The issue was that rebuilding the toolbar repacked the window after tool changes while preserving the bottom-left position, so tiny height differences moved the top edge. The rebuild now captures the previous top edge and restores the window after pack().
- Built-in tool palette commands are now generated from the actual ToolController registered tools instead of a hand-maintained list.
- This catches tools that were missing from Ctrl-Shift-P, including newer/mechanical/boolean/object tools as long as they are registered in the controller.
- Excluded only ToolId.PLUGIN, since plugin tools already register their own palette commands.
- Increased the default blank-palette command cap from 20 to 200, so opening Ctrl-Shift-P without typing no longer hides most commands.
- Added better searchable tags from both displayName and ToolId words.
Implemented the two 3D sweep variants.
Added:
- Ribbon 3D
- Uses the existing double_line icon.
- Uses PolylineSettings.doubleLineSize and doubleLineOffset.
- Draws a constant-width planar ribbon along a 3D polyline.
- Builds one cross-section per path point and connects them as mesh faces.
- Uses miter-style section normals and parallel transport to reduce twist.
- Extrude Swipe 3D
- Uses the existing swipe_surface icon, same as Extrude Swipe.
- Uses selected line segments as the profile.
- Draws a 3D swipe path.
- Projects the profile into the first section, builds compatible sections at path vertices, and connects corresponding profile vertices so adjacent spans meet.
Added shared support:
- Sweep3dSupport.kt
- path section frames
- miter/bisector normals at internal path points
- parallel-transport frame propagation
- profile projection and section point generation
Wired into:
- ToolId
- Main
- toolbar layout
- command palette registration
- tool cycling for Extrude Swipe 3D
- docs reference