hugpy-browser 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. hugpy_browser/__init__.py +57 -0
  2. hugpy_browser/assets/base-inactive.xml +185 -0
  3. hugpy_browser/assets/clone.xml +218 -0
  4. hugpy_browser/assets/hugpy-browser-lab.xml +155 -0
  5. hugpy_browser/assets/precision.html +73 -0
  6. hugpy_browser/assets/prep_guest.sh +91 -0
  7. hugpy_browser/bench/__init__.py +0 -0
  8. hugpy_browser/bench/data/chat-1920x1080.json +409 -0
  9. hugpy_browser/bench/data/chat-1920x1080.png +0 -0
  10. hugpy_browser/bench/data/chat.html +73 -0
  11. hugpy_browser/bench/data/dash-1920x1080.json +589 -0
  12. hugpy_browser/bench/data/dash-1920x1080.png +0 -0
  13. hugpy_browser/bench/data/dash.html +95 -0
  14. hugpy_browser/bench/data/editor-1920x1080.json +439 -0
  15. hugpy_browser/bench/data/editor-1920x1080.png +0 -0
  16. hugpy_browser/bench/data/editor.html +82 -0
  17. hugpy_browser/bench/data/shop-1920x1080.json +589 -0
  18. hugpy_browser/bench/data/shop-1920x1080.png +0 -0
  19. hugpy_browser/bench/data/shop.html +104 -0
  20. hugpy_browser/bench/data/signin-1920x1080.json +349 -0
  21. hugpy_browser/bench/data/signin-1920x1080.png +0 -0
  22. hugpy_browser/bench/data/signin.html +74 -0
  23. hugpy_browser/bench/data2/chat-1920x1080.json +449 -0
  24. hugpy_browser/bench/data2/chat-1920x1080.png +0 -0
  25. hugpy_browser/bench/data2/chat.html +73 -0
  26. hugpy_browser/bench/data2/dash-1920x1080.json +647 -0
  27. hugpy_browser/bench/data2/dash-1920x1080.png +0 -0
  28. hugpy_browser/bench/data2/dash.html +95 -0
  29. hugpy_browser/bench/data2/editor-1920x1080.json +482 -0
  30. hugpy_browser/bench/data2/editor-1920x1080.png +0 -0
  31. hugpy_browser/bench/data2/editor.html +82 -0
  32. hugpy_browser/bench/data2/shop-1920x1080.json +647 -0
  33. hugpy_browser/bench/data2/shop-1920x1080.png +0 -0
  34. hugpy_browser/bench/data2/shop.html +104 -0
  35. hugpy_browser/bench/data2/signin-1920x1080.json +383 -0
  36. hugpy_browser/bench/data2/signin-1920x1080.png +0 -0
  37. hugpy_browser/bench/data2/signin.html +74 -0
  38. hugpy_browser/bench/evalrun.py +150 -0
  39. hugpy_browser/bench/final_table.py +34 -0
  40. hugpy_browser/bench/make_bench.py +403 -0
  41. hugpy_browser/bench/offline.py +117 -0
  42. hugpy_browser/bench/pipelines.py +118 -0
  43. hugpy_browser/bench/rescore.py +36 -0
  44. hugpy_browser/bench/vlclient.py +77 -0
  45. hugpy_browser/cli.py +47 -0
  46. hugpy_browser/docs/final_numbers.md +18 -0
  47. hugpy_browser/docs/guide.md +389 -0
  48. hugpy_browser/docs/measure.md +94 -0
  49. hugpy_browser/e2e/__init__.py +0 -0
  50. hugpy_browser/e2e/cleanup_e2e.sh +13 -0
  51. hugpy_browser/e2e/e2e_desktop.py +291 -0
  52. hugpy_browser/e2e/e2e_vm.py +232 -0
  53. hugpy_browser/e2e/lab_prepare.sh +97 -0
  54. hugpy_browser-0.1.0.dist-info/METADATA +73 -0
  55. hugpy_browser-0.1.0.dist-info/RECORD +58 -0
  56. hugpy_browser-0.1.0.dist-info/WHEEL +5 -0
  57. hugpy_browser-0.1.0.dist-info/entry_points.txt +2 -0
  58. hugpy_browser-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,57 @@
