.gitignore
LICENSE
README.md
pyproject.toml
setup.py
uv.lock
vulture_whitelist.py
.github/pull_request_template.md
.github/workflows/build.yml
.github/workflows/release.yml
docs/01-intro.md
docs/02-files.md
docs/03-objects.md
docs/04-transforming.md
docs/05-drawing.md
docs/06-paint.md
docs/07-paths.md
docs/08-tracing.md
docs/09-agents.md
docs/10-shortcuts.md
docs/11-operations.md
docs/12-document-model.md
src/vectrify/__init__.py
src/vectrify/image_utils.py
src/vectrify/project_file.py
src/vectrify/svg_render.py
src/vectrify.egg-info/PKG-INFO
src/vectrify.egg-info/SOURCES.txt
src/vectrify.egg-info/dependency_links.txt
src/vectrify.egg-info/entry_points.txt
src/vectrify.egg-info/requires.txt
src/vectrify.egg-info/scm_file_list.json
src/vectrify.egg-info/scm_version.json
src/vectrify.egg-info/top_level.txt
src/vectrify/document/__init__.py
src/vectrify/document/arrows.py
src/vectrify/document/booleans.py
src/vectrify/document/clipboard.py
src/vectrify/document/clipping.py
src/vectrify/document/components.py
src/vectrify/document/contact.py
src/vectrify/document/editor.py
src/vectrify/document/editor_handles.py
src/vectrify/document/features.py
src/vectrify/document/history.py
src/vectrify/document/hit_test.py
src/vectrify/document/holes.py
src/vectrify/document/join.py
src/vectrify/document/knife.py
src/vectrify/document/lines.py
src/vectrify/document/model.py
src/vectrify/document/paint.py
src/vectrify/document/project.py
src/vectrify/document/redraw.py
src/vectrify/document/regions.py
src/vectrify/document/svg.py
src/vectrify/document/taper.py
src/vectrify/document/topology.py
src/vectrify/document/transforms.py
src/vectrify/mcp/__init__.py
src/vectrify/mcp/guide.py
src/vectrify/mcp/hosted.py
src/vectrify/mcp/server.py
src/vectrify/mcp/target.py
src/vectrify/operations/__init__.py
src/vectrify/operations/candidates.py
src/vectrify/operations/contract.py
src/vectrify/operations/diagnostics.py
src/vectrify/operations/generate.py
src/vectrify/operations/jobs.py
src/vectrify/operations/previews.py
src/vectrify/operations/settings.py
src/vectrify/operations/methods/__init__.py
src/vectrify/operations/methods/cel.py
src/vectrify/operations/methods/cleanup.py
src/vectrify/operations/methods/colour_regions.py
src/vectrify/operations/methods/colours.py
src/vectrify/operations/methods/edges.py
src/vectrify/operations/methods/nodes.py
src/vectrify/refine/__init__.py
src/vectrify/refine/_cuda_renderer.cu
src/vectrify/refine/bezier.py
src/vectrify/refine/boundary.py
src/vectrify/refine/cel.py
src/vectrify/refine/centreline.py
src/vectrify/refine/cleanup.py
src/vectrify/refine/colour_regions.py
src/vectrify/refine/crossings.py
src/vectrify/refine/cuda_renderer.py
src/vectrify/refine/detail.py
src/vectrify/refine/edge_profiles.py
src/vectrify/refine/enclosure.py
src/vectrify/refine/filled_fit_optimize.py
src/vectrify/refine/filled_fit_raster.py
src/vectrify/refine/filled_fit_scene.py
src/vectrify/refine/frame.py
src/vectrify/refine/frozen.py
src/vectrify/refine/joint.py
src/vectrify/refine/lines.py
src/vectrify/refine/miter.py
src/vectrify/refine/parameters.py
src/vectrify/refine/paths.py
src/vectrify/refine/redraw.py
src/vectrify/refine/selected.py
src/vectrify/refine/shared.py
src/vectrify/refine/simplify.py
src/vectrify/refine/snap.py
src/vectrify/refine/soft_coverage.py
src/vectrify/refine/stroke_support.py
src/vectrify/refine/support.py
src/vectrify/refine/tracing.py
src/vectrify/refine/selected_fit/__init__.py
src/vectrify/refine/selected_fit/cleanup.py
src/vectrify/refine/selected_fit/controls.py
src/vectrify/refine/selected_fit/objective.py
src/vectrify/refine/selected_fit/observe.py
src/vectrify/refine/selected_fit/policy.py
src/vectrify/refine/selected_fit/stroke.py
src/vectrify/svg/__init__.py
src/vectrify/svg/cleanup.py
src/vectrify/ui/__init__.py
src/vectrify/ui/__main__.py
src/vectrify/ui/agent.py
src/vectrify/ui/agent_batches.py
src/vectrify/ui/agent_channel.py
src/vectrify/ui/agent_edges.py
src/vectrify/ui/agent_features.py
src/vectrify/ui/agent_look.py
src/vectrify/ui/agent_outlines.py
src/vectrify/ui/agent_setup.py
src/vectrify/ui/desktop.py
src/vectrify/ui/server.py
src/vectrify/ui/session.py
src/vectrify/ui/shared.py
src/vectrify/ui/static/align.js
src/vectrify/ui/static/app.js
src/vectrify/ui/static/app_actions.js
src/vectrify/ui/static/app_agent_controls.js
src/vectrify/ui/static/app_agents.js
src/vectrify/ui/static/app_align.js
src/vectrify/ui/static/app_arrows.js
src/vectrify/ui/static/app_booleans.js
src/vectrify/ui/static/app_bootstrap.js
src/vectrify/ui/static/app_canvas.js
src/vectrify/ui/static/app_canvas_events.js
src/vectrify/ui/static/app_clipping.js
src/vectrify/ui/static/app_colors.js
src/vectrify/ui/static/app_command_registry.js
src/vectrify/ui/static/app_commands.js
src/vectrify/ui/static/app_config.js
src/vectrify/ui/static/app_document.js
src/vectrify/ui/static/app_drawing.js
src/vectrify/ui/static/app_eyedropper.js
src/vectrify/ui/static/app_files.js
src/vectrify/ui/static/app_frames.js
src/vectrify/ui/static/app_geometry.js
src/vectrify/ui/static/app_gradients.js
src/vectrify/ui/static/app_hits.js
src/vectrify/ui/static/app_jobs.js
src/vectrify/ui/static/app_join.js
src/vectrify/ui/static/app_keys.js
src/vectrify/ui/static/app_layout.js
src/vectrify/ui/static/app_markers.js
src/vectrify/ui/static/app_overlay.js
src/vectrify/ui/static/app_paint.js
src/vectrify/ui/static/app_pencil.js
src/vectrify/ui/static/app_reference.js
src/vectrify/ui/static/app_reference_data.js
src/vectrify/ui/static/app_region.js
src/vectrify/ui/static/app_resizing.js
src/vectrify/ui/static/app_rotating.js
src/vectrify/ui/static/app_selection.js
src/vectrify/ui/static/app_session.js
src/vectrify/ui/static/app_shapes.js
src/vectrify/ui/static/app_state.js
src/vectrify/ui/static/app_stroke.js
src/vectrify/ui/static/app_tools.js
src/vectrify/ui/static/app_transform.js
src/vectrify/ui/static/app_transport.js
src/vectrify/ui/static/app_tree.js
src/vectrify/ui/static/app_tree_drag.js
src/vectrify/ui/static/app_view.js
src/vectrify/ui/static/booleans.js
src/vectrify/ui/static/clipping.js
src/vectrify/ui/static/favicon.svg
src/vectrify/ui/static/gestures.js
src/vectrify/ui/static/gradient.js
src/vectrify/ui/static/icons.js
src/vectrify/ui/static/index.html
src/vectrify/ui/static/input.js
src/vectrify/ui/static/inspector.js
src/vectrify/ui/static/lines.js
src/vectrify/ui/static/palette.js
src/vectrify/ui/static/pencil.js
src/vectrify/ui/static/redraw.js
src/vectrify/ui/static/reference_error.js
src/vectrify/ui/static/reference_render.js
src/vectrify/ui/static/region.js
src/vectrify/ui/static/resize.js
src/vectrify/ui/static/selection.js
src/vectrify/ui/static/shapes.js
src/vectrify/ui/static/snap.js
src/vectrify/ui/static/strip.js
src/vectrify/ui/static/style.css
src/vectrify/ui/static/taper.js
src/vectrify/ui/static/tool_menu.js
src/vectrify/ui/static/transform.js
src/vectrify/ui/static/tree.js
src/vectrify/ui/static/util.js
src/vectrify/ui/static/visibility.js
tests/__init__.py
tests/helpers.py
tests/test_image_utils.py
tests/test_project_file.py
tests/test_svg_render.py
tests/document/__init__.py
tests/document/helpers.py
tests/document/test_artboard.py
tests/document/test_booleans.py
tests/document/test_clip_inset_precision.py
tests/document/test_combine.py
tests/document/test_components.py
tests/document/test_contact.py
tests/document/test_cross_group_join.py
tests/document/test_delete_nodes.py
tests/document/test_document.py
tests/document/test_gradients.py
tests/document/test_history.py
tests/document/test_hit_test.py
tests/document/test_holes.py
tests/document/test_join.py
tests/document/test_knife.py
tests/document/test_lines.py
tests/document/test_lookup.py
tests/document/test_move_objects.py
tests/document/test_redraw.py
tests/document/test_reshape.py
tests/document/test_resize.py
tests/document/test_rotate_flip.py
tests/document/test_structure.py
tests/document/test_topology.py
tests/document/test_transaction_commands.py
tests/document/test_transaction_pieces.py
tests/document/test_transforms.py
tests/document/test_visibility.py
tests/mcp/__init__.py
tests/mcp/conftest.py
tests/mcp/helpers.py
tests/mcp/test_agent.py
tests/mcp/test_batches.py
tests/mcp/test_clipping.py
tests/mcp/test_coverage.py
tests/mcp/test_edges.py
tests/mcp/test_feature_isolation.py
tests/mcp/test_features.py
tests/mcp/test_hosted.py
tests/mcp/test_live.py
tests/mcp/test_outlines.py
tests/mcp/test_push.py
tests/mcp/test_regions.py
tests/mcp/test_server.py
tests/mcp/test_settings_diagnostics.py
tests/mcp/test_stdio.py
tests/mcp/test_stroke_controls.py
tests/mcp/test_tool_schemas.py
tests/operations/__init__.py
tests/operations/helpers.py
tests/operations/test_candidates.py
tests/operations/test_colours_cleanup.py
tests/operations/test_contract.py
tests/operations/test_generate.py
tests/operations/test_gradient_fit.py
tests/operations/test_nodes_method.py
tests/operations/test_settings_contract.py
tests/refine/__init__.py
tests/refine/test_boundary.py
tests/refine/test_cel.py
tests/refine/test_cleanup.py
tests/refine/test_colour_regions.py
tests/refine/test_crossings.py
tests/refine/test_detail.py
tests/refine/test_edge_profiles.py
tests/refine/test_enclosure.py
tests/refine/test_filled_paths.py
tests/refine/test_fit_context.py
tests/refine/test_frozen.py
tests/refine/test_joint.py
tests/refine/test_lines.py
tests/refine/test_miter.py
tests/refine/test_parameters.py
tests/refine/test_selected_fit_boundaries.py
tests/refine/test_shared.py
tests/refine/test_simplify.py
tests/refine/test_snap.py
tests/refine/test_soft_coverage.py
tests/refine/test_stroke_support.py
tests/refine/test_support.py
tests/refine/test_tracing.py
tests/svg/__init__.py
tests/svg/test_cleanup.py
tests/ui/__init__.py
tests/ui/align.mjs
tests/ui/app_controllers.mjs
tests/ui/application_smoke.mjs
tests/ui/application_wiring.mjs
tests/ui/booleans.mjs
tests/ui/canvas_gestures.mjs
tests/ui/click_cycle.mjs
tests/ui/clip_dialog.mjs
tests/ui/clipboard.mjs
tests/ui/clipping_render.mjs
tests/ui/command_entry_points.mjs
tests/ui/concurrent_edit.mjs
tests/ui/document_dialogs.mjs
tests/ui/draw_tools.mjs
tests/ui/eyedropper_tool.mjs
tests/ui/file_save_failures.mjs
tests/ui/gradient_controls.mjs
tests/ui/gradient_handles.mjs
tests/ui/handles.mjs
tests/ui/helpers.py
tests/ui/input_queue.mjs
tests/ui/inspector.mjs
tests/ui/line_edits.mjs
tests/ui/move_snap.mjs
tests/ui/node_drag.mjs
tests/ui/overlay_render.mjs
tests/ui/palette_match.mjs
tests/ui/pencil_tool.mjs
tests/ui/project_files.mjs
tests/ui/project_versions.mjs
tests/ui/redraw_geometry.mjs
tests/ui/reference_error.mjs
tests/ui/reference_render.mjs
tests/ui/reference_render_browser.html
tests/ui/reference_render_browser.mjs
tests/ui/region_tool.mjs
tests/ui/resize_frame.mjs
tests/ui/rotate_handle.mjs
tests/ui/sample.svg
tests/ui/select_nudge.mjs
tests/ui/selection_model.mjs
tests/ui/selection_render.mjs
tests/ui/shape_tools.mjs
tests/ui/strip_overflow.mjs
tests/ui/stroke_controls.mjs
tests/ui/test_agent_apps.py
tests/ui/test_align_commands.py
tests/ui/test_artboard.py
tests/ui/test_boolean_commands.py
tests/ui/test_clip_commands.py
tests/ui/test_clipboard.py
tests/ui/test_concurrent_edits.py
tests/ui/test_desktop.py
tests/ui/test_eyedropper.py
tests/ui/test_gradient_handles.py
tests/ui/test_gradient_session.py
tests/ui/test_handles.py
tests/ui/test_improve.py
tests/ui/test_line_tools.py
tests/ui/test_pencil_tool.py
tests/ui/test_pointer_tools.py
tests/ui/test_project_versions.py
tests/ui/test_redraw.py
tests/ui/test_reference_error.py
tests/ui/test_region_commands.py
tests/ui/test_rotate_handle.py
tests/ui/test_scripts.py
tests/ui/test_server.py
tests/ui/test_session.py
tests/ui/test_shape_tools.py
tests/ui/test_static.py
tests/ui/test_stroke_controls.py
tests/ui/test_taper_controls.py
tests/ui/test_tidy_settings.py
tests/ui/tidy_settings.mjs
tests/ui/transform_fields.mjs
tests/ui/transport.mjs
tests/ui/tree_drop.mjs
tests/ui/visibility.mjs