VQL — Visual Query Language for vector description of photographs and drawings
.env.example)goal.yaml)vql0.1.3>=3.10openrouter/qwen/qwen3-coder-nextSUMD (description) → DOQL/source (code) → taskfile (automation) → testql (verification)
app.doql.less)```less markpact:doql path=app.doql.less // LESS format — define @variables here as needed
app { name: vql; version: 0.1.3; }
dependencies { png: “cairosvg>=2.7, pillow>=10.0”; desktop: “pillow>=10.0, mss>=9.0”; playwright: playwright>=1.40.0; dev: “pytest>=8.0, cairosvg>=2.7, pillow>=10.0, protobuf>=5.0, jsonschema>=4.0, goal>=2.1.0, costs>=0.1.20, pfix>=0.1.60”; }
interface[type=”api”] { type: rest; framework: fastapi; }
workflow[name=”venv”] { trigger: manual; step-1: run cmd=test -d .venv || python3 -m venv .venv; step-2: run cmd=echo “venv ready: .venv/”; }
workflow[name=”install”] { trigger: manual; step-1: run cmd=$(PIP) install -e .; }
workflow[name=”install-dev”] { trigger: manual; step-1: run cmd=$(PIP) install -e .; step-2: run cmd=$(PIP) install -e packages/uri2vql; step-3: run cmd=$(PIP) install -e packages/nlp2vql; step-4: run cmd=$(PIP) install -e packages/dsl2vql; step-5: run cmd=$(PIP) install -e packages/cli2vql; step-6: run cmd=$(PIP) install -e packages/rest2vql; step-7: run cmd=-$(PIP) install -e packages/mcp2vql; step-8: run cmd=$(PIP) install -e “.[dev,png]” jsonschema protobuf fastapi uvicorn httpx; step-9: run cmd=echo “dev stack installed”; }
workflow[name=”proto”] { trigger: manual; step-1: run cmd=$(PIP) install -q grpcio-tools; step-2: run cmd=bash packages/dsl2vql/scripts/generate-proto.sh; }
workflow[name=”test”] { trigger: manual; step-1: run cmd=echo “Running tests…”; step-2: run cmd=$(PYTEST); }
workflow[name=”test-cov”] { trigger: manual; step-1: run cmd=$(PYTHON) -m pytest tests/ packages/dsl2vql/tests -v \; step-2: run cmd=–cov=vql –cov=dsl2vql –cov-report=term-missing; }
workflow[name=”test-all”] { trigger: manual; step-1: run cmd=$(PYTHON) -m pytest tests/ packages/ -q –tb=short; }
workflow[name=”test-roundtrip”] { trigger: manual; step-1: run cmd=$(PYTHON) -m pytest tests/test_photo_roundtrip.py -q –tb=short; step-2: run cmd=$(PYTHON) examples/photo-roundtrip-test.py –out /tmp/vql-roundtrip; }
workflow[name=”validate-schema”] { trigger: manual; step-1: run cmd=dsl2vql validate-schema; }
workflow[name=”compile”] { trigger: manual; step-1: run cmd=dsl2vql -c ‘COMPILE “narysuj czerwone koło”’ –json; }
workflow[name=”serve”] { trigger: manual; step-1: run cmd=rest2vql serve –port $(PORT) –host 127.0.0.1; }
workflow[name=”clean”] { trigger: manual; step-1: run cmd=find . -type f -name ‘.pyc’ -delete; step-2: run cmd=find . -type d -name ‘pycache’ -exec rm -rf {} + 2>/dev/null || true; step-3: run cmd=find . -type d -name ‘.egg-info’ -exec rm -rf {} + 2>/dev/null || true; step-4: run cmd=rm -rf build/ dist/ .coverage htmlcov/ .pytest_cache .goal_test_report.xml; step-5: run cmd=echo “clean done”; }
workflow[name=”build”] { trigger: manual; step-1: run cmd=$(PIP) install -q build; step-2: run cmd=rm -rf dist/ build/; step-3: run cmd=$(PYTHON) -m build; }
workflow[name=”publish”] { trigger: manual; step-1: run cmd=$(PIP) install -q twine; step-2: run cmd=$(PYTHON) -m twine check dist/*; }
workflow[name=”publish-confirm”] { trigger: manual; step-1: run cmd=$(PYTHON) -m twine upload dist/*; }
workflow[name=”version”] { trigger: manual; step-1: run cmd=echo -n “VERSION file: “; step-2: run cmd=cat VERSION; step-3: run cmd=$(PYTHON) -c “from importlib.metadata import version; print(‘installed:’, version(‘vql’))” 2>/dev/null || echo “installed: (not installed)”; }
workflow[name=”goal”] { trigger: manual; step-1: run cmd=goal -a; }
tests { import: testql-scenarios/*/.testql.toon.yaml; }
env_vars { keys: OPENROUTER_API_KEY, LLM_MODEL, PFIX_AUTO_APPLY, PFIX_AUTO_INSTALL_DEPS, PFIX_AUTO_RESTART, PFIX_MAX_RETRIES, PFIX_DRY_RUN, PFIX_ENABLED, PFIX_GIT_COMMIT, PFIX_GIT_PREFIX, PFIX_CREATE_BACKUPS, XDG_SESSION_TYPE, WAYLAND_DISPLAY, VQL_CAPTURE_INTERACTIVE, VQL_PORTAL_PYTHON, VQL_CAPTURE_BACKEND; }
deploy { target: makefile; }
environment[name=”local”] { runtime: python; env_file: .env; template_file: .env.example; python_version: >=3.10; vars: LLM_MODEL, OPENROUTER_API_KEY, PFIX_AUTO_APPLY, PFIX_AUTO_INSTALL_DEPS, PFIX_AUTO_RESTART, PFIX_CREATE_BACKUPS, PFIX_DRY_RUN, PFIX_ENABLED, PFIX_GIT_COMMIT, PFIX_GIT_PREFIX, PFIX_MAX_RETRIES; runtime_llm: OPENROUTER_API_KEY; runtime_pfix: PFIX_AUTO_APPLY, PFIX_AUTO_INSTALL_DEPS, PFIX_AUTO_RESTART, PFIX_CREATE_BACKUPS, PFIX_DRY_RUN, PFIX_ENABLED, PFIX_GIT_COMMIT, PFIX_GIT_PREFIX, PFIX_MAX_RETRIES; }
## Interfaces
### testql Scenarios
#### `testql-scenarios/generated-cli-tests.testql.toon.yaml`
```toon markpact:testql path=testql-scenarios/generated-cli-tests.testql.toon.yaml
# SCENARIO: CLI Command Tests
# TYPE: cli
# GENERATED: true
CONFIG[2]{key, value}:
cli_command, python -m vql
timeout_ms, 10000
# Test 1: CLI help command
SHELL "python -m vql --help" 5000
ASSERT_EXIT_CODE 0
ASSERT_STDOUT_CONTAINS "usage"
# Test 2: CLI version command
SHELL "python -m vql --version" 5000
ASSERT_EXIT_CODE 0
# Test 3: CLI main workflow (dry-run)
SHELL "python -m vql --help" 10000
ASSERT_EXIT_CODE 0
testql-scenarios/generated-from-pytests.testql.toon.yaml```toon markpact:testql path=testql-scenarios/generated-from-pytests.testql.toon.yaml
CONFIG[2]{key, value}: base_url, ${api_url:-http://localhost:8101} timeout_ms, 10000
ASSERT[2]{field, operator, expected}: out.ocr.source, ==, “rapidocr” out.ocr.source, ==, “rapidocr”
## Workflows
## Configuration
```yaml
project:
name: vql
version: 0.1.3
env: local
(see pyproject.toml)
```text markpact:deps python scope=dev pytest>=8.0 cairosvg>=2.7 pillow>=10.0 protobuf>=5.0 jsonschema>=4.0 goal>=2.1.0 costs>=0.1.20 pfix>=0.1.60
## Deployment
```bash markpact:run
pip install vql
# development install
pip install -e .[dev]
.env.example)| Variable | Default | Description |
|---|---|---|
OPENROUTER_API_KEY |
*(not set)* |
Required: OpenRouter API key (https://openrouter.ai/keys) |
LLM_MODEL |
openrouter/qwen/qwen3-coder-next |
Model (default: openrouter/qwen/qwen3-coder-next) |
PFIX_AUTO_APPLY |
true |
true = apply fixes without asking |
PFIX_AUTO_INSTALL_DEPS |
true |
true = auto pip/uv install |
PFIX_AUTO_RESTART |
false |
true = os.execv restart after fix |
PFIX_MAX_RETRIES |
3 |
|
PFIX_DRY_RUN |
false |
|
PFIX_ENABLED |
true |
|
PFIX_GIT_COMMIT |
false |
true = auto-commit fixes |
PFIX_GIT_PREFIX |
pfix: |
commit message prefix |
PFIX_CREATE_BACKUPS |
false |
false = disable .pfix_backups/ directory |
goal.yaml)semverconventional scope=vqlkeep-a-changelogpython, nodejs, rustVERSION, pyproject.toml:version, .venv/lib/python3.12/site-packages/cryptography/__init__.py:__version__PACKAGESPYTESThelpvenvinstallinstall-devprototesttest-covtest-alltest-roundtripvalidate-schemacompileservecleanbuildpublishpublish-confirmversiongoalproject/map.toon.yaml```toon markpact:analysis path=project/map.toon.yaml
M[156]:
app.doql.less,148
examples/full-pipeline.sh,81
examples/generate-demo-screen.py,77
examples/img2nl-vql-flow.sh,215
examples/live-capture-test.sh,95
examples/photo-roundtrip-test.py,407
examples/scope-window.py,54
install-dev.sh,38
packages/cli2vql/src/cli2vql/init.py,2
packages/cli2vql/src/cli2vql/cli.py,69
packages/dsl2img2svg/src/dsl2img2svg/init.py,6
packages/dsl2img2svg/src/dsl2img2svg/cli.py,22
packages/dsl2img2svg/src/dsl2img2svg/dispatch.py,116
packages/dsl2img2svg/tests/test_dispatch.py,32
packages/dsl2vql/scripts/generate-proto.sh,8
packages/dsl2vql/src/dsl2vql/init.py,7
packages/dsl2vql/src/dsl2vql/bus.py,78
packages/dsl2vql/src/dsl2vql/cli.py,98
packages/dsl2vql/src/dsl2vql/codec.py,36
packages/dsl2vql/src/dsl2vql/engine.py,9
packages/dsl2vql/src/dsl2vql/events.py,109
packages/dsl2vql/src/dsl2vql/grammar.py,97
packages/dsl2vql/src/dsl2vql/handlers/init.py,6
packages/dsl2vql/src/dsl2vql/handlers/command.py,131
packages/dsl2vql/src/dsl2vql/handlers/query.py,110
packages/dsl2vql/src/dsl2vql/pb_codec.py,158
packages/dsl2vql/src/dsl2vql/result.py,29
packages/dsl2vql/src/dsl2vql/schema_registry.py,47
packages/dsl2vql/src/dsl2vql/v1/init.py,6
packages/dsl2vql/src/dsl2vql/v1/command_pb2.py,53
packages/dsl2vql/src/dsl2vql/v1/result_pb2.py,40
packages/dsl2vql/tests/test_parity.py,29
packages/img2svg/src/img2svg/init.py,14
packages/img2svg/src/img2svg/cli.py,72
packages/img2svg/src/img2svg/svg_emit.py,135
packages/img2svg/src/img2svg/to_vql.py,142
packages/img2svg/src/img2svg/trace.py,264
packages/img2svg/tests/test_img2svg.py,101
packages/img2vql/src/img2vql/init.py,27
packages/img2vql/src/img2vql/adopt.py,64
packages/img2vql/src/img2vql/cli.py,88
packages/img2vql/src/img2vql/describe_ui.py,122
packages/img2vql/src/img2vql/detect.py,380
packages/img2vql/src/img2vql/diagnose.py,126
packages/img2vql/src/img2vql/fingerprint.py,105
packages/img2vql/src/img2vql/metadata.py,340
packages/img2vql/src/img2vql/program.py,142
packages/img2vql/tests/test_auto_ocr.py,45
packages/img2vql/tests/test_detect.py,75
packages/img2vql/tests/test_diagnose.py,31
packages/img2vql/tests/test_fingerprint.py,93
packages/img2vql/tests/test_metadata_imgl.py,49
packages/mcp2vql/src/mcp2vql/init.py,6
packages/mcp2vql/src/mcp2vql/cli.py,9
packages/mcp2vql/src/mcp2vql/server.py,136
packages/nlp2vql/src/nlp2vql/init.py,7
packages/nlp2vql/src/nlp2vql/apply.py,49
packages/nlp2vql/src/nlp2vql/cli.py,54
packages/nlp2vql/src/nlp2vql/to_dsl.py,43
packages/rest2vql/src/rest2vql/init.py,6
packages/rest2vql/src/rest2vql/app.py,73
packages/rest2vql/src/rest2vql/cli.py,25
packages/rest2vql/src/rest2vql/window.py,125
packages/rest2vql/src/rest2vql/window_routes.py,111
packages/rest2vql/tests/test_window_api.py,121
packages/uri2img2svg/src/uri2img2svg/init.py,7
packages/uri2img2svg/src/uri2img2svg/cli.py,29
packages/uri2img2svg/src/uri2img2svg/query.py,145
packages/uri2img2svg/src/uri2img2svg/uri.py,60
packages/uri2img2svg/tests/test_uri2img2svg.py,42
packages/uri2vql/src/uri2vql/init.py,46
packages/uri2vql/src/uri2vql/cli.py,353
packages/uri2vql/src/uri2vql/compile.py,37
packages/uri2vql/src/uri2vql/nlp2uri.py,330
packages/uri2vql/src/uri2vql/patch.py,41
packages/uri2vql/src/uri2vql/query.py,96
packages/uri2vql/src/uri2vql/run.py,65
packages/uri2vql/src/uri2vql/uri.py,184
packages/uri2vql/src/uri2vql/window.py,654
packages/uri2vql/tests/test_nlp2uri_window.py,31
packages/uri2vql/tests/test_window_refresh.py,79
project.sh,59
scripts/test-goal.sh,7
src/vql/init.py,57
src/vql/adopt/init.py,20
src/vql/adopt/portal_capture.py,110
src/vql/adopt/window.py,805
src/vql/api.py,56
src/vql/compiler/init.py,16
src/vql/compiler/legacy_drawcommand.py,143
src/vql/compiler/nl_to_vql.py,70
src/vql/drawing/init.py,17
src/vql/drawing/arrow_generator.py,47
src/vql/drawing/bird_generator.py,50
src/vql/drawing/boat_generator.py,41
src/vql/drawing/butterfly_generator.py,51
src/vql/drawing/car_generator.py,49
src/vql/drawing/castle_generator.py,64
src/vql/drawing/cat_generator.py,56
src/vql/drawing/circle_generator.py,30
src/vql/drawing/cloud_detailed_generator.py,48
src/vql/drawing/colors.py,136
src/vql/drawing/commands.py,272
src/vql/drawing/crescent_generator.py,37
src/vql/drawing/cross_generator.py,34
src/vql/drawing/diamond_generator.py,37
src/vql/drawing/dot_generator.py,30
src/vql/drawing/ellipse_generator.py,31
src/vql/drawing/event_store.py,102
src/vql/drawing/events.py,143
src/vql/drawing/fish_generator.py,47
src/vql/drawing/flower_generator.py,36
src/vql/drawing/grid_generator.py,37
src/vql/drawing/heart_generator.py,31
src/vql/drawing/hexagon_generator.py,28
src/vql/drawing/house_generator.py,31
src/vql/drawing/line_generator.py,26
src/vql/drawing/mountain_generator.py,40
src/vql/drawing/nl_parser.py,226
src/vql/drawing/octagon_generator.py,28
src/vql/drawing/path_generator.py,26
src/vql/drawing/pentagon_generator.py,28
src/vql/drawing/rectangle_generator.py,27
src/vql/drawing/renderers/init.py,10
src/vql/drawing/renderers/base.py,85
src/vql/drawing/renderers/playwright.py,216
src/vql/drawing/renderers/svg.py,94
src/vql/drawing/rocket_generator.py,53
src/vql/drawing/shape_generator.py,38
src/vql/drawing/shape_registry.py,104
src/vql/drawing/shapes.py,79
src/vql/drawing/spiral_generator.py,33
src/vql/drawing/square_generator.py,26
src/vql/drawing/star_generator.py,34
src/vql/drawing/sun_generator.py,37
src/vql/drawing/svg_path_parser.py,206
src/vql/drawing/tree_generator.py,34
src/vql/drawing/triangle_generator.py,27
src/vql/drawing/wave_generator.py,35
src/vql/facade.py,96
src/vql/library/init.py,15
src/vql/renderers/init.py,24
src/vql/renderers/base.py,66
src/vql/renderers/playwright.py,23
src/vql/renderers/svg.py,52
src/vql/schema/init.py,34
src/vql/schema/program.py,424
src/vql/validation/init.py,14
src/vql/validation/metadata.py,58
src/vql/validation/spec.py,92
tests/test_adopt_window_capture.py,37
tests/test_metadata_validation.py,41
tests/test_photo_roundtrip.py,116
tests/test_screenshot_merge.py,31
tests/test_vql.py,245
tree.sh,2
D:
examples/generate-demo-screen.py:
e: _load_font,write_demo_screen,main
_load_font(size)
write_demo_screen(path)
main()
examples/photo-roundtrip-test.py:
e: _require_pil,sample_flat_shapes,sample_gradient,sample_product_photo,sample_natural_scene,sample_nl_drawing,test_img2svg_roundtrip,test_ui_grid_adopt,test_vtracer_roundtrip,test_opencv_contours,test_metadata_only_reconstruction,test_img2vql_detect,main
_require_pil()
sample_flat_shapes(out)
sample_gradient(out)
sample_product_photo(out)
sample_natural_scene(out)
sample_nl_drawing(out)
test_img2svg_roundtrip(image;out)
test_ui_grid_adopt(out)
test_vtracer_roundtrip(image;out)
test_opencv_contours(image;out)
test_metadata_only_reconstruction(out)
test_img2vql_detect(out)
main()
examples/scope-window.py:
e: main
main()
packages/cli2vql/src/cli2vql/init.py:
packages/cli2vql/src/cli2vql/cli.py:
e: _repl,main
_repl(default_file)
main(argv)
packages/dsl2img2svg/src/dsl2img2svg/init.py:
packages/dsl2img2svg/src/dsl2img2svg/cli.py:
e: main
main(argv)
packages/dsl2img2svg/src/dsl2img2svg/dispatch.py:
e: _parse_kv_args,dispatch,DispatchResult
DispatchResult: to_dict(0)
_parse_kv_args(tokens)
dispatch(line)
packages/dsl2img2svg/tests/test_dispatch.py:
e: test_vectorize,test_query_uri
test_vectorize(tmp_path)
test_query_uri(tmp_path)
packages/dsl2vql/src/dsl2vql/init.py:
packages/dsl2vql/src/dsl2vql/bus.py:
e: _dispatch_cmd,_bytes_to_cmd,dispatch,execute_dsl_line,execute_dsl
_dispatch_cmd(cmd)
_bytes_to_cmd(data)
dispatch(envelope)
execute_dsl_line(line)
execute_dsl(text)
packages/dsl2vql/src/dsl2vql/cli.py:
e: _main_legacy,_main_subcommand,main
_main_legacy(argv)
_main_subcommand(argv)
main(argv)
packages/dsl2vql/src/dsl2vql/codec.py:
e: encode_text,roundtrip_text,encode_protobuf,decode_protobuf
encode_text(line)
roundtrip_text(line)
encode_protobuf(line)
decode_protobuf(data)
packages/dsl2vql/src/dsl2vql/engine.py:
packages/dsl2vql/src/dsl2vql/events.py:
e: default_event_store,DslEvent,EventStore
DslEvent: to_dict(0)
EventStore: init(1),append(2),replay(0)
default_event_store(default_file)
packages/dsl2vql/src/dsl2vql/grammar.py:
e: split_command,pick_flag,parse_line,to_text
split_command(line)
pick_flag(tokens;flag)
parse_line(line)
to_text(cmd)
packages/dsl2vql/src/dsl2vql/handlers/init.py:
packages/dsl2vql/src/dsl2vql/handlers/command.py:
e: _read_json,handle_generate,handle_compile,handle_patch,handle_export,handle_from_tokens
_read_json(path)
handle_generate(cmd)
handle_compile(cmd)
handle_patch(cmd)
handle_export(cmd)
handle_from_tokens(line;tokens)
packages/dsl2vql/src/dsl2vql/handlers/query.py:
e: _load_program,handle_query,handle_validate,handle_render,handle_resolve
_load_program(path)
handle_query(cmd)
handle_validate(cmd)
handle_render(cmd)
handle_resolve(cmd)
packages/dsl2vql/src/dsl2vql/pb_codec.py:
e: _set_body,envelope_to_dict,encode_protobuf,decode_protobuf,encode_text_to_protobuf,decode_protobuf_to_text,result_to_pb,encode_result_protobuf
_set_body(envelope;cmd)
envelope_to_dict(envelope)
encode_protobuf(cmd)
decode_protobuf(data)
encode_text_to_protobuf(line)
decode_protobuf_to_text(data)
result_to_pb(result)
encode_result_protobuf(result)
packages/dsl2vql/src/dsl2vql/result.py:
e: DslResult
DslResult: to_dict(0)
packages/dsl2vql/src/dsl2vql/schema_registry.py:
e: _load_schemas,schema_for_verb,all_schemas,validate_command_dict,validate_schema_registry
_load_schemas()
schema_for_verb(verb)
all_schemas()
validate_command_dict(cmd)
validate_schema_registry()
packages/dsl2vql/src/dsl2vql/v1/init.py:
packages/dsl2vql/src/dsl2vql/v1/command_pb2.py:
packages/dsl2vql/src/dsl2vql/v1/result_pb2.py:
packages/dsl2vql/tests/test_parity.py:
e: test_parity_text_vs_dict,test_validate_schema_registry,test_encode_decode_roundtrip
test_parity_text_vs_dict()
test_validate_schema_registry()
test_encode_decode_roundtrip()
packages/img2svg/src/img2svg/init.py:
packages/img2svg/src/img2svg/cli.py:
e: main
main(argv)
packages/img2svg/src/img2svg/svg_emit.py:
e: regions_to_svg,_vtracer_paths_to_svg,paths_to_svg,image_to_svg
regions_to_svg(trace)
_vtracer_paths_to_svg(trace)
paths_to_svg(trace)
image_to_svg(image_path)
packages/img2svg/src/img2svg/to_vql.py:
e: _background_from_regions,trace_to_vql_program,image_to_vql
_background_from_regions(regions)
trace_to_vql_program(trace)
image_to_vql(image_path)
packages/img2svg/src/img2svg/trace.py:
e: _hex_color,_merge_grid_cells,trace_image_regions,trace_contours_opencv,_parse_translate,_parse_vtracer_svg,trace_vtracer,TracedRegion
TracedRegion: to_dict(0) # A merged rectangular region from the image.
_hex_color(rgb)
_merge_grid_cells(colors)
trace_image_regions(image_path)
trace_contours_opencv(image_path)
_parse_translate(transform)
_parse_vtracer_svg(svg_path)
trace_vtracer(image_path)
packages/img2svg/tests/test_img2svg.py:
e: test_trace_regions,test_image_to_svg,test_image_to_vql,test_trace_vtracer,test_image_to_vql_vtracer,test_image_to_vql_sets_background
test_trace_regions(tmp_path)
test_image_to_svg(tmp_path)
test_image_to_vql(tmp_path)
test_trace_vtracer(tmp_path)
test_image_to_vql_vtracer(tmp_path)
test_image_to_vql_sets_background(tmp_path)
packages/img2vql/src/img2vql/init.py:
packages/img2vql/src/img2vql/adopt.py:
e: adopt_screenshot
adopt_screenshot(image_path)
packages/img2vql/src/img2vql/cli.py:
e: main
main(argv)
packages/img2vql/src/img2vql/describe_ui.py:
e: _role_name,_loc_name,describe_ui_layout
_role_name(role;locale)
_loc_name(loc;locale)
describe_ui_layout(detection)
packages/img2vql/src/img2vql/detect.py:
e: _hex_color,_location_label,_avg_color,_detect_titlebar,_detect_panels,_flood_rects,_detect_buttons,_detect_toolbar,_iou,_dedupe,detect_ui_elements,UIElement
UIElement: width(0),height(0),center(0),bbox_norm(0),to_dict(0) # Detected UI region with role and location.
_hex_color(rgb)
_location_label(cx;cy;w;h)
_avg_color(im;x0;y0;x1;y1)
_detect_titlebar(im;w;h)
_detect_panels(im;w;h)
_flood_rects(mask)
_detect_buttons(im;w;h)
_detect_toolbar(buttons;w;h)
_iou(a;b)
_dedupe(elements)
detect_ui_elements(image_path)
packages/img2vql/src/img2vql/diagnose.py:
e: _normalize_locale,diagnose_image,diagnose_for_vql,_recommendation
_normalize_locale(locale)
diagnose_image(image_path)
diagnose_for_vql(image_path)
_recommendation(diag)
packages/img2vql/src/img2vql/fingerprint.py:
e: fingerprint_for_image,load_program_fingerprint,_json_safe,compare_with_program
fingerprint_for_image(image_path)
load_program_fingerprint(vql_program)
_json_safe(value)
compare_with_program(image_path;vql_program)
packages/img2vql/src/img2vql/metadata.py:
e: _json_safe,_compact_special_hits,_text_likely,rapidocr_special_hits,auto_ocr_special_hits,imgl_ocr_special_hits,_merge_special_hits,img2nl_metadata_slice,merge_program_metadata,refresh_program_metadata,metadata_from_diagnose,save_diagnose_to_program
_json_safe(value)
_compact_special_hits(special)
_text_likely(features;special)
rapidocr_special_hits(image_path)
auto_ocr_special_hits(image_path;features)
imgl_ocr_special_hits(image_path)
_merge_special_hits(img2nl_special;imgl_special)
img2nl_metadata_slice(image_path)
merge_program_metadata(metadata;image_path)
refresh_program_metadata(vql_program;image_path)
metadata_from_diagnose(diag)
save_diagnose_to_program(vql_program;diag)
packages/img2vql/src/img2vql/program.py:
e: _role_style,elements_to_vql_program,_bbox_contains,_build_contains_relations
_role_style(role)
elements_to_vql_program(detection)
_bbox_contains(outer;inner)
_build_contains_relations(objects)
packages/img2vql/tests/test_auto_ocr.py:
e: test_text_likely_when_edges_suggest_text,test_text_likely_false_when_has_text,test_auto_ocr_uses_rapidocr_when_available
test_text_likely_when_edges_suggest_text()
test_text_likely_false_when_has_text()
test_auto_ocr_uses_rapidocr_when_available(tmp_path)
packages/img2vql/tests/test_detect.py:
e: _make_ui_fixture,test_detect_finds_titlebar_and_buttons,test_describe_ui_polish,test_adopt_writes_contains_relations,test_adopt_writes_vql_program
_make_ui_fixture(path)
test_detect_finds_titlebar_and_buttons(tmp_path)
test_describe_ui_polish(tmp_path)
test_adopt_writes_contains_relations(tmp_path)
test_adopt_writes_vql_program(tmp_path)
packages/img2vql/tests/test_diagnose.py:
e: test_diagnose_blank_vs_rich
test_diagnose_blank_vs_rich(tmp_path)
packages/img2vql/tests/test_fingerprint.py:
e: _solid,test_screenshot_to_program_stores_fingerprint,test_diagnose_uses_program_fingerprint,test_analyze_skips_adopt_when_unchanged,test_screenshot_stores_special_hits_metadata,test_compare_with_program
_solid(path;color;size)
test_screenshot_to_program_stores_fingerprint(tmp_path)
test_diagnose_uses_program_fingerprint(tmp_path)
test_analyze_skips_adopt_when_unchanged(tmp_path)
test_screenshot_stores_special_hits_metadata(tmp_path)
test_compare_with_program(tmp_path)
packages/img2vql/tests/test_metadata_imgl.py:
e: _text_image,test_imgl_ocr_special_hits_finds_text,test_merge_program_metadata_uses_imgl_when_img2nl_misses,test_refresh_program_metadata_persists_imgl_ocr
_text_image(path;text)
test_imgl_ocr_special_hits_finds_text(tmp_path)
test_merge_program_metadata_uses_imgl_when_img2nl_misses(tmp_path)
test_refresh_program_metadata_persists_imgl_ocr(tmp_path)
packages/mcp2vql/src/mcp2vql/init.py:
packages/mcp2vql/src/mcp2vql/cli.py:
packages/mcp2vql/src/mcp2vql/server.py:
e: _require_fastmcp,main,VqlMCPServer
VqlMCPServer: post_init(0),_register_tools(0),run(0)
_require_fastmcp()
main()
packages/nlp2vql/src/nlp2vql/init.py:
packages/nlp2vql/src/nlp2vql/apply.py:
e: apply_nl,ApplyResult
ApplyResult: to_dict(0)
apply_nl(prompt)
packages/nlp2vql/src/nlp2vql/cli.py:
e: main
main(argv)
packages/nlp2vql/src/nlp2vql/to_dsl.py:
e: _intent,nl_to_dsl_line,to_dsl
_intent(prompt)
nl_to_dsl_line(prompt)
to_dsl(prompt)
packages/rest2vql/src/rest2vql/init.py:
packages/rest2vql/src/rest2vql/app.py:
e: create_app
create_app()
packages/rest2vql/src/rest2vql/cli.py:
e: main
main(argv)
packages/rest2vql/src/rest2vql/window.py:
e: window_detect,window_compare,window_refresh,window_diagnose,window_analyze,window_adopt,window_summary,WindowImageBody
WindowImageBody:
window_detect(image)
window_compare(image)
window_refresh(image)
window_diagnose(image)
window_analyze(image)
window_adopt(image)
window_summary()
packages/rest2vql/src/rest2vql/window_routes.py:
e: _window_response,post_window_detect,post_window_compare,post_window_refresh,post_window_diagnose,post_window_analyze,post_window_adopt,post_window_summary
_window_response(payload)
post_window_detect(req)
post_window_compare(req)
post_window_refresh(req)
post_window_diagnose(req)
post_window_analyze(req)
post_window_adopt(req)
post_window_summary(req)
packages/rest2vql/tests/test_window_api.py:
e: client,_solid_image,_program_with_fingerprint,test_health,test_window_detect_missing_dep,test_window_compare,test_window_refresh,test_window_diagnose
client()
_solid_image(path;color)
_program_with_fingerprint(path;fingerprint)
test_health(client)
test_window_detect_missing_dep(client;tmp_path)
test_window_compare(client;tmp_path)
test_window_refresh(client;tmp_path)
test_window_diagnose(client;tmp_path)
packages/uri2img2svg/src/uri2img2svg/init.py:
packages/uri2img2svg/src/uri2img2svg/cli.py:
e: main
main(argv)
packages/uri2img2svg/src/uri2img2svg/query.py:
e: query_uri,QueryResult
QueryResult: to_dict(0)
query_uri(uri)
packages/uri2img2svg/src/uri2img2svg/uri.py:
e: is_img2svg_uri,uri_for_vectorize,parse_img2svg_uri,Img2SvgUri
Img2SvgUri: target(0)
is_img2svg_uri(uri)
uri_for_vectorize(path)
parse_img2svg_uri(uri)
packages/uri2img2svg/tests/test_uri2img2svg.py:
e: test_parse_uri,test_vectorize,test_svg_uri
test_parse_uri()
test_vectorize(tmp_path)
test_svg_uri(tmp_path)
packages/uri2vql/src/uri2vql/init.py:
packages/uri2vql/src/uri2vql/cli.py:
e: main
main(argv)
packages/uri2vql/src/uri2vql/compile.py:
e: _dsl_from_uri,compile_vql_uri
_dsl_from_uri(uri)
compile_vql_uri(uri;host)
packages/uri2vql/src/uri2vql/nlp2uri.py:
e: resolve_prompt_to_vql_uri,_extract_click_target,_extract_type_parts,nlp2uri,best_uri,ResolvedVqlUri
ResolvedVqlUri: to_dict(0)
resolve_prompt_to_vql_uri(prompt)
_extract_click_target(normalized)
_extract_type_parts(normalized)
nlp2uri(prompt)
best_uri(prompt)
packages/uri2vql/src/uri2vql/patch.py:
e: patch_uri,PatchResult
PatchResult: to_dict(0)
patch_uri(uri)
packages/uri2vql/src/uri2vql/query.py:
e: _load_program,query_uri,QueryResult
QueryResult: to_dict(0)
_load_program(path)
query_uri(uri)
packages/uri2vql/src/uri2vql/run.py:
e: run_uri,run_uri_json,RunResult
RunResult: to_dict(0)
run_uri(uri)
run_uri_json(uri)
packages/uri2vql/src/uri2vql/uri.py:
e: is_vql_uri,_with_file,uri_for_program,uri_for_scene,uri_for_objects,uri_for_object,uri_for_window_analyze,uri_for_window_summary,uri_for_window_imgl,uri_for_imgl_list,uri_for_imgl_click,uri_for_imgl_type,uri_for_window_diagnose,uri_for_window_compare,uri_for_window_refresh,parse_vql_uri,VqlUri
VqlUri: target(0)
is_vql_uri(uri)
_with_file(selector)
uri_for_program(file)
uri_for_scene(file)
uri_for_objects(file)
uri_for_object(obj_id)
uri_for_window_analyze()
uri_for_window_summary(file)
uri_for_window_imgl()
uri_for_imgl_list()
uri_for_imgl_click()
uri_for_imgl_type()
uri_for_window_diagnose()
uri_for_window_compare()
uri_for_window_refresh()
parse_vql_uri(uri)
packages/uri2vql/src/uri2vql/window.py:
e: _resolve_image_param,_normalize_locale,_diagnose_fallback,_resolve_window_image,refresh_window_metadata,compare_window_image,diagnose_window_image,_query_window_imgl,analyze_window_uri,query_window,WindowAnalyzeResult
WindowAnalyzeResult: to_dict(0)
_resolve_image_param(image)
_normalize_locale(locale)
_diagnose_fallback(image)
_resolve_window_image(out_file;image)
refresh_window_metadata(image)
compare_window_image(image)
diagnose_window_image(image)
_query_window_imgl()
analyze_window_uri(uri)
query_window(uri)
packages/uri2vql/tests/test_nlp2uri_window.py:
e: test_nlp_refresh_window,test_nlp_compare_window,test_nlp_diagnose_window,test_nlp_unchanged_suggests_compare
test_nlp_refresh_window()
test_nlp_compare_window()
test_nlp_diagnose_window()
test_nlp_unchanged_suggests_compare()
packages/uri2vql/tests/test_window_refresh.py:
e: _solid,test_diagnose_save_to_program,test_save_diagnose_to_program_helper,test_window_refresh_uri
_solid(path;color;size)
test_diagnose_save_to_program(tmp_path)
test_save_diagnose_to_program_helper(tmp_path)
test_window_refresh_uri(tmp_path)
src/vql/init.py:
src/vql/adopt/init.py:
src/vql/adopt/portal_capture.py:
e: capture_via_portal,main
capture_via_portal(out)
main(argv)
src/vql/adopt/window.py:
e: _require_pillow,_session_type,_is_wayland,_capture_interactive_mode,_should_use_interactive_portal,_portal_python,image_stats,_image_is_blank,_finalize_capture,_run_capture,_capture_with_gnome_shell,_capture_with_grim,_capture_with_gnome_screenshot,_capture_with_portal,_capture_with_scrot,_capture_with_mss,_capture_backends,capture_diagnose,_capture_permission_hint,_active_window_title,capture_screen,_hex_color,_optional_fingerprint,_enrich_program_metadata,_merge_grid_colors,screenshot_to_program,analyze_screenshot,CaptureError,CaptureInfo,CaptureAttempt
CaptureError: # Raised when no capture backend produced a usable image.
CaptureInfo: to_dict(0)
CaptureAttempt: to_dict(0)
_require_pillow()
_session_type()
_is_wayland()
_capture_interactive_mode()
_should_use_interactive_portal()
_portal_python()
image_stats(path)
_image_is_blank(path)
_finalize_capture(out)
_run_capture(out)
_capture_with_gnome_shell(out)
_capture_with_grim(out)
_capture_with_gnome_screenshot(out)
_capture_with_portal(out)
_capture_with_scrot(out)
_capture_with_mss(out)
_capture_backends()
capture_diagnose(out)
_capture_permission_hint()
_active_window_title()
capture_screen(out)
_hex_color(rgb)
_optional_fingerprint(image_path)
_enrich_program_metadata(base;path)
_merge_grid_colors(colors)
screenshot_to_program(image_path)
analyze_screenshot(image_path)
src/vql/api.py:
src/vql/compiler/init.py:
src/vql/compiler/legacy_drawcommand.py:
e: program_to_commands,commands_to_program,compile_to_events
program_to_commands(program)
commands_to_program(commands)
compile_to_events(program)
src/vql/compiler/nl_to_vql.py:
e: nl_to_program
nl_to_program(text)
src/vql/drawing/init.py:
src/vql/drawing/arrow_generator.py:
e: ArrowGenerator
ArrowGenerator: generate(3)
src/vql/drawing/bird_generator.py:
e: BirdGenerator
BirdGenerator: generate(3)
src/vql/drawing/boat_generator.py:
e: BoatGenerator
BoatGenerator: generate(3)
src/vql/drawing/butterfly_generator.py:
e: ButterflyGenerator
ButterflyGenerator: generate(3)
src/vql/drawing/car_generator.py:
e: CarGenerator
CarGenerator: generate(3)
src/vql/drawing/castle_generator.py:
e: CastleGenerator
CastleGenerator: generate(3)
src/vql/drawing/cat_generator.py:
e: CatGenerator
CatGenerator: generate(3)
src/vql/drawing/circle_generator.py:
e: CircleGenerator
CircleGenerator: generate(3)
src/vql/drawing/cloud_detailed_generator.py:
e: CloudDetailedGenerator
CloudDetailedGenerator: generate(3)
src/vql/drawing/colors.py:
e: ColorResolver
ColorResolver: init(0),register(2),resolve(2),extract_colors(1),available(0),unique_colors(0) # Resolves color names to hex codes with Polish + English supp
src/vql/drawing/commands.py:
e: DrawCommand,InitCanvas,DrawShape,SetColor,SelectTool,ClearCanvas,CommandHandler,CommandBus
DrawCommand: validate(0) # Abstract base for all drawing commands.
InitCanvas: validate(0) # Initialize a drawing canvas.
DrawShape: validate(0) # Draw a shape on the canvas.
SetColor: validate(0) # Change the active drawing color.
SelectTool: validate(0) # Select a drawing tool.
ClearCanvas: validate(0) # Clear the entire canvas.
CommandHandler: call(3) # Protocol for command handlers.
CommandBus: init(1),state(0),register_handler(2),add_pre_hook(1),add_post_hook(1),dispatch(1),rebuild_state(0),_apply_event(1),_handle_init_canvas(1),_handle_draw_shape(1),_handle_set_color(1),_handle_select_tool(1),_handle_clear_canvas(1) # Dispatches commands to handlers, validates, and emits events
src/vql/drawing/crescent_generator.py:
e: CrescentGenerator
CrescentGenerator: generate(3)
src/vql/drawing/cross_generator.py:
e: CrossGenerator
CrossGenerator: generate(3)
src/vql/drawing/diamond_generator.py:
e: DiamondGenerator
DiamondGenerator: generate(3)
src/vql/drawing/dot_generator.py:
e: DotGenerator
DotGenerator: generate(3)
src/vql/drawing/ellipse_generator.py:
e: EllipseGenerator
EllipseGenerator: generate(3)
src/vql/drawing/event_store.py:
e: EventStore
EventStore: init(0),events(0),count(0),append(1),subscribe(1),unsubscribe(1),replay(1),events_since(1),events_of_type(1),clear(0),to_dict(0),save(1),load(2),len(0),repr(0) # Append-only event store with optional persistence and subscr
src/vql/drawing/events.py:
e: EventType,DrawingEvent,CanvasInitialized,CanvasCleared,ShapeDrawn,ColorChanged,ToolSelected
EventType:
DrawingEvent: to_dict(0),from_dict(2) # Base immutable event — all drawing events inherit from this.
CanvasInitialized: post_init(0) # Fired when a canvas is created or discovered.
CanvasCleared: post_init(0) # Fired when the canvas is cleared.
ShapeDrawn: post_init(0) # Fired when a shape is drawn on the canvas.
ColorChanged: post_init(0) # Fired when the active drawing color is changed.
ToolSelected: post_init(0) # Fired when a drawing tool is selected.
src/vql/drawing/fish_generator.py:
e: FishGenerator
FishGenerator: generate(3)
src/vql/drawing/flower_generator.py:
e: FlowerGenerator
FlowerGenerator: generate(3)
src/vql/drawing/grid_generator.py:
e: GridGenerator
GridGenerator: generate(3)
src/vql/drawing/heart_generator.py:
e: HeartGenerator
HeartGenerator: generate(3)
src/vql/drawing/hexagon_generator.py:
e: HexagonGenerator
HexagonGenerator: generate(3)
src/vql/drawing/house_generator.py:
e: HouseGenerator
HouseGenerator: generate(3)
src/vql/drawing/line_generator.py:
e: LineGenerator
LineGenerator: generate(3)
src/vql/drawing/mountain_generator.py:
e: MountainGenerator
MountainGenerator: generate(3)
src/vql/drawing/nl_parser.py:
e: NLDrawingParser
NLDrawingParser: init(1),parse(3),to_vql(5),detect_shape(1),detect_color(2),_extract_shapes(1),_extract_size_params(1),_extract_shape_specific_params(2) # Parse natural language drawing instructions into DrawCommand
src/vql/drawing/octagon_generator.py:
e: OctagonGenerator
OctagonGenerator: generate(3)
src/vql/drawing/path_generator.py:
e: PathGenerator
PathGenerator: generate(3)
src/vql/drawing/pentagon_generator.py:
e: PentagonGenerator
PentagonGenerator: generate(3)
src/vql/drawing/rectangle_generator.py:
e: RectangleGenerator
RectangleGenerator: generate(3)
src/vql/drawing/renderers/init.py:
src/vql/drawing/renderers/base.py:
e: Renderer
Renderer: init_canvas(4),set_color(1),draw_path(3),draw_shape(1),clear(0),screenshot(1),render_events(1),dispose(0) # Abstract renderer interface.
src/vql/drawing/renderers/playwright.py:
e: PlaywrightRenderer
PlaywrightRenderer: init(2),init_canvas(4),set_color(1),draw_path(3),draw_shape(1),clear(0),screenshot(1),dispose(0) # Render drawings on a browser canvas via Playwright mouse con
src/vql/drawing/renderers/svg.py:
e: SVGRenderer
SVGRenderer: init(0),init_canvas(4),set_color(1),draw_path(3),draw_shape(1),clear(0),screenshot(1),to_svg(0) # Render drawings as SVG markup.
src/vql/drawing/rocket_generator.py:
e: RocketGenerator
RocketGenerator: generate(3)
src/vql/drawing/shape_generator.py:
e: ShapeGenerator
ShapeGenerator: generate(3) # Abstract shape generator — one responsibility: produce point
src/vql/drawing/shape_registry.py:
e: ShapeRegistry
ShapeRegistry: register(2),get(2),available(1),_init_defaults(1) # Registry of all available shape generators.
src/vql/drawing/shapes.py:
src/vql/drawing/spiral_generator.py:
e: SpiralGenerator
SpiralGenerator: generate(3)
src/vql/drawing/square_generator.py:
e: SquareGenerator
SquareGenerator: generate(3)
src/vql/drawing/star_generator.py:
e: StarGenerator
StarGenerator: generate(3)
src/vql/drawing/sun_generator.py:
e: SunGenerator
SunGenerator: generate(3)
src/vql/drawing/svg_path_parser.py:
e: _dispatch_command,_tokenize_path,_scale_groups,parse_svg_path,_PathState
_PathState: next_num(0),close_subpath(0),start_subpath(2),line_to(2),append_cubic(6),append_quadratic(4)
_dispatch_command(state;cmd)
_tokenize_path(d)
_scale_groups(groups)
parse_svg_path(d;scale;center)
src/vql/drawing/tree_generator.py:
e: TreeGenerator
TreeGenerator: generate(3)
src/vql/drawing/triangle_generator.py:
e: TriangleGenerator
TriangleGenerator: generate(3)
src/vql/drawing/wave_generator.py:
e: WaveGenerator
WaveGenerator: generate(3)
src/vql/facade.py:
e: VQLResult,VQLFacade
VQLResult: # Bundle returned by :meth:VQLFacade.run.
VQLFacade: compile(1),validate(1),render_svg(1),render_png(2),to_commands(1),to_events(1),run(1) # Stateless high-level entry point for the VQL pipeline.
src/vql/library/init.py:
src/vql/renderers/init.py:
e: getattr
getattr(name)
src/vql/renderers/base.py:
e: render_program,VQLRenderer,VQLRendererAdapter
VQLRenderer: render(1) # Structural protocol for any backend able to render a VQL pro
VQLRendererAdapter: render(1) # Mixin granting an existing Renderer subclass a ``render(
render_program(renderer;program)
src/vql/renderers/playwright.py:
e: PlaywrightVQLRenderer
PlaywrightVQLRenderer: init(2) # Playwright renderer that can consume a :class:VQLProgram d
src/vql/renderers/svg.py:
e: render_to_svg,render_to_png,SVGVQLRenderer
SVGVQLRenderer: # SVG renderer that can consume a :class:VQLProgram directly
render_to_svg(program)
render_to_png(program;path)
src/vql/schema/init.py:
src/vql/schema/program.py:
e: RenderTarget,Style,Transform,Anchor,Constraint,Relation,Primitive,Object,Layer,Scene,ValidationSpec,VQLProgram
RenderTarget: # Supported render backends for a VQL program.
Style: validate(0),to_dict(0),from_dict(2) # Visual style for an object/primitive.
Transform: is_identity(0),to_dict(0),from_dict(2) # Affine transform applied to an object.
Anchor: to_dict(0),from_dict(2) # A named reference point on the canvas/object.
Constraint: to_dict(0),from_dict(2) # A declarative constraint on an object (placeholder for solve
Relation: to_dict(0),from_dict(2) # A relation between two objects (placeholder for layout engin
Primitive: validate(0),to_dict(0),from_dict(2) # A drawable primitive — the smallest unit of geometry.
Object: validate(0),to_dict(0),from_dict(2) # A logical drawing object — one or more primitives sharing a
Layer: validate(0),to_dict(0),from_dict(2) # An ordered group of objects.
Scene: validate(0),iter_objects(0),to_dict(0),from_dict(2) # The root container — canvas dimensions, background, and laye
ValidationSpec: to_dict(0),from_dict(2) # Declarative expectation describing what a correct render mus
VQLProgram: validate(0),is_valid(0),object_count(0),to_dict(0),from_dict(2) # Top-level VQL program — the contract between NL parsing and
src/vql/validation/init.py:
src/vql/validation/metadata.py:
e: _load_imgl_metadata_schema,validate_program_metadata
_load_imgl_metadata_schema()
validate_program_metadata(metadata)
src/vql/validation/spec.py:
e: _program_shapes,_program_colors,_match_items,validate_program,VQLValidationReport
VQLValidationReport: to_dict(0) # Outcome of validating a program against a spec.
_program_shapes(program)
_program_colors(program)
_match_items(expected;present;label)
validate_program(program;spec)
tests/test_adopt_window_capture.py:
e: test_image_is_blank_detects_black,test_image_is_blank_accepts_colored,test_image_stats_reports_blank
test_image_is_blank_detects_black(tmp_path)
test_image_is_blank_accepts_colored(tmp_path)
test_image_stats_reports_blank(tmp_path)
tests/test_metadata_validation.py:
e: test_empty_metadata_valid,test_valid_imgl_metadata,test_invalid_capture_type,test_invalid_window_os
test_empty_metadata_valid()
test_valid_imgl_metadata()
test_invalid_capture_type()
test_invalid_window_os(meta)
tests/test_photo_roundtrip.py:
e: _flat_shapes_image,test_nl_drawing_roundtrip,test_img2svg_sets_scene_background,test_img2svg_vql_render_roundtrip,test_vtracer_roundtrip_when_installed,test_metadata_only_program_renders_background_only,test_trace_contours_graceful_without_opencv
_flat_shapes_image(path)
test_nl_drawing_roundtrip(tmp_path)
test_img2svg_sets_scene_background(tmp_path)
test_img2svg_vql_render_roundtrip(tmp_path)
test_vtracer_roundtrip_when_installed(tmp_path)
test_metadata_only_program_renders_background_only(tmp_path)
test_trace_contours_graceful_without_opencv(tmp_path)
tests/test_screenshot_merge.py:
e: test_screenshot_merge_reduces_object_count
test_screenshot_merge_reduces_object_count(tmp_path)
tests/test_vql.py:
e: test_empty_program_is_structurally_valid,test_invalid_scene_dimensions_fail,test_program_roundtrip_to_dict,test_commands_program_roundtrip_preserves_shapes_and_colors,test_program_to_commands_starts_with_init_canvas,test_commands_to_program_is_inverse_of_program_to_commands,test_compile_to_events_produces_shape_drawn,test_render_to_svg_returns_markup,test_render_to_png_without_cairosvg_raises_clear_error,test_validate_program_passes_with_matching_spec,test_validate_program_reports_missing_shape,test_facade_run_full_pipeline,test_facade_run_without_render_skips_svg,test_nl_parser_to_vql_returns_program,test_nl_parser_parse_still_returns_commands,test_vql_library_exposes_primitives,test_playwright_vql_renderer_render_delegates_to_events,test_playwright_vql_renderer_is_renderer_subclass
test_empty_program_is_structurally_valid()
test_invalid_scene_dimensions_fail()
test_program_roundtrip_to_dict()
test_commands_program_roundtrip_preserves_shapes_and_colors()
test_program_to_commands_starts_with_init_canvas()
test_commands_to_program_is_inverse_of_program_to_commands()
test_compile_to_events_produces_shape_drawn()
test_render_to_svg_returns_markup()
test_render_to_png_without_cairosvg_raises_clear_error(tmp_path)
test_validate_program_passes_with_matching_spec()
test_validate_program_reports_missing_shape()
test_facade_run_full_pipeline()
test_facade_run_without_render_skips_svg()
test_nl_parser_to_vql_returns_program()
test_nl_parser_parse_still_returns_commands()
test_vql_library_exposes_primitives()
test_playwright_vql_renderer_render_delegates_to_events()
test_playwright_vql_renderer_is_renderer_subclass()
### `project/logic.pl`
```prolog markpact:analysis path=project/logic.pl
% ── Project Metadata ─────────────────────────────────────
project_metadata('vql', '0.1.4', 'python').
% ── Project Files ────────────────────────────────────────
project_file('app.doql.less', 148, 'less').
project_file('examples/full-pipeline.sh', 81, 'shell').
project_file('examples/generate-demo-screen.py', 77, 'python').
project_file('examples/img2nl-vql-flow.sh', 215, 'shell').
project_file('examples/live-capture-test.sh', 95, 'shell').
project_file('examples/photo-roundtrip-test.py', 407, 'python').
project_file('examples/scope-window.py', 54, 'python').
project_file('install-dev.sh', 38, 'shell').
project_file('packages/cli2vql/src/cli2vql/__init__.py', 2, 'python').
project_file('packages/cli2vql/src/cli2vql/cli.py', 69, 'python').
project_file('packages/dsl2img2svg/src/dsl2img2svg/__init__.py', 6, 'python').
project_file('packages/dsl2img2svg/src/dsl2img2svg/cli.py', 22, 'python').
project_file('packages/dsl2img2svg/src/dsl2img2svg/dispatch.py', 116, 'python').
project_file('packages/dsl2img2svg/tests/test_dispatch.py', 32, 'python').
project_file('packages/dsl2vql/scripts/generate-proto.sh', 8, 'shell').
project_file('packages/dsl2vql/src/dsl2vql/__init__.py', 7, 'python').
project_file('packages/dsl2vql/src/dsl2vql/bus.py', 78, 'python').
project_file('packages/dsl2vql/src/dsl2vql/cli.py', 98, 'python').
project_file('packages/dsl2vql/src/dsl2vql/codec.py', 36, 'python').
project_file('packages/dsl2vql/src/dsl2vql/engine.py', 9, 'python').
project_file('packages/dsl2vql/src/dsl2vql/events.py', 109, 'python').
project_file('packages/dsl2vql/src/dsl2vql/grammar.py', 97, 'python').
project_file('packages/dsl2vql/src/dsl2vql/handlers/__init__.py', 6, 'python').
project_file('packages/dsl2vql/src/dsl2vql/handlers/command.py', 131, 'python').
project_file('packages/dsl2vql/src/dsl2vql/handlers/query.py', 110, 'python').
project_file('packages/dsl2vql/src/dsl2vql/pb_codec.py', 158, 'python').
project_file('packages/dsl2vql/src/dsl2vql/result.py', 29, 'python').
project_file('packages/dsl2vql/src/dsl2vql/schema_registry.py', 47, 'python').
project_file('packages/dsl2vql/src/dsl2vql/v1/__init__.py', 6, 'python').
project_file('packages/dsl2vql/src/dsl2vql/v1/command_pb2.py', 53, 'python').
project_file('packages/dsl2vql/src/dsl2vql/v1/result_pb2.py', 40, 'python').
project_file('packages/dsl2vql/tests/test_parity.py', 29, 'python').
project_file('packages/img2svg/src/img2svg/__init__.py', 14, 'python').
project_file('packages/img2svg/src/img2svg/cli.py', 72, 'python').
project_file('packages/img2svg/src/img2svg/svg_emit.py', 135, 'python').
project_file('packages/img2svg/src/img2svg/to_vql.py', 142, 'python').
project_file('packages/img2svg/src/img2svg/trace.py', 264, 'python').
project_file('packages/img2svg/tests/test_img2svg.py', 101, 'python').
project_file('packages/img2vql/src/img2vql/__init__.py', 27, 'python').
project_file('packages/img2vql/src/img2vql/adopt.py', 64, 'python').
project_file('packages/img2vql/src/img2vql/cli.py', 88, 'python').
project_file('packages/img2vql/src/img2vql/describe_ui.py', 122, 'python').
project_file('packages/img2vql/src/img2vql/detect.py', 380, 'python').
project_file('packages/img2vql/src/img2vql/diagnose.py', 126, 'python').
project_file('packages/img2vql/src/img2vql/fingerprint.py', 105, 'python').
project_file('packages/img2vql/src/img2vql/metadata.py', 340, 'python').
project_file('packages/img2vql/src/img2vql/program.py', 142, 'python').
project_file('packages/img2vql/tests/test_auto_ocr.py', 45, 'python').
project_file('packages/img2vql/tests/test_detect.py', 75, 'python').
project_file('packages/img2vql/tests/test_diagnose.py', 31, 'python').
project_file('packages/img2vql/tests/test_fingerprint.py', 93, 'python').
project_file('packages/img2vql/tests/test_metadata_imgl.py', 49, 'python').
project_file('packages/mcp2vql/src/mcp2vql/__init__.py', 6, 'python').
project_file('packages/mcp2vql/src/mcp2vql/cli.py', 9, 'python').
project_file('packages/mcp2vql/src/mcp2vql/server.py', 136, 'python').
project_file('packages/nlp2vql/src/nlp2vql/__init__.py', 7, 'python').
project_file('packages/nlp2vql/src/nlp2vql/apply.py', 49, 'python').
project_file('packages/nlp2vql/src/nlp2vql/cli.py', 54, 'python').
project_file('packages/nlp2vql/src/nlp2vql/to_dsl.py', 43, 'python').
project_file('packages/rest2vql/src/rest2vql/__init__.py', 6, 'python').
project_file('packages/rest2vql/src/rest2vql/app.py', 73, 'python').
project_file('packages/rest2vql/src/rest2vql/cli.py', 25, 'python').
project_file('packages/rest2vql/src/rest2vql/window.py', 125, 'python').
project_file('packages/rest2vql/src/rest2vql/window_routes.py', 111, 'python').
project_file('packages/rest2vql/tests/test_window_api.py', 121, 'python').
project_file('packages/uri2img2svg/src/uri2img2svg/__init__.py', 7, 'python').
project_file('packages/uri2img2svg/src/uri2img2svg/cli.py', 29, 'python').
project_file('packages/uri2img2svg/src/uri2img2svg/query.py', 145, 'python').
project_file('packages/uri2img2svg/src/uri2img2svg/uri.py', 60, 'python').
project_file('packages/uri2img2svg/tests/test_uri2img2svg.py', 42, 'python').
project_file('packages/uri2vql/src/uri2vql/__init__.py', 46, 'python').
project_file('packages/uri2vql/src/uri2vql/cli.py', 353, 'python').
project_file('packages/uri2vql/src/uri2vql/compile.py', 37, 'python').
project_file('packages/uri2vql/src/uri2vql/nlp2uri.py', 330, 'python').
project_file('packages/uri2vql/src/uri2vql/patch.py', 41, 'python').
project_file('packages/uri2vql/src/uri2vql/query.py', 96, 'python').
project_file('packages/uri2vql/src/uri2vql/run.py', 65, 'python').
project_file('packages/uri2vql/src/uri2vql/uri.py', 184, 'python').
project_file('packages/uri2vql/src/uri2vql/window.py', 654, 'python').
project_file('packages/uri2vql/tests/test_nlp2uri_window.py', 31, 'python').
project_file('packages/uri2vql/tests/test_window_refresh.py', 79, 'python').
project_file('project.sh', 59, 'shell').
project_file('scripts/test-goal.sh', 7, 'shell').
project_file('src/vql/__init__.py', 57, 'python').
project_file('src/vql/adopt/__init__.py', 20, 'python').
project_file('src/vql/adopt/portal_capture.py', 110, 'python').
project_file('src/vql/adopt/window.py', 805, 'python').
project_file('src/vql/api.py', 56, 'python').
project_file('src/vql/compiler/__init__.py', 16, 'python').
project_file('src/vql/compiler/legacy_drawcommand.py', 143, 'python').
project_file('src/vql/compiler/nl_to_vql.py', 70, 'python').
project_file('src/vql/drawing/__init__.py', 17, 'python').
project_file('src/vql/drawing/arrow_generator.py', 47, 'python').
project_file('src/vql/drawing/bird_generator.py', 50, 'python').
project_file('src/vql/drawing/boat_generator.py', 41, 'python').
project_file('src/vql/drawing/butterfly_generator.py', 51, 'python').
project_file('src/vql/drawing/car_generator.py', 49, 'python').
project_file('src/vql/drawing/castle_generator.py', 64, 'python').
project_file('src/vql/drawing/cat_generator.py', 56, 'python').
project_file('src/vql/drawing/circle_generator.py', 30, 'python').
project_file('src/vql/drawing/cloud_detailed_generator.py', 48, 'python').
project_file('src/vql/drawing/colors.py', 136, 'python').
project_file('src/vql/drawing/commands.py', 272, 'python').
project_file('src/vql/drawing/crescent_generator.py', 37, 'python').
project_file('src/vql/drawing/cross_generator.py', 34, 'python').
project_file('src/vql/drawing/diamond_generator.py', 37, 'python').
project_file('src/vql/drawing/dot_generator.py', 30, 'python').
project_file('src/vql/drawing/ellipse_generator.py', 31, 'python').
project_file('src/vql/drawing/event_store.py', 102, 'python').
project_file('src/vql/drawing/events.py', 143, 'python').
project_file('src/vql/drawing/fish_generator.py', 47, 'python').
project_file('src/vql/drawing/flower_generator.py', 36, 'python').
project_file('src/vql/drawing/grid_generator.py', 37, 'python').
project_file('src/vql/drawing/heart_generator.py', 31, 'python').
project_file('src/vql/drawing/hexagon_generator.py', 28, 'python').
project_file('src/vql/drawing/house_generator.py', 31, 'python').
project_file('src/vql/drawing/line_generator.py', 26, 'python').
project_file('src/vql/drawing/mountain_generator.py', 40, 'python').
project_file('src/vql/drawing/nl_parser.py', 226, 'python').
project_file('src/vql/drawing/octagon_generator.py', 28, 'python').
project_file('src/vql/drawing/path_generator.py', 26, 'python').
project_file('src/vql/drawing/pentagon_generator.py', 28, 'python').
project_file('src/vql/drawing/rectangle_generator.py', 27, 'python').
project_file('src/vql/drawing/renderers/__init__.py', 10, 'python').
project_file('src/vql/drawing/renderers/base.py', 85, 'python').
project_file('src/vql/drawing/renderers/playwright.py', 216, 'python').
project_file('src/vql/drawing/renderers/svg.py', 94, 'python').
project_file('src/vql/drawing/rocket_generator.py', 53, 'python').
project_file('src/vql/drawing/shape_generator.py', 38, 'python').
project_file('src/vql/drawing/shape_registry.py', 104, 'python').
project_file('src/vql/drawing/shapes.py', 79, 'python').
project_file('src/vql/drawing/spiral_generator.py', 33, 'python').
project_file('src/vql/drawing/square_generator.py', 26, 'python').
project_file('src/vql/drawing/star_generator.py', 34, 'python').
project_file('src/vql/drawing/sun_generator.py', 37, 'python').
project_file('src/vql/drawing/svg_path_parser.py', 206, 'python').
project_file('src/vql/drawing/tree_generator.py', 34, 'python').
project_file('src/vql/drawing/triangle_generator.py', 27, 'python').
project_file('src/vql/drawing/wave_generator.py', 35, 'python').
project_file('src/vql/facade.py', 96, 'python').
project_file('src/vql/library/__init__.py', 15, 'python').
project_file('src/vql/renderers/__init__.py', 24, 'python').
project_file('src/vql/renderers/base.py', 66, 'python').
project_file('src/vql/renderers/playwright.py', 23, 'python').
project_file('src/vql/renderers/svg.py', 52, 'python').
project_file('src/vql/schema/__init__.py', 34, 'python').
project_file('src/vql/schema/program.py', 424, 'python').
project_file('src/vql/validation/__init__.py', 14, 'python').
project_file('src/vql/validation/metadata.py', 58, 'python').
project_file('src/vql/validation/spec.py', 92, 'python').
project_file('tests/test_adopt_window_capture.py', 37, 'python').
project_file('tests/test_metadata_validation.py', 41, 'python').
project_file('tests/test_photo_roundtrip.py', 116, 'python').
project_file('tests/test_screenshot_merge.py', 31, 'python').
project_file('tests/test_vql.py', 245, 'python').
project_file('tree.sh', 2, 'shell').
% ── Python Functions ─────────────────────────────────────
python_function('examples/generate-demo-screen.py', '_load_font', 1, 3, 2).
python_function('examples/generate-demo-screen.py', 'write_demo_screen', 1, 1, 9).
python_function('examples/generate-demo-screen.py', 'main', 0, 1, 6).
python_function('examples/photo-roundtrip-test.py', '_require_pil', 0, 2, 1).
python_function('examples/photo-roundtrip-test.py', 'sample_flat_shapes', 1, 1, 8).
python_function('examples/photo-roundtrip-test.py', 'sample_gradient', 1, 3, 12).
python_function('examples/photo-roundtrip-test.py', 'sample_product_photo', 1, 1, 7).
python_function('examples/photo-roundtrip-test.py', 'sample_natural_scene', 1, 4, 8).
python_function('examples/photo-roundtrip-test.py', 'sample_nl_drawing', 1, 2, 9).
python_function('examples/photo-roundtrip-test.py', 'test_img2svg_roundtrip', 2, 8, 21).
python_function('examples/photo-roundtrip-test.py', 'test_ui_grid_adopt', 1, 2, 12).
python_function('examples/photo-roundtrip-test.py', 'test_vtracer_roundtrip', 2, 10, 17).
python_function('examples/photo-roundtrip-test.py', 'test_opencv_contours', 2, 2, 9).
python_function('examples/photo-roundtrip-test.py', 'test_metadata_only_reconstruction', 1, 1, 9).
python_function('examples/photo-roundtrip-test.py', 'test_img2vql_detect', 1, 5, 4).
python_function('examples/photo-roundtrip-test.py', 'main', 0, 5, 24).
python_function('examples/scope-window.py', 'main', 0, 6, 7).
python_function('packages/cli2vql/src/cli2vql/cli.py', '_repl', 1, 6, 5).
python_function('packages/cli2vql/src/cli2vql/cli.py', 'main', 1, 14, 16).
python_function('packages/dsl2img2svg/src/dsl2img2svg/cli.py', 'main', 1, 4, 5).
python_function('packages/dsl2img2svg/src/dsl2img2svg/dispatch.py', '_parse_kv_args', 1, 4, 3).
python_function('packages/dsl2img2svg/src/dsl2img2svg/dispatch.py', 'dispatch', 1, 14, 16).
python_function('packages/dsl2img2svg/tests/test_dispatch.py', 'test_vectorize', 1, 3, 4).
python_function('packages/dsl2img2svg/tests/test_dispatch.py', 'test_query_uri', 1, 2, 3).
python_function('packages/dsl2vql/src/dsl2vql/bus.py', '_dispatch_cmd', 1, 5, 12).
python_function('packages/dsl2vql/src/dsl2vql/bus.py', '_bytes_to_cmd', 1, 3, 5).
python_function('packages/dsl2vql/src/dsl2vql/bus.py', 'dispatch', 1, 6, 11).
python_function('packages/dsl2vql/src/dsl2vql/bus.py', 'execute_dsl_line', 1, 1, 1).
python_function('packages/dsl2vql/src/dsl2vql/bus.py', 'execute_dsl', 1, 4, 5).
python_function('packages/dsl2vql/src/dsl2vql/cli.py', '_main_legacy', 1, 9, 14).
python_function('packages/dsl2vql/src/dsl2vql/cli.py', '_main_subcommand', 1, 9, 17).
python_function('packages/dsl2vql/src/dsl2vql/cli.py', 'main', 1, 4, 2).
python_function('packages/dsl2vql/src/dsl2vql/codec.py', 'encode_text', 1, 2, 2).
python_function('packages/dsl2vql/src/dsl2vql/codec.py', 'roundtrip_text', 1, 3, 5).
python_function('packages/dsl2vql/src/dsl2vql/codec.py', 'encode_protobuf', 1, 1, 1).
python_function('packages/dsl2vql/src/dsl2vql/codec.py', 'decode_protobuf', 1, 1, 1).
python_function('packages/dsl2vql/src/dsl2vql/events.py', 'default_event_store', 1, 1, 3).
python_function('packages/dsl2vql/src/dsl2vql/grammar.py', 'split_command', 1, 4, 3).
python_function('packages/dsl2vql/src/dsl2vql/grammar.py', 'pick_flag', 2, 3, 2).
python_function('packages/dsl2vql/src/dsl2vql/grammar.py', 'parse_line', 1, 28, 7).
python_function('packages/dsl2vql/src/dsl2vql/grammar.py', 'to_text', 1, 6, 6).
python_function('packages/dsl2vql/src/dsl2vql/handlers/command.py', '_read_json', 1, 1, 4).
python_function('packages/dsl2vql/src/dsl2vql/handlers/command.py', 'handle_generate', 1, 4, 10).
python_function('packages/dsl2vql/src/dsl2vql/handlers/command.py', 'handle_compile', 1, 4, 7).
python_function('packages/dsl2vql/src/dsl2vql/handlers/command.py', 'handle_patch', 1, 3, 8).
python_function('packages/dsl2vql/src/dsl2vql/handlers/command.py', 'handle_export', 1, 7, 11).
python_function('packages/dsl2vql/src/dsl2vql/handlers/command.py', 'handle_from_tokens', 2, 11, 14).
python_function('packages/dsl2vql/src/dsl2vql/handlers/query.py', '_load_program', 1, 1, 5).
python_function('packages/dsl2vql/src/dsl2vql/handlers/query.py', 'handle_query', 1, 4, 6).
python_function('packages/dsl2vql/src/dsl2vql/handlers/query.py', 'handle_validate', 1, 6, 10).
python_function('packages/dsl2vql/src/dsl2vql/handlers/query.py', 'handle_render', 1, 9, 11).
python_function('packages/dsl2vql/src/dsl2vql/handlers/query.py', 'handle_resolve', 1, 3, 4).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', '_set_body', 2, 12, 5).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', 'envelope_to_dict', 1, 31, 4).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', 'encode_protobuf', 1, 1, 6).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', 'decode_protobuf', 1, 1, 3).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', 'encode_text_to_protobuf', 1, 2, 3).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', 'decode_protobuf_to_text', 1, 1, 2).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', 'result_to_pb', 1, 4, 4).
python_function('packages/dsl2vql/src/dsl2vql/pb_codec.py', 'encode_result_protobuf', 1, 1, 2).
python_function('packages/dsl2vql/src/dsl2vql/schema_registry.py', '_load_schemas', 0, 3, 9).
python_function('packages/dsl2vql/src/dsl2vql/schema_registry.py', 'schema_for_verb', 1, 1, 3).
python_function('packages/dsl2vql/src/dsl2vql/schema_registry.py', 'all_schemas', 0, 1, 2).
python_function('packages/dsl2vql/src/dsl2vql/schema_registry.py', 'validate_command_dict', 1, 3, 7).
python_function('packages/dsl2vql/src/dsl2vql/schema_registry.py', 'validate_schema_registry', 0, 3, 4).
python_function('packages/dsl2vql/tests/test_parity.py', 'test_parity_text_vs_dict', 0, 3, 1).
python_function('packages/dsl2vql/tests/test_parity.py', 'test_validate_schema_registry', 0, 2, 1).
python_function('packages/dsl2vql/tests/test_parity.py', 'test_encode_decode_roundtrip', 0, 3, 3).
python_function('packages/img2svg/src/img2svg/cli.py', 'main', 1, 11, 13).
python_function('packages/img2svg/src/img2svg/svg_emit.py', 'regions_to_svg', 1, 4, 5).
python_function('packages/img2svg/src/img2svg/svg_emit.py', '_vtracer_paths_to_svg', 1, 6, 4).
python_function('packages/img2svg/src/img2svg/svg_emit.py', 'paths_to_svg', 1, 3, 4).
python_function('packages/img2svg/src/img2svg/svg_emit.py', 'image_to_svg', 1, 7, 15).
python_function('packages/img2svg/src/img2svg/to_vql.py', '_background_from_regions', 1, 3, 3).
python_function('packages/img2svg/src/img2svg/to_vql.py', 'trace_to_vql_program', 1, 15, 20).
python_function('packages/img2svg/src/img2svg/to_vql.py', 'image_to_vql', 1, 5, 14).
python_function('packages/img2svg/src/img2svg/trace.py', '_hex_color', 1, 1, 0).
python_function('packages/img2svg/src/img2svg/trace.py', '_merge_grid_cells', 1, 15, 4).
python_function('packages/img2svg/src/img2svg/trace.py', 'trace_image_regions', 1, 6, 14).
python_function('packages/img2svg/src/img2svg/trace.py', 'trace_contours_opencv', 1, 8, 17).
python_function('packages/img2svg/src/img2svg/trace.py', '_parse_translate', 1, 3, 3).
python_function('packages/img2svg/src/img2svg/trace.py', '_parse_vtracer_svg', 1, 5, 9).
python_function('packages/img2svg/src/img2svg/trace.py', 'trace_vtracer', 1, 6, 11).
python_function('packages/img2svg/tests/test_img2svg.py', 'test_trace_regions', 1, 3, 5).
python_function('packages/img2svg/tests/test_img2svg.py', 'test_image_to_svg', 1, 5, 5).
python_function('packages/img2svg/tests/test_img2svg.py', 'test_image_to_vql', 1, 4, 6).
python_function('packages/img2svg/tests/test_img2svg.py', 'test_trace_vtracer', 1, 5, 10).
python_function('packages/img2svg/tests/test_img2svg.py', 'test_image_to_vql_vtracer', 1, 3, 4).
python_function('packages/img2svg/tests/test_img2svg.py', 'test_image_to_vql_sets_background', 1, 2, 6).
python_function('packages/img2vql/src/img2vql/adopt.py', 'adopt_screenshot', 1, 2, 12).
python_function('packages/img2vql/src/img2vql/cli.py', 'main', 1, 10, 13).
python_function('packages/img2vql/src/img2vql/describe_ui.py', '_role_name', 2, 2, 2).
python_function('packages/img2vql/src/img2vql/describe_ui.py', '_loc_name', 2, 2, 2).
python_function('packages/img2vql/src/img2vql/describe_ui.py', 'describe_ui_layout', 1, 14, 11).
python_function('packages/img2vql/src/img2vql/detect.py', '_hex_color', 1, 1, 0).
python_function('packages/img2vql/src/img2vql/detect.py', '_location_label', 4, 9, 0).
python_function('packages/img2vql/src/img2vql/detect.py', '_avg_color', 5, 5, 6).
python_function('packages/img2vql/src/img2vql/detect.py', '_detect_titlebar', 3, 5, 10).
python_function('packages/img2vql/src/img2vql/detect.py', '_detect_panels', 3, 5, 10).
python_function('packages/img2vql/src/img2vql/detect.py', '_flood_rects', 1, 14, 7).
python_function('packages/img2vql/src/img2vql/detect.py', '_detect_buttons', 3, 25, 23).
python_function('packages/img2vql/src/img2vql/detect.py', '_detect_toolbar', 3, 10, 10).
python_function('packages/img2vql/src/img2vql/detect.py', '_iou', 2, 3, 2).
python_function('packages/img2vql/src/img2vql/detect.py', '_dedupe', 1, 8, 4).
python_function('packages/img2vql/src/img2vql/detect.py', 'detect_ui_elements', 1, 8, 16).
python_function('packages/img2vql/src/img2vql/diagnose.py', '_normalize_locale', 1, 4, 4).
python_function('packages/img2vql/src/img2vql/diagnose.py', 'diagnose_image', 1, 2, 3).
python_function('packages/img2vql/src/img2vql/diagnose.py', 'diagnose_for_vql', 1, 10, 13).
python_function('packages/img2vql/src/img2vql/diagnose.py', '_recommendation', 1, 6, 1).
python_function('packages/img2vql/src/img2vql/fingerprint.py', 'fingerprint_for_image', 1, 4, 6).
python_function('packages/img2vql/src/img2vql/fingerprint.py', 'load_program_fingerprint', 1, 6, 7).
python_function('packages/img2vql/src/img2vql/fingerprint.py', '_json_safe', 1, 7, 6).
python_function('packages/img2vql/src/img2vql/fingerprint.py', 'compare_with_program', 2, 5, 5).
python_function('packages/img2vql/src/img2vql/metadata.py', '_json_safe', 1, 7, 6).
python_function('packages/img2vql/src/img2vql/metadata.py', '_compact_special_hits', 1, 1, 4).
python_function('packages/img2vql/src/img2vql/metadata.py', '_text_likely', 2, 4, 1).
python_function('packages/img2vql/src/img2vql/metadata.py', 'rapidocr_special_hits', 1, 10, 13).
python_function('packages/img2vql/src/img2vql/metadata.py', 'auto_ocr_special_hits', 2, 3, 6).
python_function('packages/img2vql/src/img2vql/metadata.py', 'imgl_ocr_special_hits', 1, 8, 9).
python_function('packages/img2vql/src/img2vql/metadata.py', '_merge_special_hits', 2, 2, 4).
python_function('packages/img2vql/src/img2vql/metadata.py', 'img2nl_metadata_slice', 1, 9, 9).
python_function('packages/img2vql/src/img2vql/metadata.py', 'merge_program_metadata', 2, 1, 8).
python_function('packages/img2vql/src/img2vql/metadata.py', 'refresh_program_metadata', 2, 4, 11).
python_function('packages/img2vql/src/img2vql/metadata.py', 'metadata_from_diagnose', 1, 6, 7).
python_function('packages/img2vql/src/img2vql/metadata.py', 'save_diagnose_to_program', 2, 4, 12).
python_function('packages/img2vql/src/img2vql/program.py', '_role_style', 1, 1, 2).
python_function('packages/img2vql/src/img2vql/program.py', 'elements_to_vql_program', 1, 11, 19).
python_function('packages/img2vql/src/img2vql/program.py', '_bbox_contains', 2, 4, 0).
python_function('packages/img2vql/src/img2vql/program.py', '_build_contains_relations', 1, 8, 4).
python_function('packages/img2vql/tests/test_auto_ocr.py', 'test_text_likely_when_edges_suggest_text', 0, 2, 1).
python_function('packages/img2vql/tests/test_auto_ocr.py', 'test_text_likely_false_when_has_text', 0, 2, 1).
python_function('packages/img2vql/tests/test_auto_ocr.py', 'test_auto_ocr_uses_rapidocr_when_available', 1, 3, 5).
python_function('packages/img2vql/tests/test_detect.py', '_make_ui_fixture', 1, 1, 4).
python_function('packages/img2vql/tests/test_detect.py', 'test_detect_finds_titlebar_and_buttons', 1, 6, 2).
python_function('packages/img2vql/tests/test_detect.py', 'test_describe_ui_polish', 1, 3, 4).
python_function('packages/img2vql/tests/test_detect.py', 'test_adopt_writes_contains_relations', 1, 4, 3).
python_function('packages/img2vql/tests/test_detect.py', 'test_adopt_writes_vql_program', 1, 7, 4).
python_function('packages/img2vql/tests/test_diagnose.py', 'test_diagnose_blank_vs_rich', 1, 4, 5).
python_function('packages/img2vql/tests/test_fingerprint.py', '_solid', 3, 1, 2).
python_function('packages/img2vql/tests/test_fingerprint.py', 'test_screenshot_to_program_stores_fingerprint', 1, 3, 4).
python_function('packages/img2vql/tests/test_fingerprint.py', 'test_diagnose_uses_program_fingerprint', 1, 4, 8).
python_function('packages/img2vql/tests/test_fingerprint.py', 'test_analyze_skips_adopt_when_unchanged', 1, 7, 4).
python_function('packages/img2vql/tests/test_fingerprint.py', 'test_screenshot_stores_special_hits_metadata', 1, 3, 3).
python_function('packages/img2vql/tests/test_fingerprint.py', 'test_compare_with_program', 1, 5, 7).
python_function('packages/img2vql/tests/test_metadata_imgl.py', '_text_image', 2, 1, 4).
python_function('packages/img2vql/tests/test_metadata_imgl.py', 'test_imgl_ocr_special_hits_finds_text', 1, 3, 3).
python_function('packages/img2vql/tests/test_metadata_imgl.py', 'test_merge_program_metadata_uses_imgl_when_img2nl_misses', 1, 3, 3).
python_function('packages/img2vql/tests/test_metadata_imgl.py', 'test_refresh_program_metadata_persists_imgl_ocr', 1, 3, 5).
python_function('packages/mcp2vql/src/mcp2vql/server.py', '_require_fastmcp', 0, 2, 1).
python_function('packages/mcp2vql/src/mcp2vql/server.py', 'main', 0, 1, 2).
python_function('packages/nlp2vql/src/nlp2vql/apply.py', 'apply_nl', 1, 2, 3).
python_function('packages/nlp2vql/src/nlp2vql/cli.py', 'main', 1, 11, 11).
python_function('packages/nlp2vql/src/nlp2vql/to_dsl.py', '_intent', 1, 11, 2).
python_function('packages/nlp2vql/src/nlp2vql/to_dsl.py', 'nl_to_dsl_line', 1, 8, 1).
python_function('packages/nlp2vql/src/nlp2vql/to_dsl.py', 'to_dsl', 1, 1, 1).
python_function('packages/rest2vql/src/rest2vql/app.py', 'create_app', 0, 1, 25).
python_function('packages/rest2vql/src/rest2vql/cli.py', 'main', 1, 1, 5).
python_function('packages/rest2vql/src/rest2vql/window.py', 'window_detect', 1, 2, 3).
python_function('packages/rest2vql/src/rest2vql/window.py', 'window_compare', 1, 1, 1).
python_function('packages/rest2vql/src/rest2vql/window.py', 'window_refresh', 1, 1, 1).
python_function('packages/rest2vql/src/rest2vql/window.py', 'window_diagnose', 1, 2, 1).
python_function('packages/rest2vql/src/rest2vql/window.py', 'window_analyze', 1, 1, 1).
python_function('packages/rest2vql/src/rest2vql/window.py', 'window_adopt', 1, 1, 1).
python_function('packages/rest2vql/src/rest2vql/window.py', 'window_summary', 0, 7, 1).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', '_window_response', 1, 2, 2).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', 'post_window_detect', 1, 2, 5).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', 'post_window_compare', 1, 2, 5).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', 'post_window_refresh', 1, 2, 5).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', 'post_window_diagnose', 1, 2, 5).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', 'post_window_analyze', 1, 2, 5).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', 'post_window_adopt', 1, 2, 5).
python_function('packages/rest2vql/src/rest2vql/window_routes.py', 'post_window_summary', 1, 2, 5).
python_function('packages/rest2vql/tests/test_window_api.py', 'client', 0, 1, 2).
python_function('packages/rest2vql/tests/test_window_api.py', '_solid_image', 2, 1, 2).
python_function('packages/rest2vql/tests/test_window_api.py', '_program_with_fingerprint', 2, 1, 2).
python_function('packages/rest2vql/tests/test_window_api.py', 'test_health', 1, 3, 2).
python_function('packages/rest2vql/tests/test_window_api.py', 'test_window_detect_missing_dep', 2, 5, 5).
python_function('packages/rest2vql/tests/test_window_api.py', 'test_window_compare', 2, 5, 8).
python_function('packages/rest2vql/tests/test_window_api.py', 'test_window_refresh', 2, 5, 8).
python_function('packages/rest2vql/tests/test_window_api.py', 'test_window_diagnose', 2, 4, 8).
python_function('packages/uri2img2svg/src/uri2img2svg/cli.py', 'main', 1, 4, 9).
python_function('packages/uri2img2svg/src/uri2img2svg/query.py', 'query_uri', 1, 13, 12).
python_function('packages/uri2img2svg/src/uri2img2svg/uri.py', 'is_img2svg_uri', 1, 1, 2).
python_function('packages/uri2img2svg/src/uri2img2svg/uri.py', 'uri_for_vectorize', 1, 2, 2).
python_function('packages/uri2img2svg/src/uri2img2svg/uri.py', 'parse_img2svg_uri', 1, 9, 7).
python_function('packages/uri2img2svg/tests/test_uri2img2svg.py', 'test_parse_uri', 0, 4, 1).
python_function('packages/uri2img2svg/tests/test_uri2img2svg.py', 'test_vectorize', 1, 3, 6).
python_function('packages/uri2img2svg/tests/test_uri2img2svg.py', 'test_svg_uri', 1, 3, 4).
python_function('packages/uri2vql/src/uri2vql/cli.py', 'main', 1, 53, 29).
python_function('packages/uri2vql/src/uri2vql/compile.py', '_dsl_from_uri', 1, 4, 5).
python_function('packages/uri2vql/src/uri2vql/compile.py', 'compile_vql_uri', 2, 7, 6).
python_function('packages/uri2vql/src/uri2vql/nlp2uri.py', 'resolve_prompt_to_vql_uri', 1, 54, 23).
python_function('packages/uri2vql/src/uri2vql/nlp2uri.py', '_extract_click_target', 1, 3, 2).
python_function('packages/uri2vql/src/uri2vql/nlp2uri.py', '_extract_type_parts', 1, 5, 2).
python_function('packages/uri2vql/src/uri2vql/nlp2uri.py', 'nlp2uri', 1, 1, 1).
python_function('packages/uri2vql/src/uri2vql/nlp2uri.py', 'best_uri', 1, 2, 1).
python_function('packages/uri2vql/src/uri2vql/patch.py', 'patch_uri', 1, 7, 12).
python_function('packages/uri2vql/src/uri2vql/query.py', '_load_program', 1, 1, 5).
python_function('packages/uri2vql/src/uri2vql/query.py', 'query_uri', 1, 15, 15).
python_function('packages/uri2vql/src/uri2vql/run.py', 'run_uri', 1, 7, 6).
python_function('packages/uri2vql/src/uri2vql/run.py', 'run_uri_json', 1, 1, 3).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'is_vql_uri', 1, 1, 2).
python_function('packages/uri2vql/src/uri2vql/uri.py', '_with_file', 1, 4, 4).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_program', 1, 1, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_scene', 1, 1, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_objects', 1, 1, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_object', 1, 1, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_window_analyze', 0, 2, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_window_summary', 1, 1, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_window_imgl', 0, 3, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_imgl_list', 0, 1, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_imgl_click', 0, 6, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_imgl_type', 0, 6, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_window_diagnose', 0, 2, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_window_compare', 0, 3, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'uri_for_window_refresh', 0, 2, 1).
python_function('packages/uri2vql/src/uri2vql/uri.py', 'parse_vql_uri', 1, 5, 6).
python_function('packages/uri2vql/src/uri2vql/window.py', '_resolve_image_param', 1, 6, 8).
python_function('packages/uri2vql/src/uri2vql/window.py', '_normalize_locale', 1, 4, 4).
python_function('packages/uri2vql/src/uri2vql/window.py', '_diagnose_fallback', 1, 15, 13).
python_function('packages/uri2vql/src/uri2vql/window.py', '_resolve_window_image', 2, 8, 6).
python_function('packages/uri2vql/src/uri2vql/window.py', 'refresh_window_metadata', 1, 2, 2).
python_function('packages/uri2vql/src/uri2vql/window.py', 'compare_window_image', 1, 2, 2).
python_function('packages/uri2vql/src/uri2vql/window.py', 'diagnose_window_image', 1, 2, 3).
python_function('packages/uri2vql/src/uri2vql/window.py', '_query_window_imgl', 0, 17, 20).
python_function('packages/uri2vql/src/uri2vql/window.py', 'analyze_window_uri', 1, 4, 6).
python_function('packages/uri2vql/src/uri2vql/window.py', 'query_window', 1, 69, 29).
python_function('packages/uri2vql/tests/test_nlp2uri_window.py', 'test_nlp_refresh_window', 0, 4, 1).
python_function('packages/uri2vql/tests/test_nlp2uri_window.py', 'test_nlp_compare_window', 0, 3, 1).
python_function('packages/uri2vql/tests/test_nlp2uri_window.py', 'test_nlp_diagnose_window', 0, 3, 2).
python_function('packages/uri2vql/tests/test_nlp2uri_window.py', 'test_nlp_unchanged_suggests_compare', 0, 3, 1).
python_function('packages/uri2vql/tests/test_window_refresh.py', '_solid', 3, 1, 2).
python_function('packages/uri2vql/tests/test_window_refresh.py', 'test_diagnose_save_to_program', 1, 6, 10).
python_function('packages/uri2vql/tests/test_window_refresh.py', 'test_save_diagnose_to_program_helper', 1, 4, 6).
python_function('packages/uri2vql/tests/test_window_refresh.py', 'test_window_refresh_uri', 1, 4, 7).
python_function('src/vql/adopt/portal_capture.py', 'capture_via_portal', 1, 4, 23).
python_function('src/vql/adopt/portal_capture.py', 'main', 1, 2, 7).
python_function('src/vql/adopt/window.py', '_require_pillow', 0, 2, 1).
python_function('src/vql/adopt/window.py', '_session_type', 0, 2, 3).
python_function('src/vql/adopt/window.py', '_is_wayland', 0, 2, 3).
python_function('src/vql/adopt/window.py', '_capture_interactive_mode', 0, 2, 3).
python_function('src/vql/adopt/window.py', '_should_use_interactive_portal', 0, 4, 2).
python_function('src/vql/adopt/window.py', '_portal_python', 0, 7, 5).
python_function('src/vql/adopt/window.py', 'image_stats', 1, 4, 20).
python_function('src/vql/adopt/window.py', '_image_is_blank', 1, 8, 11).
python_function('src/vql/adopt/window.py', '_finalize_capture', 1, 1, 4).
python_function('src/vql/adopt/window.py', '_run_capture', 1, 7, 7).
python_function('src/vql/adopt/window.py', '_capture_with_gnome_shell', 1, 2, 4).
python_function('src/vql/adopt/window.py', '_capture_with_grim', 1, 2, 4).
python_function('src/vql/adopt/window.py', '_capture_with_gnome_screenshot', 1, 2, 4).
python_function('src/vql/adopt/window.py', '_capture_with_portal', 1, 15, 15).
python_function('src/vql/adopt/window.py', '_capture_with_scrot', 1, 2, 4).
python_function('src/vql/adopt/window.py', '_capture_with_mss', 1, 4, 6).
python_function('src/vql/adopt/window.py', '_capture_backends', 0, 7, 6).
python_function('src/vql/adopt/window.py', 'capture_diagnose', 1, 33, 25).
python_function('src/vql/adopt/window.py', '_capture_permission_hint', 0, 2, 1).
python_function('src/vql/adopt/window.py', '_active_window_title', 0, 4, 3).
python_function('src/vql/adopt/window.py', 'capture_screen', 1, 7, 14).
python_function('src/vql/adopt/window.py', '_hex_color', 1, 1, 0).
python_function('src/vql/adopt/window.py', '_optional_fingerprint', 1, 3, 3).
python_function('src/vql/adopt/window.py', '_enrich_program_metadata', 2, 2, 5).
python_function('src/vql/adopt/window.py', '_merge_grid_colors', 1, 15, 2).
python_function('src/vql/adopt/window.py', 'screenshot_to_program', 1, 12, 28).
python_function('src/vql/adopt/window.py', 'analyze_screenshot', 1, 13, 20).
python_function('src/vql/compiler/legacy_drawcommand.py', 'program_to_commands', 1, 4, 6).
python_function('src/vql/compiler/legacy_drawcommand.py', 'commands_to_program', 1, 9, 10).
python_function('src/vql/compiler/legacy_drawcommand.py', 'compile_to_events', 1, 3, 6).
python_function('src/vql/compiler/nl_to_vql.py', 'nl_to_program', 1, 6, 7).
python_function('src/vql/drawing/svg_path_parser.py', '_dispatch_command', 2, 16, 7).
python_function('src/vql/drawing/svg_path_parser.py', '_tokenize_path', 1, 1, 1).
python_function('src/vql/drawing/svg_path_parser.py', '_scale_groups', 1, 15, 3).
python_function('src/vql/drawing/svg_path_parser.py', 'parse_svg_path', 3, 7, 7).
python_function('src/vql/renderers/__init__.py', '__getattr__', 1, 2, 1).
python_function('src/vql/renderers/base.py', 'render_program', 2, 1, 3).
python_function('src/vql/renderers/svg.py', 'render_to_svg', 1, 1, 4).
python_function('src/vql/renderers/svg.py', 'render_to_png', 2, 2, 7).
python_function('src/vql/validation/metadata.py', '_load_imgl_metadata_schema', 0, 1, 3).
python_function('src/vql/validation/metadata.py', 'validate_program_metadata', 1, 14, 8).
python_function('src/vql/validation/spec.py', '_program_shapes', 1, 3, 1).
python_function('src/vql/validation/spec.py', '_program_colors', 1, 2, 2).
python_function('src/vql/validation/spec.py', '_match_items', 3, 4, 2).
python_function('src/vql/validation/spec.py', 'validate_program', 2, 4, 9).
python_function('tests/test_adopt_window_capture.py', 'test_image_is_blank_detects_black', 1, 2, 3).
python_function('tests/test_adopt_window_capture.py', 'test_image_is_blank_accepts_colored', 1, 2, 4).
python_function('tests/test_adopt_window_capture.py', 'test_image_stats_reports_blank', 1, 4, 3).
python_function('tests/test_metadata_validation.py', 'test_empty_metadata_valid', 0, 3, 1).
python_function('tests/test_metadata_validation.py', 'test_valid_imgl_metadata', 0, 2, 1).
python_function('tests/test_metadata_validation.py', 'test_invalid_capture_type', 0, 2, 2).
python_function('tests/test_metadata_validation.py', 'test_invalid_window_os', 1, 2, 2).
python_function('tests/test_photo_roundtrip.py', '_flat_shapes_image', 1, 1, 4).
python_function('tests/test_photo_roundtrip.py', 'test_nl_drawing_roundtrip', 1, 4, 4).
python_function('tests/test_photo_roundtrip.py', 'test_img2svg_sets_scene_background', 1, 4, 6).
python_function('tests/test_photo_roundtrip.py', 'test_img2svg_vql_render_roundtrip', 1, 4, 10).
python_function('tests/test_photo_roundtrip.py', 'test_vtracer_roundtrip_when_installed', 1, 4, 8).
python_function('tests/test_photo_roundtrip.py', 'test_metadata_only_program_renders_background_only', 1, 3, 8).
python_function('tests/test_photo_roundtrip.py', 'test_trace_contours_graceful_without_opencv', 1, 4, 4).
python_function('tests/test_screenshot_merge.py', 'test_screenshot_merge_reduces_object_count', 1, 5, 8).
python_function('tests/test_vql.py', 'test_empty_program_is_structurally_valid', 0, 3, 4).
python_function('tests/test_vql.py', 'test_invalid_scene_dimensions_fail', 0, 3, 4).
python_function('tests/test_vql.py', 'test_program_roundtrip_to_dict', 0, 3, 9).
python_function('tests/test_vql.py', 'test_commands_program_roundtrip_preserves_shapes_and_colors', 0, 7, 2).
python_function('tests/test_vql.py', 'test_program_to_commands_starts_with_init_canvas', 0, 4, 3).
python_function('tests/test_vql.py', 'test_commands_to_program_is_inverse_of_program_to_commands', 0, 3, 5).
python_function('tests/test_vql.py', 'test_compile_to_events_produces_shape_drawn', 0, 4, 3).
python_function('tests/test_vql.py', 'test_render_to_svg_returns_markup', 0, 3, 3).
python_function('tests/test_vql.py', 'test_render_to_png_without_cairosvg_raises_clear_error', 1, 6, 7).
python_function('tests/test_vql.py', 'test_validate_program_passes_with_matching_spec', 0, 3, 2).
python_function('tests/test_vql.py', 'test_validate_program_reports_missing_shape', 0, 3, 4).
python_function('tests/test_vql.py', 'test_facade_run_full_pipeline', 0, 4, 4).
python_function('tests/test_vql.py', 'test_facade_run_without_render_skips_svg', 0, 3, 3).
python_function('tests/test_vql.py', 'test_nl_parser_to_vql_returns_program', 0, 4, 5).
python_function('tests/test_vql.py', 'test_nl_parser_parse_still_returns_commands', 0, 2, 4).
python_function('tests/test_vql.py', 'test_vql_library_exposes_primitives', 0, 7, 6).
python_function('tests/test_vql.py', 'test_playwright_vql_renderer_render_delegates_to_events', 0, 3, 7).
python_function('tests/test_vql.py', 'test_playwright_vql_renderer_is_renderer_subclass', 0, 3, 2).
% ── Python Classes ───────────────────────────────────────
python_class('packages/dsl2img2svg/src/dsl2img2svg/dispatch.py', 'DispatchResult').
python_method('DispatchResult', 'to_dict', 0, 1, 0).
python_class('packages/dsl2vql/src/dsl2vql/events.py', 'DslEvent').
python_method('DslEvent', 'to_dict', 0, 1, 1).
python_class('packages/dsl2vql/src/dsl2vql/events.py', 'EventStore').
python_method('EventStore', '__init__', 1, 3, 1).
python_method('EventStore', 'append', 2, 3, 21).
python_method('EventStore', 'replay', 0, 6, 11).
python_class('packages/dsl2vql/src/dsl2vql/result.py', 'DslResult').
python_method('DslResult', 'to_dict', 0, 1, 0).
python_class('packages/img2svg/src/img2svg/trace.py', 'TracedRegion').
python_method('TracedRegion', 'to_dict', 0, 1, 1).
python_class('packages/img2vql/src/img2vql/detect.py', 'UIElement').
python_method('UIElement', 'width', 0, 1, 0).
python_method('UIElement', 'height', 0, 1, 0).
python_method('UIElement', 'center', 0, 1, 0).
python_method('UIElement', 'bbox_norm', 0, 1, 2).
python_method('UIElement', 'to_dict', 0, 1, 2).
python_class('packages/mcp2vql/src/mcp2vql/server.py', 'VqlMCPServer').
python_method('VqlMCPServer', '__post_init__', 0, 1, 3).
python_method('VqlMCPServer', '_register_tools', 0, 1, 19).
python_method('VqlMCPServer', 'run', 0, 1, 1).
python_class('packages/nlp2vql/src/nlp2vql/apply.py', 'ApplyResult').
python_method('ApplyResult', 'to_dict', 0, 1, 0).
python_class('packages/rest2vql/src/rest2vql/window.py', 'WindowImageBody').
python_class('packages/uri2img2svg/src/uri2img2svg/query.py', 'QueryResult').
python_method('QueryResult', 'to_dict', 0, 1, 0).
python_class('packages/uri2img2svg/src/uri2img2svg/uri.py', 'Img2SvgUri').
python_method('Img2SvgUri', 'target', 0, 1, 0).
python_class('packages/uri2vql/src/uri2vql/nlp2uri.py', 'ResolvedVqlUri').
python_method('ResolvedVqlUri', 'to_dict', 0, 1, 0).
python_class('packages/uri2vql/src/uri2vql/patch.py', 'PatchResult').
python_method('PatchResult', 'to_dict', 0, 1, 0).
python_class('packages/uri2vql/src/uri2vql/query.py', 'QueryResult').
python_method('QueryResult', 'to_dict', 0, 1, 0).
python_class('packages/uri2vql/src/uri2vql/run.py', 'RunResult').
python_method('RunResult', 'to_dict', 0, 1, 0).
python_class('packages/uri2vql/src/uri2vql/uri.py', 'VqlUri').
python_method('VqlUri', 'target', 0, 1, 0).
python_class('packages/uri2vql/src/uri2vql/window.py', 'WindowAnalyzeResult').
python_method('WindowAnalyzeResult', 'to_dict', 0, 1, 0).
python_class('src/vql/adopt/window.py', 'CaptureError').
python_class('src/vql/adopt/window.py', 'CaptureInfo').
python_method('CaptureInfo', 'to_dict', 0, 1, 0).
python_class('src/vql/adopt/window.py', 'CaptureAttempt').
python_method('CaptureAttempt', 'to_dict', 0, 1, 0).
python_class('src/vql/drawing/arrow_generator.py', 'ArrowGenerator').
python_method('ArrowGenerator', 'generate', 3, 3, 1).
python_class('src/vql/drawing/bird_generator.py', 'BirdGenerator').
python_method('BirdGenerator', 'generate', 3, 2, 4).
python_class('src/vql/drawing/boat_generator.py', 'BoatGenerator').
python_method('BoatGenerator', 'generate', 3, 1, 0).
python_class('src/vql/drawing/butterfly_generator.py', 'ButterflyGenerator').
python_method('ButterflyGenerator', 'generate', 3, 5, 4).
python_class('src/vql/drawing/car_generator.py', 'CarGenerator').
python_method('CarGenerator', 'generate', 3, 3, 4).
python_class('src/vql/drawing/castle_generator.py', 'CastleGenerator').
python_method('CastleGenerator', 'generate', 3, 3, 5).
python_class('src/vql/drawing/cat_generator.py', 'CatGenerator').
python_method('CatGenerator', 'generate', 3, 4, 4).
python_class('src/vql/drawing/circle_generator.py', 'CircleGenerator').
python_method('CircleGenerator', 'generate', 3, 2, 5).
python_class('src/vql/drawing/cloud_detailed_generator.py', 'CloudDetailedGenerator').
python_method('CloudDetailedGenerator', 'generate', 3, 4, 4).
python_class('src/vql/drawing/colors.py', 'ColorResolver').
python_method('ColorResolver', '__init__', 0, 1, 1).
python_method('ColorResolver', 'register', 2, 1, 2).
python_method('ColorResolver', 'resolve', 2, 3, 4).
python_method('ColorResolver', 'extract_colors', 1, 6, 9).
python_method('ColorResolver', 'available', 0, 1, 1).
python_method('ColorResolver', 'unique_colors', 0, 4, 2).
python_class('src/vql/drawing/commands.py', 'DrawCommand').
python_method('DrawCommand', 'validate', 0, 1, 0).
python_class('src/vql/drawing/commands.py', 'InitCanvas').
python_method('InitCanvas', 'validate', 0, 1, 1).
python_class('src/vql/drawing/commands.py', 'DrawShape').
python_method('DrawShape', 'validate', 0, 1, 1).
python_class('src/vql/drawing/commands.py', 'SetColor').
python_method('SetColor', 'validate', 0, 1, 0).
python_class('src/vql/drawing/commands.py', 'SelectTool').
python_method('SelectTool', 'validate', 0, 1, 0).
python_class('src/vql/drawing/commands.py', 'ClearCanvas').
python_method('ClearCanvas', 'validate', 0, 1, 0).
python_class('src/vql/drawing/commands.py', 'CommandHandler').
python_method('CommandHandler', '__call__', 3, 1, 0).
python_class('src/vql/drawing/commands.py', 'CommandBus').
python_method('CommandBus', '__init__', 1, 1, 0).
python_method('CommandBus', 'state', 0, 1, 1).
python_method('CommandBus', 'register_handler', 2, 1, 0).
python_method('CommandBus', 'add_pre_hook', 1, 1, 1).
python_method('CommandBus', 'add_post_hook', 1, 1, 1).
python_method('CommandBus', 'dispatch', 1, 5, 9).
python_method('CommandBus', 'rebuild_state', 0, 1, 1).
python_method('CommandBus', '_apply_event', 1, 5, 2).
python_method('CommandBus', '_handle_init_canvas', 1, 1, 2).
python_method('CommandBus', '_handle_draw_shape', 1, 8, 5).
python_method('CommandBus', '_handle_set_color', 1, 1, 2).
python_method('CommandBus', '_handle_select_tool', 1, 1, 2).
python_method('CommandBus', '_handle_clear_canvas', 1, 1, 2).
python_class('src/vql/drawing/crescent_generator.py', 'CrescentGenerator').
python_method('CrescentGenerator', 'generate', 3, 3, 4).
python_class('src/vql/drawing/cross_generator.py', 'CrossGenerator').
python_method('CrossGenerator', 'generate', 3, 1, 0).
python_class('src/vql/drawing/diamond_generator.py', 'DiamondGenerator').
python_method('DiamondGenerator', 'generate', 3, 1, 0).
python_class('src/vql/drawing/dot_generator.py', 'DotGenerator').
python_method('DotGenerator', 'generate', 3, 2, 5).
python_class('src/vql/drawing/ellipse_generator.py', 'EllipseGenerator').
python_method('EllipseGenerator', 'generate', 3, 2, 5).
python_class('src/vql/drawing/event_store.py', 'EventStore').
python_method('EventStore', '__init__', 0, 1, 0).
python_method('EventStore', 'events', 0, 1, 1).
python_method('EventStore', 'count', 0, 1, 1).
python_method('EventStore', 'append', 1, 2, 2).
python_method('EventStore', 'subscribe', 1, 1, 1).
python_method('EventStore', 'unsubscribe', 1, 3, 0).
python_method('EventStore', 'replay', 1, 2, 1).
python_method('EventStore', 'events_since', 1, 3, 0).
python_method('EventStore', 'events_of_type', 1, 3, 0).
python_method('EventStore', 'clear', 0, 1, 1).
python_method('EventStore', 'to_dict', 0, 2, 1).
python_method('EventStore', 'save', 1, 1, 5).
python_method('EventStore', 'load', 2, 3, 7).
python_method('EventStore', '__len__', 0, 1, 1).
python_method('EventStore', '__repr__', 0, 1, 1).
python_class('src/vql/drawing/events.py', 'EventType').
python_class('src/vql/drawing/events.py', 'DrawingEvent').
python_method('DrawingEvent', 'to_dict', 0, 1, 0).
python_method('DrawingEvent', 'from_dict', 2, 1, 6).
python_class('src/vql/drawing/events.py', 'CanvasInitialized').
python_method('CanvasInitialized', '__post_init__', 0, 1, 1).
python_class('src/vql/drawing/events.py', 'CanvasCleared').
python_method('CanvasCleared', '__post_init__', 0, 1, 1).
python_class('src/vql/drawing/events.py', 'ShapeDrawn').
python_method('ShapeDrawn', '__post_init__', 0, 1, 1).
python_class('src/vql/drawing/events.py', 'ColorChanged').
python_method('ColorChanged', '__post_init__', 0, 1, 1).
python_class('src/vql/drawing/events.py', 'ToolSelected').
python_method('ToolSelected', '__post_init__', 0, 1, 1).
python_class('src/vql/drawing/fish_generator.py', 'FishGenerator').
python_method('FishGenerator', 'generate', 3, 3, 4).
python_class('src/vql/drawing/flower_generator.py', 'FlowerGenerator').
python_method('FlowerGenerator', 'generate', 3, 3, 5).
python_class('src/vql/drawing/grid_generator.py', 'GridGenerator').
python_method('GridGenerator', 'generate', 3, 3, 3).
python_class('src/vql/drawing/heart_generator.py', 'HeartGenerator').
python_method('HeartGenerator', 'generate', 3, 2, 5).
python_class('src/vql/drawing/hexagon_generator.py', 'HexagonGenerator').
python_method('HexagonGenerator', 'generate', 3, 2, 4).
python_class('src/vql/drawing/house_generator.py', 'HouseGenerator').
python_method('HouseGenerator', 'generate', 3, 1, 0).
python_class('src/vql/drawing/line_generator.py', 'LineGenerator').
python_method('LineGenerator', 'generate', 3, 1, 1).
python_class('src/vql/drawing/mountain_generator.py', 'MountainGenerator').
python_method('MountainGenerator', 'generate', 3, 1, 2).
python_class('src/vql/drawing/nl_parser.py', 'NLDrawingParser').
python_method('NLDrawingParser', '__init__', 1, 2, 1).
python_method('NLDrawingParser', 'parse', 3, 8, 14).
python_method('NLDrawingParser', 'to_vql', 5, 1, 1).
python_method('NLDrawingParser', 'detect_shape', 1, 2, 2).
python_method('NLDrawingParser', 'detect_color', 2, 2, 1).
python_method('NLDrawingParser', '_extract_shapes', 1, 3, 3).
python_method('NLDrawingParser', '_extract_size_params', 1, 4, 3).
python_method('NLDrawingParser', '_extract_shape_specific_params', 2, 11, 3).
python_class('src/vql/drawing/octagon_generator.py', 'OctagonGenerator').
python_method('OctagonGenerator', 'generate', 3, 2, 4).
python_class('src/vql/drawing/path_generator.py', 'PathGenerator').
python_method('PathGenerator', 'generate', 3, 5, 4).
python_class('src/vql/drawing/pentagon_generator.py', 'PentagonGenerator').
python_method('PentagonGenerator', 'generate', 3, 2, 4).
python_class('src/vql/drawing/rectangle_generator.py', 'RectangleGenerator').
python_method('RectangleGenerator', 'generate', 3, 1, 1).
python_class('src/vql/drawing/renderers/base.py', 'Renderer').
python_method('Renderer', 'init_canvas', 4, 1, 0).
python_method('Renderer', 'set_color', 1, 1, 0).
python_method('Renderer', 'draw_path', 3, 1, 0).
python_method('Renderer', 'draw_shape', 1, 1, 0).
python_method('Renderer', 'clear', 0, 1, 0).
python_method('Renderer', 'screenshot', 1, 1, 0).
python_method('Renderer', 'render_events', 1, 3, 2).
python_method('Renderer', 'dispose', 0, 1, 0).
python_class('src/vql/drawing/renderers/playwright.py', 'PlaywrightRenderer').
python_method('PlaywrightRenderer', '__init__', 2, 1, 0).
python_method('PlaywrightRenderer', 'init_canvas', 4, 8, 9).
python_method('PlaywrightRenderer', 'set_color', 1, 8, 7).
python_method('PlaywrightRenderer', 'draw_path', 3, 9, 6).
python_method('PlaywrightRenderer', 'draw_shape', 1, 3, 2).
python_method('PlaywrightRenderer', 'clear', 0, 3, 2).
python_method('PlaywrightRenderer', 'screenshot', 1, 2, 4).
python_method('PlaywrightRenderer', 'dispose', 0, 1, 0).
python_class('src/vql/drawing/renderers/svg.py', 'SVGRenderer').
python_method('SVGRenderer', '__init__', 0, 1, 0).
python_method('SVGRenderer', 'init_canvas', 4, 1, 1).
python_method('SVGRenderer', 'set_color', 1, 1, 0).
python_method('SVGRenderer', 'draw_path', 3, 6, 3).
python_method('SVGRenderer', 'draw_shape', 1, 3, 1).
python_method('SVGRenderer', 'clear', 0, 1, 1).
python_method('SVGRenderer', 'screenshot', 1, 1, 6).
python_method('SVGRenderer', 'to_svg', 0, 1, 1).
python_class('src/vql/drawing/rocket_generator.py', 'RocketGenerator').
python_method('RocketGenerator', 'generate', 3, 2, 4).
python_class('src/vql/drawing/shape_generator.py', 'ShapeGenerator').
python_method('ShapeGenerator', 'generate', 3, 1, 0).
python_class('src/vql/drawing/shape_registry.py', 'ShapeRegistry').
python_method('ShapeRegistry', 'register', 2, 1, 0).
python_method('ShapeRegistry', 'get', 2, 3, 3).
python_method('ShapeRegistry', 'available', 1, 2, 3).
python_method('ShapeRegistry', '_init_defaults', 1, 2, 2).
python_class('src/vql/drawing/spiral_generator.py', 'SpiralGenerator').
python_method('SpiralGenerator', 'generate', 3, 2, 5).
python_class('src/vql/drawing/square_generator.py', 'SquareGenerator').
python_method('SquareGenerator', 'generate', 3, 1, 1).
python_class('src/vql/drawing/star_generator.py', 'StarGenerator').
python_method('StarGenerator', 'generate', 3, 2, 5).
python_class('src/vql/drawing/sun_generator.py', 'SunGenerator').
python_method('SunGenerator', 'generate', 3, 3, 5).
python_class('src/vql/drawing/svg_path_parser.py', '_PathState').
python_method('_PathState', 'next_num', 0, 4, 2).
python_method('_PathState', 'close_subpath', 0, 2, 1).
python_method('_PathState', 'start_subpath', 2, 2, 1).
python_method('_PathState', 'line_to', 2, 1, 1).
python_method('_PathState', 'append_cubic', 6, 2, 1).
python_method('_PathState', 'append_quadratic', 4, 2, 1).
python_class('src/vql/drawing/tree_generator.py', 'TreeGenerator').
python_method('TreeGenerator', 'generate', 3, 2, 4).
python_class('src/vql/drawing/triangle_generator.py', 'TriangleGenerator').
python_method('TriangleGenerator', 'generate', 3, 1, 0).
python_class('src/vql/drawing/wave_generator.py', 'WaveGenerator').
python_method('WaveGenerator', 'generate', 3, 2, 4).
python_class('src/vql/facade.py', 'VQLResult').
python_class('src/vql/facade.py', 'VQLFacade').
python_method('VQLFacade', 'compile', 1, 1, 1).
python_method('VQLFacade', 'validate', 1, 1, 1).
python_method('VQLFacade', 'render_svg', 1, 1, 1).
python_method('VQLFacade', 'render_png', 2, 1, 1).
python_method('VQLFacade', 'to_commands', 1, 1, 1).
python_method('VQLFacade', 'to_events', 1, 1, 1).
python_method('VQLFacade', 'run', 1, 2, 4).
python_class('src/vql/renderers/base.py', 'VQLRenderer').
python_method('VQLRenderer', 'render', 1, 1, 0).
python_class('src/vql/renderers/base.py', 'VQLRendererAdapter').
python_method('VQLRendererAdapter', 'render', 1, 1, 1).
python_class('src/vql/renderers/playwright.py', 'PlaywrightVQLRenderer').
python_method('PlaywrightVQLRenderer', '__init__', 2, 1, 1).
python_class('src/vql/renderers/svg.py', 'SVGVQLRenderer').
python_class('src/vql/schema/program.py', 'RenderTarget').
python_class('src/vql/schema/program.py', 'Style').
python_method('Style', 'validate', 0, 1, 1).
python_method('Style', 'to_dict', 0, 2, 0).
python_method('Style', 'from_dict', 2, 2, 4).
python_class('src/vql/schema/program.py', 'Transform').
python_method('Transform', 'is_identity', 0, 5, 0).
python_method('Transform', 'to_dict', 0, 2, 0).
python_method('Transform', 'from_dict', 2, 2, 3).
python_class('src/vql/schema/program.py', 'Anchor').
python_method('Anchor', 'to_dict', 0, 2, 0).
python_method('Anchor', 'from_dict', 2, 2, 3).
python_class('src/vql/schema/program.py', 'Constraint').
python_method('Constraint', 'to_dict', 0, 2, 0).
python_method('Constraint', 'from_dict', 2, 2, 3).
python_class('src/vql/schema/program.py', 'Relation').
python_method('Relation', 'to_dict', 0, 2, 0).
python_method('Relation', 'from_dict', 2, 2, 3).
python_class('src/vql/schema/program.py', 'Primitive').
python_method('Primitive', 'validate', 0, 1, 0).
python_method('Primitive', 'to_dict', 0, 2, 0).
python_method('Primitive', 'from_dict', 2, 2, 3).
python_class('src/vql/schema/program.py', 'Object').
python_method('Object', 'validate', 0, 1, 3).
python_method('Object', 'to_dict', 0, 2, 1).
python_method('Object', 'from_dict', 2, 2, 5).
python_class('src/vql/schema/program.py', 'Layer').
python_method('Layer', 'validate', 0, 1, 2).
python_method('Layer', 'to_dict', 0, 2, 1).
python_method('Layer', 'from_dict', 2, 2, 4).
python_class('src/vql/schema/program.py', 'Scene').
python_method('Scene', 'validate', 0, 1, 3).
python_method('Scene', 'iter_objects', 0, 2, 0).
python_method('Scene', 'to_dict', 0, 2, 1).
python_method('Scene', 'from_dict', 2, 2, 4).
python_class('src/vql/schema/program.py', 'ValidationSpec').
python_method('ValidationSpec', 'to_dict', 0, 2, 1).
python_method('ValidationSpec', 'from_dict', 2, 2, 5).
python_class('src/vql/schema/program.py', 'VQLProgram').
python_method('VQLProgram', 'validate', 0, 1, 1).
python_method('VQLProgram', 'is_valid', 0, 1, 1).
python_method('VQLProgram', 'object_count', 0, 2, 2).
python_method('VQLProgram', 'to_dict', 0, 2, 1).
python_method('VQLProgram', 'from_dict', 2, 2, 5).
python_class('src/vql/validation/spec.py', 'VQLValidationReport').
python_method('VQLValidationReport', 'to_dict', 0, 1, 1).
% ── Dependencies ─────────────────────────────────────────
% ── Makefile Targets ─────────────────────────────────────
makefile_target('PACKAGES', '').
makefile_target('PYTEST', '').
makefile_target('help', '').
makefile_target('venv', '').
makefile_target('install', '').
makefile_target('install-dev', '').
makefile_target('proto', '').
makefile_target('test', '').
makefile_target('test-cov', '').
makefile_target('test-all', '').
makefile_target('test-roundtrip', '').
makefile_target('validate-schema', '').
makefile_target('compile', '').
makefile_target('serve', '').
makefile_target('clean', '').
makefile_target('build', '').
makefile_target('publish', '').
makefile_target('publish-confirm', '').
makefile_target('version', '').
makefile_target('goal', '').
% ── Taskfile Tasks ───────────────────────────────────────
% ── Environment Variables ────────────────────────────────
env_variable('OPENROUTER_API_KEY', '*(not set)*', 'Required: OpenRouter API key (https://openrouter.ai/keys)').
env_variable('LLM_MODEL', 'openrouter/qwen/qwen3-coder-next', 'Model (default: openrouter/qwen/qwen3-coder-next)').
env_variable('PFIX_AUTO_APPLY', 'true', 'true = apply fixes without asking').
env_variable('PFIX_AUTO_INSTALL_DEPS', 'true', 'true = auto pip/uv install').
env_variable('PFIX_AUTO_RESTART', 'false', 'true = os.execv restart after fix').
env_variable('PFIX_MAX_RETRIES', '3', '').
env_variable('PFIX_DRY_RUN', 'false', '').
env_variable('PFIX_ENABLED', 'true', '').
env_variable('PFIX_GIT_COMMIT', 'false', 'true = auto-commit fixes').
env_variable('PFIX_GIT_PREFIX', 'pfix:', 'commit message prefix').
env_variable('PFIX_CREATE_BACKUPS', 'false', 'false = disable .pfix_backups/ directory').
% ── TestQL Scenarios ─────────────────────────────────────
testql_scenario('generated-cli-tests.testql.toon.yaml', 'cli').
testql_scenario('generated-from-pytests.testql.toon.yaml', 'integration').
% ── Semantic Facts from SUMD.md ──────────────────────────
sumd_declared_file('app.doql.less', 'doql').
sumd_declared_file('testql-scenarios/generated-cli-tests.testql.toon.yaml', 'testql').
sumd_declared_file('testql-scenarios/generated-from-pytests.testql.toon.yaml', 'testql').
sumd_declared_file('project/map.toon.yaml', 'analysis').
sumd_declared_file('project/logic.pl', 'analysis').
sumd_declared_file('project/calls.toon.yaml', 'analysis').
sumd_interface('api', '').
sumd_workflow('venv', 'manual').
sumd_workflow_step('venv', 1, 'test -d .venv || python3 -m venv .venv').
sumd_workflow_step('venv', 2, 'echo "venv ready: .venv/"').
sumd_workflow('install', 'manual').
sumd_workflow_step('install', 1, '$(PIP) install -e .').
sumd_workflow('install-dev', 'manual').
sumd_workflow_step('install-dev', 1, '$(PIP) install -e .').
sumd_workflow_step('install-dev', 2, '$(PIP) install -e packages/uri2vql').
sumd_workflow_step('install-dev', 3, '$(PIP) install -e packages/nlp2vql').
sumd_workflow_step('install-dev', 4, '$(PIP) install -e packages/dsl2vql').
sumd_workflow_step('install-dev', 5, '$(PIP) install -e packages/cli2vql').
sumd_workflow_step('install-dev', 6, '$(PIP) install -e packages/rest2vql').
sumd_workflow_step('install-dev', 7, '-$(PIP) install -e packages/mcp2vql').
sumd_workflow_step('install-dev', 8, '$(PIP) install -e ".[dev,png]" jsonschema protobuf fastapi uvicorn httpx').
sumd_workflow_step('install-dev', 9, 'echo "dev stack installed"').
sumd_workflow('proto', 'manual').
sumd_workflow_step('proto', 1, '$(PIP) install -q grpcio-tools').
sumd_workflow_step('proto', 2, 'bash packages/dsl2vql/scripts/generate-proto.sh').
sumd_workflow('test', 'manual').
sumd_workflow_step('test', 1, 'echo "Running tests..."').
sumd_workflow_step('test', 2, '$(PYTEST)').
sumd_workflow('test-cov', 'manual').
sumd_workflow_step('test-cov', 1, '$(PYTHON) -m pytest tests/ packages/dsl2vql/tests -v \').
sumd_workflow_step('test-cov', 2, '--cov=vql --cov=dsl2vql --cov-report=term-missing').
sumd_workflow('test-all', 'manual').
sumd_workflow_step('test-all', 1, '$(PYTHON) -m pytest tests/ packages/ -q --tb=short').
sumd_workflow('test-roundtrip', 'manual').
sumd_workflow_step('test-roundtrip', 1, '$(PYTHON) -m pytest tests/test_photo_roundtrip.py -q --tb=short').
sumd_workflow_step('test-roundtrip', 2, '$(PYTHON) examples/photo-roundtrip-test.py --out /tmp/vql-roundtrip').
sumd_workflow('validate-schema', 'manual').
sumd_workflow_step('validate-schema', 1, 'dsl2vql validate-schema').
sumd_workflow('compile', 'manual').
sumd_workflow_step('compile', 1, 'dsl2vql -c \'COMPILE "narysuj czerwone koło"\' --json').
sumd_workflow('serve', 'manual').
sumd_workflow_step('serve', 1, 'rest2vql serve --port $(PORT) --host 127.0.0.1').
sumd_workflow('clean', 'manual').
sumd_workflow_step('clean', 1, 'find . -type f -name \'*.pyc\' -delete').
sumd_workflow('build', 'manual').
sumd_workflow_step('build', 1, '$(PIP) install -q build').
sumd_workflow_step('build', 2, 'rm -rf dist/ build/').
sumd_workflow_step('build', 3, '$(PYTHON) -m build').
sumd_workflow('publish', 'manual').
sumd_workflow_step('publish', 1, '$(PIP) install -q twine').
sumd_workflow_step('publish', 2, '$(PYTHON) -m twine check dist/*').
sumd_workflow('publish-confirm', 'manual').
sumd_workflow_step('publish-confirm', 1, '$(PYTHON) -m twine upload dist/*').
sumd_workflow('version', 'manual').
sumd_workflow_step('version', 1, 'echo -n "VERSION file: "').
sumd_workflow_step('version', 2, 'cat VERSION').
sumd_workflow_step('version', 3, '$(PYTHON) -c "from importlib.metadata import version').
sumd_workflow('goal', 'manual').
sumd_workflow_step('goal', 1, 'goal -a').
218 nodes · 256 edges · 53 modules · CC̄=4.1
| Function | CC | in | out | total |
|---|---|---|---|---|
query_window (in packages.uri2vql.src.uri2vql.window) |
69 ⚠ | 2 | 147 | 149 |
resolve_prompt_to_vql_uri (in packages.uri2vql.src.uri2vql.nlp2uri) |
54 ⚠ | 2 | 68 | 70 |
trace_to_vql_program (in packages.img2svg.src.img2svg.to_vql) |
15 ⚠ | 3 | 46 | 49 |
_dispatch_command (in src.vql.drawing.svg_path_parser) |
16 ⚠ | 1 | 47 | 48 |
screenshot_to_program (in src.vql.adopt.window) |
12 ⚠ | 3 | 44 | 47 |
analyze_screenshot (in src.vql.adopt.window) |
13 ⚠ | 2 | 45 | 47 |
_set_body (in packages.dsl2vql.src.dsl2vql.pb_codec) |
12 ⚠ | 1 | 45 | 46 |
_query_window_imgl (in packages.uri2vql.src.uri2vql.window) |
17 ⚠ | 1 | 45 | 46 |
```toon markpact:analysis path=project/calls.toon.yaml
HUBS[20]: packages.uri2vql.src.uri2vql.window.query_window CC=69 in:2 out:147 total:149 packages.uri2vql.src.uri2vql.nlp2uri.resolve_prompt_to_vql_uri CC=54 in:2 out:68 total:70 packages.img2svg.src.img2svg.to_vql.trace_to_vql_program CC=15 in:3 out:46 total:49 src.vql.drawing.svg_path_parser._dispatch_command CC=16 in:1 out:47 total:48 src.vql.adopt.window.screenshot_to_program CC=12 in:3 out:44 total:47 src.vql.adopt.window.analyze_screenshot CC=13 in:2 out:45 total:47 packages.dsl2vql.src.dsl2vql.pb_codec._set_body CC=12 in:1 out:45 total:46 packages.uri2vql.src.uri2vql.window._query_window_imgl CC=17 in:1 out:45 total:46 packages.img2vql.src.img2vql.detect._detect_buttons CC=25 in:1 out:45 total:46 packages.img2vql.src.img2vql.describe_ui.describe_ui_layout CC=14 in:6 out:39 total:45 src.vql.adopt.window.capture_diagnose CC=33 in:1 out:44 total:45 examples.photo-roundtrip-test.main CC=5 in:0 out:45 total:45 packages.rest2vql.src.rest2vql.app.create_app CC=1 in:1 out:43 total:44 packages.dsl2img2svg.src.dsl2img2svg.dispatch.dispatch CC=14 in:0 out:41 total:41 packages.img2vql.src.img2vql.program.elements_to_vql_program CC=11 in:1 out:40 total:41 packages.uri2img2svg.src.uri2img2svg.query.query_uri CC=13 in:6 out:28 total:34 packages.dsl2vql.src.dsl2vql.grammar.parse_line CC=28 in:6 out:27 total:33 packages.dsl2vql.src.dsl2vql.events.EventStore.append CC=3 in:0 out:33 total:33 src.vql.adopt.portal_capture.capture_via_portal CC=4 in:1 out:30 total:31 examples.photo-roundtrip-test.test_img2svg_roundtrip CC=8 in:2 out:29 total:31
MODULES: examples.generate-demo-screen [3 funcs] _load_font CC=3 out:2 main CC=1 out:6 write_demo_screen CC=1 out:18 examples.photo-roundtrip-test [10 funcs] _require_pil CC=2 out:1 main CC=5 out:45 sample_flat_shapes CC=1 out:8 sample_gradient CC=3 out:21 sample_nl_drawing CC=2 out:12 test_img2svg_roundtrip CC=8 out:29 test_img2vql_detect CC=5 out:5 test_opencv_contours CC=2 out:13 test_ui_grid_adopt CC=2 out:17 test_vtracer_roundtrip CC=10 out:27 packages.cli2vql.src.cli2vql.cli [1 funcs] _repl CC=6 out:8 packages.dsl2img2svg.src.dsl2img2svg.cli [1 funcs] main CC=4 out:5 packages.dsl2img2svg.src.dsl2img2svg.dispatch [2 funcs] _parse_kv_args CC=4 out:4 dispatch CC=14 out:41 packages.dsl2vql.src.dsl2vql.bus [5 funcs] _bytes_to_cmd CC=3 out:5 _dispatch_cmd CC=5 out:12 dispatch CC=6 out:15 execute_dsl CC=4 out:6 execute_dsl_line CC=1 out:1 packages.dsl2vql.src.dsl2vql.cli [3 funcs] _main_legacy CC=9 out:20 _main_subcommand CC=9 out:21 main CC=4 out:2 packages.dsl2vql.src.dsl2vql.codec [4 funcs] decode_protobuf CC=1 out:1 encode_protobuf CC=1 out:1 encode_text CC=2 out:2 roundtrip_text CC=3 out:6 packages.dsl2vql.src.dsl2vql.events [2 funcs] append CC=3 out:33 default_event_store CC=1 out:4 packages.dsl2vql.src.dsl2vql.grammar [4 funcs] parse_line CC=28 out:27 pick_flag CC=3 out:2 split_command CC=4 out:4 to_text CC=6 out:11 packages.dsl2vql.src.dsl2vql.handlers.command [6 funcs] _read_json CC=1 out:4 handle_compile CC=4 out:11 handle_export CC=7 out:15 handle_from_tokens CC=11 out:15 handle_generate CC=4 out:12 handle_patch CC=3 out:12 packages.dsl2vql.src.dsl2vql.handlers.query [5 funcs] _load_program CC=1 out:5 handle_query CC=4 out:8 handle_render CC=9 out:16 handle_resolve CC=3 out:5 handle_validate CC=6 out:11 packages.dsl2vql.src.dsl2vql.pb_codec [8 funcs] _set_body CC=12 out:45 decode_protobuf CC=1 out:3 decode_protobuf_to_text CC=1 out:2 encode_protobuf CC=1 out:6 encode_result_protobuf CC=1 out:2 encode_text_to_protobuf CC=2 out:3 envelope_to_dict CC=31 out:4 result_to_pb CC=4 out:4 packages.dsl2vql.src.dsl2vql.schema_registry [5 funcs] _load_schemas CC=3 out:9 all_schemas CC=1 out:2 schema_for_verb CC=1 out:3 validate_command_dict CC=3 out:7 validate_schema_registry CC=3 out:6 packages.img2svg.src.img2svg.svg_emit [2 funcs] image_to_svg CC=7 out:24 paths_to_svg CC=3 out:9 packages.img2svg.src.img2svg.to_vql [2 funcs] image_to_vql CC=5 out:17 trace_to_vql_program CC=15 out:46 packages.img2svg.src.img2svg.trace [7 funcs] _hex_color CC=1 out:0 _merge_grid_cells CC=15 out:9 _parse_translate CC=3 out:5 _parse_vtracer_svg CC=5 out:16 trace_contours_opencv CC=8 out:23 trace_image_regions CC=6 out:17 trace_vtracer CC=6 out:17 packages.img2vql.src.img2vql.adopt [1 funcs] adopt_screenshot CC=2 out:20 packages.img2vql.src.img2vql.describe_ui [1 funcs] describe_ui_layout CC=14 out:39 packages.img2vql.src.img2vql.detect [10 funcs] _avg_color CC=5 out:8 _dedupe CC=8 out:6 _detect_buttons CC=25 out:45 _detect_panels CC=5 out:14 _detect_titlebar CC=5 out:11 _detect_toolbar CC=10 out:21 _flood_rects CC=14 out:13 _hex_color CC=1 out:0 _iou CC=3 out:5 detect_ui_elements CC=8 out:19 packages.img2vql.src.img2vql.diagnose [4 funcs] _normalize_locale CC=4 out:4 _recommendation CC=6 out:10 diagnose_for_vql CC=10 out:21 diagnose_image CC=2 out:3 packages.img2vql.src.img2vql.fingerprint [3 funcs] _json_safe CC=7 out:8 compare_with_program CC=5 out:19 load_program_fingerprint CC=6 out:9 packages.img2vql.src.img2vql.metadata [12 funcs] _compact_special_hits CC=1 out:10 _json_safe CC=7 out:8 _merge_special_hits CC=2 out:8 _text_likely CC=4 out:7 auto_ocr_special_hits CC=3 out:7 img2nl_metadata_slice CC=9 out:17 imgl_ocr_special_hits CC=8 out:12 merge_program_metadata CC=1 out:8 metadata_from_diagnose CC=6 out:21 rapidocr_special_hits CC=10 out:16 packages.img2vql.src.img2vql.program [3 funcs] _bbox_contains CC=4 out:0 _build_contains_relations CC=8 out:9 elements_to_vql_program CC=11 out:40 packages.mcp2vql.src.mcp2vql.server [2 funcs] post_init CC=1 out:3 _require_fastmcp CC=2 out:1 packages.nlp2vql.src.nlp2vql.apply [1 funcs] apply_nl CC=2 out:4 packages.nlp2vql.src.nlp2vql.to_dsl [3 funcs] _intent CC=11 out:6 nl_to_dsl_line CC=8 out:1 to_dsl CC=1 out:1 packages.rest2vql.src.rest2vql.app [1 funcs] create_app CC=1 out:43 packages.rest2vql.src.rest2vql.cli [1 funcs] main CC=1 out:7 packages.rest2vql.src.rest2vql.window [7 funcs] window_adopt CC=1 out:1 window_analyze CC=1 out:1 window_compare CC=1 out:1 window_detect CC=2 out:3 window_diagnose CC=2 out:1 window_refresh CC=1 out:1 window_summary CC=7 out:1 packages.rest2vql.src.rest2vql.window_routes [8 funcs] _window_response CC=2 out:2 post_window_adopt CC=2 out:5 post_window_analyze CC=2 out:5 post_window_compare CC=2 out:5 post_window_detect CC=2 out:5 post_window_diagnose CC=2 out:5 post_window_refresh CC=2 out:5 post_window_summary CC=2 out:5 packages.uri2img2svg.src.uri2img2svg.cli [1 funcs] main CC=4 out:9 packages.uri2img2svg.src.uri2img2svg.query [1 funcs] query_uri CC=13 out:28 packages.uri2img2svg.src.uri2img2svg.uri [1 funcs] parse_img2svg_uri CC=9 out:11 packages.uri2vql.src.uri2vql.compile [2 funcs] _dsl_from_uri CC=4 out:5 compile_vql_uri CC=7 out:8 packages.uri2vql.src.uri2vql.nlp2uri [3 funcs] best_uri CC=2 out:1 nlp2uri CC=1 out:1 resolve_prompt_to_vql_uri CC=54 out:68 packages.uri2vql.src.uri2vql.patch [1 funcs] patch_uri CC=7 out:15 packages.uri2vql.src.uri2vql.query [2 funcs] _load_program CC=1 out:5 query_uri CC=15 out:20 packages.uri2vql.src.uri2vql.run [2 funcs] run_uri CC=7 out:8 run_uri_json CC=1 out:3 packages.uri2vql.src.uri2vql.uri [16 funcs] _with_file CC=4 out:4 is_vql_uri CC=1 out:2 parse_vql_uri CC=5 out:6 uri_for_imgl_click CC=6 out:1 uri_for_imgl_list CC=1 out:1 uri_for_imgl_type CC=6 out:1 uri_for_object CC=1 out:1 uri_for_objects CC=1 out:1 uri_for_program CC=1 out:1 uri_for_scene CC=1 out:1 packages.uri2vql.src.uri2vql.window [9 funcs] _diagnose_fallback CC=15 out:29 _normalize_locale CC=4 out:4 _query_window_imgl CC=17 out:45 _resolve_image_param CC=6 out:12 analyze_window_uri CC=4 out:9 compare_window_image CC=2 out:3 diagnose_window_image CC=2 out:3 query_window CC=69 out:147 refresh_window_metadata CC=2 out:2 src.vql.adopt.portal_capture [2 funcs] capture_via_portal CC=4 out:30 main CC=2 out:9 src.vql.adopt.window [25 funcs] _active_window_title CC=4 out:3 _capture_backends CC=7 out:7 _capture_interactive_mode CC=2 out:3 _capture_permission_hint CC=2 out:1 _capture_with_gnome_screenshot CC=2 out:4 _capture_with_gnome_shell CC=2 out:4 _capture_with_grim CC=2 out:4 _capture_with_mss CC=4 out:8 _capture_with_portal CC=15 out:21 _capture_with_scrot CC=2 out:4 src.vql.compiler.legacy_drawcommand [3 funcs] commands_to_program CC=9 out:15 compile_to_events CC=3 out:6 program_to_commands CC=4 out:7 src.vql.compiler.nl_to_vql [1 funcs] nl_to_program CC=6 out:9 src.vql.drawing.nl_parser [1 funcs] to_vql CC=1 out:1 src.vql.drawing.path_generator [1 funcs] generate CC=5 out:7 src.vql.drawing.svg_path_parser [4 funcs] _dispatch_command CC=16 out:47 _scale_groups CC=15 out:6 _tokenize_path CC=1 out:1 parse_svg_path CC=7 out:7 src.vql.facade [6 funcs] compile CC=1 out:1 render_png CC=1 out:1 render_svg CC=1 out:1 to_commands CC=1 out:1 to_events CC=1 out:1 validate CC=1 out:1 src.vql.renderers.base [2 funcs] render CC=1 out:1 render_program CC=1 out:3 src.vql.renderers.svg [2 funcs] render_to_png CC=2 out:8 render_to_svg CC=1 out:4 src.vql.validation.metadata [2 funcs] _load_imgl_metadata_schema CC=1 out:3 validate_program_metadata CC=14 out:14 src.vql.validation.spec [4 funcs] _match_items CC=4 out:3 _program_colors CC=2 out:2 _program_shapes CC=3 out:1 validate_program CC=4 out:12
EDGES: packages.uri2img2svg.src.uri2img2svg.cli.main → packages.uri2img2svg.src.uri2img2svg.query.query_uri packages.uri2img2svg.src.uri2img2svg.query.query_uri → packages.uri2img2svg.src.uri2img2svg.uri.parse_img2svg_uri packages.uri2img2svg.src.uri2img2svg.query.query_uri → packages.img2svg.src.img2svg.svg_emit.image_to_svg packages.uri2img2svg.src.uri2img2svg.query.query_uri → packages.img2svg.src.img2svg.to_vql.image_to_vql packages.dsl2vql.src.dsl2vql.bus._dispatch_cmd → packages.dsl2vql.src.dsl2vql.schema_registry.validate_command_dict packages.dsl2vql.src.dsl2vql.bus._dispatch_cmd → packages.dsl2vql.src.dsl2vql.grammar.split_command packages.dsl2vql.src.dsl2vql.bus._dispatch_cmd → packages.dsl2vql.src.dsl2vql.handlers.command.handle_from_tokens packages.dsl2vql.src.dsl2vql.bus._dispatch_cmd → packages.dsl2vql.src.dsl2vql.events.default_event_store packages.dsl2vql.src.dsl2vql.bus._bytes_to_cmd → packages.dsl2vql.src.dsl2vql.pb_codec.decode_protobuf packages.dsl2vql.src.dsl2vql.bus._bytes_to_cmd → packages.dsl2vql.src.dsl2vql.grammar.to_text packages.dsl2vql.src.dsl2vql.bus._bytes_to_cmd → packages.dsl2vql.src.dsl2vql.grammar.parse_line packages.dsl2vql.src.dsl2vql.bus.dispatch → packages.dsl2vql.src.dsl2vql.grammar.split_command packages.dsl2vql.src.dsl2vql.bus.dispatch → packages.dsl2vql.src.dsl2vql.bus._dispatch_cmd packages.dsl2vql.src.dsl2vql.bus.dispatch → packages.dsl2vql.src.dsl2vql.bus._bytes_to_cmd packages.dsl2vql.src.dsl2vql.bus.dispatch → packages.dsl2vql.src.dsl2vql.grammar.to_text packages.dsl2vql.src.dsl2vql.bus.execute_dsl_line → packages.dsl2vql.src.dsl2vql.bus.dispatch packages.dsl2vql.src.dsl2vql.bus.execute_dsl → packages.dsl2vql.src.dsl2vql.bus.execute_dsl_line packages.dsl2vql.src.dsl2vql.cli._main_legacy → packages.dsl2vql.src.dsl2vql.bus.execute_dsl_line packages.dsl2vql.src.dsl2vql.cli._main_legacy → packages.dsl2vql.src.dsl2vql.bus.execute_dsl packages.dsl2vql.src.dsl2vql.cli._main_subcommand → packages.dsl2vql.src.dsl2vql.schema_registry.validate_schema_registry packages.dsl2vql.src.dsl2vql.cli.main → packages.dsl2vql.src.dsl2vql.cli._main_legacy packages.dsl2vql.src.dsl2vql.cli.main → packages.dsl2vql.src.dsl2vql.cli._main_subcommand packages.dsl2vql.src.dsl2vql.events.EventStore.append → packages.dsl2vql.src.dsl2vql.pb_codec.encode_protobuf packages.dsl2vql.src.dsl2vql.pb_codec.encode_protobuf → packages.dsl2vql.src.dsl2vql.pb_codec._set_body packages.dsl2vql.src.dsl2vql.pb_codec.decode_protobuf → packages.dsl2vql.src.dsl2vql.pb_codec.envelope_to_dict packages.dsl2vql.src.dsl2vql.pb_codec.encode_text_to_protobuf → packages.dsl2vql.src.dsl2vql.grammar.parse_line packages.dsl2vql.src.dsl2vql.pb_codec.encode_text_to_protobuf → packages.dsl2vql.src.dsl2vql.pb_codec.encode_protobuf packages.dsl2vql.src.dsl2vql.pb_codec.decode_protobuf_to_text → packages.dsl2vql.src.dsl2vql.grammar.to_text packages.dsl2vql.src.dsl2vql.pb_codec.decode_protobuf_to_text → packages.dsl2vql.src.dsl2vql.pb_codec.decode_protobuf packages.dsl2vql.src.dsl2vql.pb_codec.encode_result_protobuf → packages.dsl2vql.src.dsl2vql.pb_codec.result_to_pb packages.dsl2vql.src.dsl2vql.schema_registry.schema_for_verb → packages.dsl2vql.src.dsl2vql.schema_registry._load_schemas packages.dsl2vql.src.dsl2vql.schema_registry.all_schemas → packages.dsl2vql.src.dsl2vql.schema_registry._load_schemas packages.dsl2vql.src.dsl2vql.schema_registry.validate_command_dict → packages.dsl2vql.src.dsl2vql.schema_registry.schema_for_verb packages.dsl2vql.src.dsl2vql.schema_registry.validate_schema_registry → packages.dsl2vql.src.dsl2vql.schema_registry._load_schemas packages.dsl2vql.src.dsl2vql.grammar.parse_line → packages.dsl2vql.src.dsl2vql.grammar.split_command packages.dsl2vql.src.dsl2vql.grammar.parse_line → packages.dsl2vql.src.dsl2vql.grammar.pick_flag packages.dsl2vql.src.dsl2vql.codec.encode_text → packages.dsl2vql.src.dsl2vql.grammar.parse_line packages.dsl2vql.src.dsl2vql.codec.encode_text → packages.dsl2vql.src.dsl2vql.schema_registry.validate_command_dict packages.dsl2vql.src.dsl2vql.codec.roundtrip_text → packages.dsl2vql.src.dsl2vql.grammar.parse_line packages.dsl2vql.src.dsl2vql.codec.roundtrip_text → packages.dsl2vql.src.dsl2vql.schema_registry.validate_command_dict packages.dsl2vql.src.dsl2vql.codec.roundtrip_text → packages.dsl2vql.src.dsl2vql.grammar.to_text packages.dsl2vql.src.dsl2vql.codec.encode_protobuf → packages.dsl2vql.src.dsl2vql.pb_codec.encode_text_to_protobuf packages.dsl2vql.src.dsl2vql.codec.decode_protobuf → packages.dsl2vql.src.dsl2vql.pb_codec.decode_protobuf_to_text packages.dsl2vql.src.dsl2vql.handlers.command.handle_generate → src.vql.compiler.nl_to_vql.nl_to_program packages.dsl2vql.src.dsl2vql.handlers.command.handle_compile → src.vql.compiler.nl_to_vql.nl_to_program packages.dsl2vql.src.dsl2vql.handlers.command.handle_patch → packages.uri2vql.src.uri2vql.patch.patch_uri packages.dsl2vql.src.dsl2vql.handlers.command.handle_export → packages.dsl2vql.src.dsl2vql.handlers.command._read_json packages.dsl2vql.src.dsl2vql.handlers.command.handle_export → src.vql.renderers.svg.render_to_png packages.dsl2vql.src.dsl2vql.handlers.command.handle_export → src.vql.renderers.svg.render_to_svg packages.dsl2vql.src.dsl2vql.handlers.command.handle_from_tokens → packages.dsl2vql.src.dsl2vql.grammar.parse_line ```
Scenarios as contract signatures — what the system guarantees.
CLI Command Tests
Auto-generated from Python Tests
VQL — Visual Query Language for vector description of photographs and drawings