1
+ """hugpy-browser — screen-driven browser control for bots, consolidated.
2
+
3
+ The ENGINE (the toolserver's ``browser_*`` tools: aim by text / vision target /
4
+ grid cell, verified clicks, surfaces, the lab) lives in ``abstract_toolserver``
5
+ and is served by the toolserver (port 7004 on ae). This package is the single
6
+ front door around it:
7
+
8
+ * lazy re-exports of the engine modules (``hugpy_browser.browser`` etc.),
9
+ * the operator guide and measured benchmark numbers (``docs/``),
10
+ * the re-measurement kit (``bench/``: evalrun, pipelines, vlclient, the
11
+ 233-target synthetic data set),
12
+ * the end-to-end scripts and lab-VM assets (``e2e/``, ``assets/``:
13
+ precision.html, hugpy-browser-lab libvirt XML, guest prep),
14
+ * a small CLI: ``hugpy-browser where|guide|numbers|assets``.
15
+
16
+ Install: ``pip install hugpy-browser`` (pulls abstract-toolserver >= 0.0.70).
17
+ """
18
+
19
+ from importlib import import_module, resources
20
+
21
+ __version__ = "0.1.0"
22
+
23
+ #: engine modules re-exported from abstract_toolserver (imported on first use,
24
+ #: so the docs/CLI work even where the engine's own deps are absent)
25
+ ENGINE = {
26
+ "browser": "abstract_toolserver.browser",
27
+ "aim": "abstract_toolserver.aim",
28
+ "surfaces": "abstract_toolserver.surfaces",
29
+ "labcheck": "abstract_toolserver.labcheck",
30
+ "vl": "abstract_toolserver.vl",
31
+ }
32
+
33
+
34
+ def __getattr__(name):
35
+ target = ENGINE.get(name)
36
+ if target is None:
37
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
38
+ return import_module(target)
39
+
40
+
41
+ def _doc(name):
42
+ return (resources.files(__name__) / "docs" / name).read_text(encoding="utf-8")
43
+
44
+
45
+ def guide():
46
+ """The full operator guide (also at toolserver instructions/hugpy/hugpy-browser)."""
47
+ return _doc("guide.md")
48
+
49
+
50
+ def numbers():
51
+ """The measured benchmark numbers (0.0.64 -> 0.0.70)."""
52
+ return _doc("final_numbers.md")
53
+
54
+
55
+ def asset_dir():
56
+ """Directory holding precision.html and the lab-VM libvirt assets."""
57
+ return str(resources.files(__name__) / "assets")
@@ -0,0 +1,185 @@
1
+ <domain type='kvm'>
2
+ <name>ubuntu-desktop</name>
3
+ <uuid>e2517c6e-3855-4f15-84d7-dd4573c94c69</uuid>
4
+ <metadata>
5
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
6
+ <libosinfo:os id="http://ubuntu.com/ubuntu/22.04"/>
7
+ </libosinfo:libosinfo>
8
+ </metadata>
9
+ <memory unit='KiB'>33554432</memory>
10
+ <currentMemory unit='KiB'>33554432</currentMemory>
11
+ <vcpu placement='static'>8</vcpu>
12
+ <os>
13
+ <type arch='x86_64' machine='pc-q35-noble'>hvm</type>
14
+ </os>
15
+ <features>
16
+ <acpi/>
17
+ <apic/>
18
+ <vmport state='off'/>
19
+ </features>
20
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
21
+ <clock offset='utc'>
22
+ <timer name='rtc' tickpolicy='catchup'/>
23
+ <timer name='pit' tickpolicy='delay'/>
24
+ <timer name='hpet' present='no'/>
25
+ </clock>
26
+ <on_poweroff>destroy</on_poweroff>
27
+ <on_reboot>restart</on_reboot>
28
+ <on_crash>destroy</on_crash>
29
+ <pm>
30
+ <suspend-to-mem enabled='no'/>
31
+ <suspend-to-disk enabled='no'/>
32
+ </pm>
33
+ <devices>
34
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
35
+ <disk type='file' device='disk'>
36
+ <driver name='qemu' type='qcow2' discard='unmap'/>
37
+ <source file='/mnt/nvmes/2T_samsung_990/990_general/vms/images/ubuntu-desktop.qcow2'/>
38
+ <target dev='vda' bus='virtio'/>
39
+ <boot order='1'/>
40
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
41
+ </disk>
42
+ <disk type='file' device='cdrom'>
43
+ <driver name='qemu' type='raw'/>
44
+ <target dev='sda' bus='sata'/>
45
+ <readonly/>
46
+ <boot order='2'/>
47
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
48
+ </disk>
49
+ <controller type='usb' index='0' model='qemu-xhci' ports='15'>
50
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
51
+ </controller>
52
+ <controller type='pci' index='0' model='pcie-root'/>
53
+ <controller type='pci' index='1' model='pcie-root-port'>
54
+ <model name='pcie-root-port'/>
55
+ <target chassis='1' port='0x10'/>
56
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
57
+ </controller>
58
+ <controller type='pci' index='2' model='pcie-root-port'>
59
+ <model name='pcie-root-port'/>
60
+ <target chassis='2' port='0x11'/>
61
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
62
+ </controller>
63
+ <controller type='pci' index='3' model='pcie-root-port'>
64
+ <model name='pcie-root-port'/>
65
+ <target chassis='3' port='0x12'/>
66
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
67
+ </controller>
68
+ <controller type='pci' index='4' model='pcie-root-port'>
69
+ <model name='pcie-root-port'/>
70
+ <target chassis='4' port='0x13'/>
71
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
72
+ </controller>
73
+ <controller type='pci' index='5' model='pcie-root-port'>
74
+ <model name='pcie-root-port'/>
75
+ <target chassis='5' port='0x14'/>
76
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
77
+ </controller>
78
+ <controller type='pci' index='6' model='pcie-root-port'>
79
+ <model name='pcie-root-port'/>
80
+ <target chassis='6' port='0x15'/>
81
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
82
+ </controller>
83
+ <controller type='pci' index='7' model='pcie-root-port'>
84
+ <model name='pcie-root-port'/>
85
+ <target chassis='7' port='0x16'/>
86
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
87
+ </controller>
88
+ <controller type='pci' index='8' model='pcie-root-port'>
89
+ <model name='pcie-root-port'/>
90
+ <target chassis='8' port='0x17'/>
91
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
92
+ </controller>
93
+ <controller type='pci' index='9' model='pcie-root-port'>
94
+ <model name='pcie-root-port'/>
95
+ <target chassis='9' port='0x18'/>
96
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
97
+ </controller>
98
+ <controller type='pci' index='10' model='pcie-root-port'>
99
+ <model name='pcie-root-port'/>
100
+ <target chassis='10' port='0x19'/>
101
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
102
+ </controller>
103
+ <controller type='pci' index='11' model='pcie-root-port'>
104
+ <model name='pcie-root-port'/>
105
+ <target chassis='11' port='0x1a'/>
106
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
107
+ </controller>
108
+ <controller type='pci' index='12' model='pcie-root-port'>
109
+ <model name='pcie-root-port'/>
110
+ <target chassis='12' port='0x1b'/>
111
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
112
+ </controller>
113
+ <controller type='pci' index='13' model='pcie-root-port'>
114
+ <model name='pcie-root-port'/>
115
+ <target chassis='13' port='0x1c'/>
116
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
117
+ </controller>
118
+ <controller type='pci' index='14' model='pcie-root-port'>
119
+ <model name='pcie-root-port'/>
120
+ <target chassis='14' port='0x1d'/>
121
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
122
+ </controller>
123
+ <controller type='sata' index='0'>
124
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
125
+ </controller>
126
+ <controller type='virtio-serial' index='0'>
127
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
128
+ </controller>
129
+ <interface type='network'>
130
+ <mac address='52:54:00:da:4d:84'/>
131
+ <source network='default'/>
132
+ <model type='virtio'/>
133
+ <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
134
+ </interface>
135
+ <serial type='pty'>
136
+ <target type='isa-serial' port='0'>
137
+ <model name='isa-serial'/>
138
+ </target>
139
+ </serial>
140
+ <console type='pty'>
141
+ <target type='serial' port='0'/>
142
+ </console>
143
+ <channel type='unix'>
144
+ <target type='virtio' name='org.qemu.guest_agent.0'/>
145
+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
146
+ </channel>
147
+ <channel type='spicevmc'>
148
+ <target type='virtio' name='com.redhat.spice.0'/>
149
+ <address type='virtio-serial' controller='0' bus='0' port='2'/>
150
+ </channel>
151
+ <input type='tablet' bus='usb'>
152
+ <address type='usb' bus='0' port='1'/>
153
+ </input>
154
+ <input type='mouse' bus='ps2'/>
155
+ <input type='keyboard' bus='ps2'/>
156
+ <graphics type='spice' autoport='yes' listen='0.0.0.0'>
157
+ <listen type='address' address='0.0.0.0'/>
158
+ <image compression='auto_glz'/>
159
+ <jpeg compression='auto'/>
160
+ <zlib compression='auto'/>
161
+ <playback compression='on'/>
162
+ <streaming mode='filter'/>
163
+ </graphics>
164
+ <audio id='1' type='spice'/>
165
+ <video>
166
+ <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
167
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
168
+ </video>
169
+ <redirdev bus='usb' type='spicevmc'>
170
+ <address type='usb' bus='0' port='2'/>
171
+ </redirdev>
172
+ <redirdev bus='usb' type='spicevmc'>
173
+ <address type='usb' bus='0' port='3'/>
174
+ </redirdev>
175
+ <watchdog model='itco' action='reset'/>
176
+ <memballoon model='virtio'>
177
+ <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
178
+ </memballoon>
179
+ <rng model='virtio'>
180
+ <backend model='random'>/dev/urandom</backend>
181
+ <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
182
+ </rng>
183
+ </devices>
184
+ </domain>
185
+
@@ -0,0 +1,218 @@
1
+ <domain type='kvm' id='6'>
2
+ <name>ubuntu-desktop-eph-80bf20</name>
3
+ <uuid>0c6c6072-aa2e-4da8-8a38-04dba7db26cd</uuid>
4
+ <description>ephemeral test clone of ubuntu-desktop (abstract_toolserver)</description>
5
+ <metadata xmlns:ns0="http://libosinfo.org/xmlns/libvirt/domain/1.0" xmlns:tsvm="https://toolserver.hugpy.ai/xmlns/vm-ephemeral/1">
6
+ <ns0:libosinfo>
7
+ <ns0:os id="http://ubuntu.com/ubuntu/22.04"/>
8
+ </ns0:libosinfo>
9
+ <tsvm:ephemeral>{"base": "ubuntu-desktop", "by": "abstract_toolserver", "created": 1791311281, "eph_dir": "/mnt/nvmes/2T_samsung_990/990_general/vms/images/ephemeral", "files": ["/mnt/nvmes/2T_samsung_990/990_general/vms/images/ephemeral/ubuntu-desktop-eph-80bf20__vda.qcow2"], "golden": ["/mnt/nvmes/2T_samsung_990/990_general/vms/images/ephemeral/bases/ubuntu-desktop__vda.qcow2"]}</tsvm:ephemeral>
10
+ </metadata>
11
+ <memory unit='KiB'>4194304</memory>
12
+ <currentMemory unit='KiB'>4194304</currentMemory>
13
+ <vcpu placement='static'>4</vcpu>
14
+ <resource>
15
+ <partition>/machine</partition>
16
+ </resource>
17
+ <os>
18
+ <type arch='x86_64' machine='pc-q35-noble'>hvm</type>
19
+ </os>
20
+ <features>
21
+ <acpi/>
22
+ <apic/>
23
+ <vmport state='off'/>
24
+ </features>
25
+ <cpu mode='host-passthrough' check='none' migratable='on'/>
26
+ <clock offset='utc'>
27
+ <timer name='rtc' tickpolicy='catchup'/>
28
+ <timer name='pit' tickpolicy='delay'/>
29
+ <timer name='hpet' present='no'/>
30
+ </clock>
31
+ <on_poweroff>destroy</on_poweroff>
32
+ <on_reboot>restart</on_reboot>
33
+ <on_crash>destroy</on_crash>
34
+ <pm>
35
+ <suspend-to-mem enabled='no'/>
36
+ <suspend-to-disk enabled='no'/>
37
+ </pm>
38
+ <devices>
39
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
40
+ <disk type='file' device='disk'>
41
+ <driver name='qemu' type='qcow2' discard='unmap'/>
42
+ <source file='/mnt/nvmes/2T_samsung_990/990_general/vms/images/ephemeral/ubuntu-desktop-eph-80bf20__vda.qcow2' index='1'/>
43
+ <backingStore type='file' index='2'>
44
+ <format type='qcow2'/>
45
+ <source file='/mnt/nvmes/2T_samsung_990/990_general/vms/images/ephemeral/bases/ubuntu-desktop__vda.qcow2'/>
46
+ <backingStore/>
47
+ </backingStore>
48
+ <target dev='vda' bus='virtio'/>
49
+ <boot order='1'/>
50
+ <alias name='virtio-disk0'/>
51
+ <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
52
+ </disk>
53
+ <controller type='usb' index='0' model='qemu-xhci' ports='15'>
54
+ <alias name='usb'/>
55
+ <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
56
+ </controller>
57
+ <controller type='pci' index='0' model='pcie-root'>
58
+ <alias name='pcie.0'/>
59
+ </controller>
60
+ <controller type='pci' index='1' model='pcie-root-port'>
61
+ <model name='pcie-root-port'/>
62
+ <target chassis='1' port='0x10'/>
63
+ <alias name='pci.1'/>
64
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
65
+ </controller>
66
+ <controller type='pci' index='2' model='pcie-root-port'>
67
+ <model name='pcie-root-port'/>
68
+ <target chassis='2' port='0x11'/>
69
+ <alias name='pci.2'/>
70
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
71
+ </controller>
72
+ <controller type='pci' index='3' model='pcie-root-port'>
73
+ <model name='pcie-root-port'/>
74
+ <target chassis='3' port='0x12'/>
75
+ <alias name='pci.3'/>
76
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
77
+ </controller>
78
+ <controller type='pci' index='4' model='pcie-root-port'>
79
+ <model name='pcie-root-port'/>
80
+ <target chassis='4' port='0x13'/>
81
+ <alias name='pci.4'/>
82
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
83
+ </controller>
84
+ <controller type='pci' index='5' model='pcie-root-port'>
85
+ <model name='pcie-root-port'/>
86
+ <target chassis='5' port='0x14'/>
87
+ <alias name='pci.5'/>
88
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
89
+ </controller>
90
+ <controller type='pci' index='6' model='pcie-root-port'>
91
+ <model name='pcie-root-port'/>
92
+ <target chassis='6' port='0x15'/>
93
+ <alias name='pci.6'/>
94
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
95
+ </controller>
96
+ <controller type='pci' index='7' model='pcie-root-port'>
97
+ <model name='pcie-root-port'/>
98
+ <target chassis='7' port='0x16'/>
99
+ <alias name='pci.7'/>
100
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
101
+ </controller>
102
+ <controller type='pci' index='8' model='pcie-root-port'>
103
+ <model name='pcie-root-port'/>
104
+ <target chassis='8' port='0x17'/>
105
+ <alias name='pci.8'/>
106
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
107
+ </controller>
108
+ <controller type='pci' index='9' model='pcie-root-port'>
109
+ <model name='pcie-root-port'/>
110
+ <target chassis='9' port='0x18'/>
111
+ <alias name='pci.9'/>
112
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
113
+ </controller>
114
+ <controller type='pci' index='10' model='pcie-root-port'>
115
+ <model name='pcie-root-port'/>
116
+ <target chassis='10' port='0x19'/>
117
+ <alias name='pci.10'/>
118
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
119
+ </controller>
120
+ <controller type='pci' index='11' model='pcie-root-port'>
121
+ <model name='pcie-root-port'/>
122
+ <target chassis='11' port='0x1a'/>
123
+ <alias name='pci.11'/>
124
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
125
+ </controller>
126
+ <controller type='pci' index='12' model='pcie-root-port'>
127
+ <model name='pcie-root-port'/>
128
+ <target chassis='12' port='0x1b'/>
129
+ <alias name='pci.12'/>
130
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
131
+ </controller>
132
+ <controller type='pci' index='13' model='pcie-root-port'>
133
+ <model name='pcie-root-port'/>
134
+ <target chassis='13' port='0x1c'/>
135
+ <alias name='pci.13'/>
136
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
137
+ </controller>
138
+ <controller type='pci' index='14' model='pcie-root-port'>
139
+ <model name='pcie-root-port'/>
140
+ <target chassis='14' port='0x1d'/>
141
+ <alias name='pci.14'/>
142
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
143
+ </controller>
144
+ <controller type='sata' index='0'>
145
+ <alias name='ide'/>
146
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
147
+ </controller>
148
+ <controller type='virtio-serial' index='0'>
149
+ <alias name='virtio-serial0'/>
150
+ <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
151
+ </controller>
152
+ <serial type='pty'>
153
+ <source path='/dev/pts/4'/>
154
+ <target type='isa-serial' port='0'>
155
+ <model name='isa-serial'/>
156
+ </target>
157
+ <alias name='serial0'/>
158
+ </serial>
159
+ <console type='pty' tty='/dev/pts/4'>
160
+ <source path='/dev/pts/4'/>
161
+ <target type='serial' port='0'/>
162
+ <alias name='serial0'/>
163
+ </console>
164
+ <channel type='unix'>
165
+ <source mode='bind' path='/run/libvirt/qemu/channel/6-ubuntu-desktop-eph-8/org.qemu.guest_agent.0'/>
166
+ <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
167
+ <alias name='channel0'/>
168
+ <address type='virtio-serial' controller='0' bus='0' port='1'/>
169
+ </channel>
170
+ <channel type='spicevmc'>
171
+ <target type='virtio' name='com.redhat.spice.0' state='connected'/>
172
+ <alias name='channel1'/>
173
+ <address type='virtio-serial' controller='0' bus='0' port='2'/>
174
+ </channel>
175
+ <input type='tablet' bus='usb'>
176
+ <alias name='input0'/>
177
+ <address type='usb' bus='0' port='1'/>
178
+ </input>
179
+ <input type='mouse' bus='ps2'>
180
+ <alias name='input1'/>
181
+ </input>
182
+ <input type='keyboard' bus='ps2'>
183
+ <alias name='input2'/>
184
+ </input>
185
+ <graphics type='spice' port='5903' autoport='yes' listen='127.0.0.1'>
186
+ <listen type='address' address='127.0.0.1'/>
187
+ </graphics>
188
+ <audio id='1' type='spice'/>
189
+ <video>
190
+ <model type='virtio' heads='1' primary='yes'>
191
+ <resolution x='1920' y='1080'/>
192
+ </model>
193
+ <alias name='video0'/>
194
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
195
+ </video>
196
+ <watchdog model='itco' action='reset'>
197
+ <alias name='watchdog0'/>
198
+ </watchdog>
199
+ <memballoon model='virtio'>
200
+ <alias name='balloon0'/>
201
+ <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
202
+ </memballoon>
203
+ <rng model='virtio'>
204
+ <backend model='random'>/dev/urandom</backend>
205
+ <alias name='rng0'/>
206
+ <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
207
+ </rng>
208
+ </devices>
209
+ <seclabel type='dynamic' model='apparmor' relabel='yes'>
210
+ <label>libvirt-0c6c6072-aa2e-4da8-8a38-04dba7db26cd</label>
211
+ <imagelabel>libvirt-0c6c6072-aa2e-4da8-8a38-04dba7db26cd</imagelabel>
212
+ </seclabel>
213
+ <seclabel type='dynamic' model='dac' relabel='yes'>
214
+ <label>+64055:+994</label>
215
+ <imagelabel>+64055:+994</imagelabel>
216
+ </seclabel>
217
+ </domain>
218
+
@@ -0,0 +1,155 @@
1
+ <domain xmlns:ns0="http://libosinfo.org/xmlns/libvirt/domain/1.0" type="kvm">
2
+ <name>hugpy-browser-lab</name>
3
+ <metadata>
4
+ <ns0:libosinfo>
5
+ <ns0:os id="http://ubuntu.com/ubuntu/22.04" />
6
+ </ns0:libosinfo>
7
+ </metadata>
8
+ <memory unit="KiB">4194304</memory>
9
+ <currentMemory unit="KiB">4194304</currentMemory>
10
+ <vcpu placement="static">4</vcpu>
11
+ <os>
12
+ <type arch="x86_64" machine="pc-q35-noble">hvm</type>
13
+ </os>
14
+ <features>
15
+ <acpi />
16
+ <apic />
17
+ <vmport state="off" />
18
+ </features>
19
+ <cpu mode="host-passthrough" check="none" migratable="on" />
20
+ <clock offset="utc">
21
+ <timer name="rtc" tickpolicy="catchup" />
22
+ <timer name="pit" tickpolicy="delay" />
23
+ <timer name="hpet" present="no" />
24
+ </clock>
25
+ <on_poweroff>destroy</on_poweroff>
26
+ <on_reboot>restart</on_reboot>
27
+ <on_crash>destroy</on_crash>
28
+ <pm>
29
+ <suspend-to-mem enabled="no" />
30
+ <suspend-to-disk enabled="no" />
31
+ </pm>
32
+ <devices>
33
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
34
+ <disk type="file" device="disk">
35
+ <driver name="qemu" type="qcow2" discard="unmap" />
36
+ <source file="/mnt/nvmes/2T_samsung_990/990_general/vms/images/hugpy-browser-lab.qcow2" />
37
+ <target dev="vda" bus="virtio" />
38
+ <boot order="1" />
39
+ <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0" />
40
+ </disk>
41
+ <controller type="usb" index="0" model="qemu-xhci" ports="15">
42
+ <address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0" />
43
+ </controller>
44
+ <controller type="pci" index="0" model="pcie-root" />
45
+ <controller type="pci" index="1" model="pcie-root-port">
46
+ <model name="pcie-root-port" />
47
+ <target chassis="1" port="0x10" />
48
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on" />
49
+ </controller>
50
+ <controller type="pci" index="2" model="pcie-root-port">
51
+ <model name="pcie-root-port" />
52
+ <target chassis="2" port="0x11" />
53
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x1" />
54
+ </controller>
55
+ <controller type="pci" index="3" model="pcie-root-port">
56
+ <model name="pcie-root-port" />
57
+ <target chassis="3" port="0x12" />
58
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x2" />
59
+ </controller>
60
+ <controller type="pci" index="4" model="pcie-root-port">
61
+ <model name="pcie-root-port" />
62
+ <target chassis="4" port="0x13" />
63
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x3" />
64
+ </controller>
65
+ <controller type="pci" index="5" model="pcie-root-port">
66
+ <model name="pcie-root-port" />
67
+ <target chassis="5" port="0x14" />
68
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4" />
69
+ </controller>
70
+ <controller type="pci" index="6" model="pcie-root-port">
71
+ <model name="pcie-root-port" />
72
+ <target chassis="6" port="0x15" />
73
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x5" />
74
+ </controller>
75
+ <controller type="pci" index="7" model="pcie-root-port">
76
+ <model name="pcie-root-port" />
77
+ <target chassis="7" port="0x16" />
78
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x6" />
79
+ </controller>
80
+ <controller type="pci" index="8" model="pcie-root-port">
81
+ <model name="pcie-root-port" />
82
+ <target chassis="8" port="0x17" />
83
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x7" />
84
+ </controller>
85
+ <controller type="pci" index="9" model="pcie-root-port">
86
+ <model name="pcie-root-port" />
87
+ <target chassis="9" port="0x18" />
88
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0" multifunction="on" />
89
+ </controller>
90
+ <controller type="pci" index="10" model="pcie-root-port">
91
+ <model name="pcie-root-port" />
92
+ <target chassis="10" port="0x19" />
93
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x1" />
94
+ </controller>
95
+ <controller type="pci" index="11" model="pcie-root-port">
96
+ <model name="pcie-root-port" />
97
+ <target chassis="11" port="0x1a" />
98
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x2" />
99
+ </controller>
100
+ <controller type="pci" index="12" model="pcie-root-port">
101
+ <model name="pcie-root-port" />
102
+ <target chassis="12" port="0x1b" />
103
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x3" />
104
+ </controller>
105
+ <controller type="pci" index="13" model="pcie-root-port">
106
+ <model name="pcie-root-port" />
107
+ <target chassis="13" port="0x1c" />
108
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x4" />
109
+ </controller>
110
+ <controller type="pci" index="14" model="pcie-root-port">
111
+ <model name="pcie-root-port" />
112
+ <target chassis="14" port="0x1d" />
113
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x5" />
114
+ </controller>
115
+ <controller type="sata" index="0">
116
+ <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2" />
117
+ </controller>
118
+ <controller type="virtio-serial" index="0">
119
+ <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0" />
120
+ </controller>
121
+ <serial type="pty">
122
+ <target type="isa-serial" port="0">
123
+ <model name="isa-serial" />
124
+ </target>
125
+ </serial>
126
+ <console type="pty">
127
+ <target type="serial" port="0" />
128
+ </console>
129
+ <channel type="unix">
130
+ <target type="virtio" name="org.qemu.guest_agent.0" />
131
+ <address type="virtio-serial" controller="0" bus="0" port="1" />
132
+ </channel>
133
+ <channel type="spicevmc">
134
+ <target type="virtio" name="com.redhat.spice.0" />
135
+ <address type="virtio-serial" controller="0" bus="0" port="2" />
136
+ </channel>
137
+ <input type="tablet" bus="usb">
138
+ <address type="usb" bus="0" port="1" />
139
+ </input>
140
+ <input type="mouse" bus="ps2" />
141
+ <input type="keyboard" bus="ps2" />
142
+ <audio id="1" type="spice" />
143
+ <video>
144
+ <model heads="1" primary="yes" type="virtio"><resolution x="1920" y="1080" /></model>
145
+ </video>
146
+ <watchdog model="itco" action="reset" />
147
+ <memballoon model="virtio">
148
+ <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0" />
149
+ </memballoon>
150
+ <rng model="virtio">
151
+ <backend model="random">/dev/urandom</backend>
152
+ <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0" />
153
+ </rng>
154
+ <graphics type="spice" autoport="yes" listen="127.0.0.1"><listen type="address" address="127.0.0.1" /></graphics></devices>
155
+ <description>hugpy-browser lab image (abstract_toolserver browser_* tests): Ubuntu 24.04 GNOME, Firefox with a fresh profile and fixed policies, home page = precision test page, no network card. Never driven directly: tests boot disposable clones of it (browser_lab / vm_clone_ephemeral). Prepared 2026-10-06 from ubuntu-desktop. Guide: toolserver instructions/hugpy/hugpy-browser</description></domain>