browsergym-workarena 0.1.0rc7__py3-none-any.whl → 0.2.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 (32) hide show
  1. browsergym/workarena/__init__.py +3 -2
  2. browsergym/workarena/api/ui_themes.py +35 -0
  3. browsergym/workarena/api/user.py +153 -0
  4. browsergym/workarena/api/utils.py +1 -1
  5. browsergym/workarena/config.py +43 -1
  6. browsergym/workarena/data_files/setup_files/ui_themes/workarena_themes.xml +2313 -0
  7. browsergym/workarena/data_files/task_configs/dashboard_retrieval_minmax_task.json +1 -0
  8. browsergym/workarena/data_files/task_configs/dashboard_retrieval_value_task.json +1 -0
  9. browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json +1 -0
  10. browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json +1 -0
  11. browsergym/workarena/install.py +620 -155
  12. browsergym/workarena/tasks/base.py +85 -26
  13. browsergym/workarena/tasks/dashboard.py +620 -0
  14. browsergym/workarena/tasks/form.py +121 -85
  15. browsergym/workarena/tasks/knowledge.py +30 -14
  16. browsergym/workarena/tasks/list.py +121 -67
  17. browsergym/workarena/tasks/navigation.py +18 -16
  18. browsergym/workarena/tasks/scripts/generate_dashboard_configs.py +272 -0
  19. browsergym/workarena/tasks/scripts/generate_forms.py +2 -2
  20. browsergym/workarena/tasks/scripts/list.py +2 -2
  21. browsergym/workarena/tasks/scripts/validate.py +2 -2
  22. browsergym/workarena/tasks/service_catalog.py +106 -74
  23. browsergym/workarena/tasks/utils/form.py +5 -3
  24. browsergym/workarena/tasks/utils/js_utils.js +123 -2
  25. browsergym/workarena/tasks/utils/string.py +15 -0
  26. browsergym/workarena/tasks/utils/utils.py +20 -0
  27. browsergym/workarena/utils.py +31 -2
  28. {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/METADATA +7 -3
  29. {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/RECORD +32 -21
  30. {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/WHEEL +1 -1
  31. {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/entry_points.txt +0 -0
  32. {browsergym_workarena-0.1.0rc7.dist-info → browsergym_workarena-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -3,6 +3,39 @@ Javascript utility functions for tasks
3
3
 
4
4
  */
5
5
 
6
+
7
+ /*
8
+ * Function to find an element in multiple nested shadow DOMs
9
+ *
10
+ * @param {string} selector - query selector to find the element
11
+ * @param {HTMLElement} root - root element to start the search
12
+ *
13
+ * @returns {HTMLElement} - element with the given id or null if not found
14
+ */
15
+ function findElementInShadowDOM(selector, root = document) {
16
+ // Check if current root has the element
17
+ const element = root.querySelector(selector);
18
+ if (element) {
19
+ return element;
20
+ }
21
+
22
+ // If not found, search in the shadow DOM of each node
23
+ const shadowRoots = Array.from(root.querySelectorAll('*'))
24
+ .map(el => el.shadowRoot)
25
+ .filter(sr => sr !== null);
26
+
27
+ for (const shadowRoot of shadowRoots) {
28
+ const foundElement = findElementInShadowDOM(selector, shadowRoot);
29
+ if (foundElement) {
30
+ return foundElement;
31
+ }
32
+ }
33
+
34
+ // Return null if the element is not found in any shadow root
35
+ return null;
36
+ }
37
+
38
+
6
39
  /**
7
40
  * Function that registers to the gsft_main afterload event and sets a flag when it is loaded
8
41
  */
@@ -24,6 +57,7 @@ function registerGsftMainLoaded(){
24
57
  }
25
58
  }
26
59
 
60
+
27
61
  /**
28
62
  * Function to wait for a condition to be met (asynchronous)
29
63
  * use as: waitForCondition(condition, 100).then(function)
@@ -42,15 +76,102 @@ function waitForCondition(condition, pollInterval=100) {
42
76
  });
43
77
  }
44
78
 
79
+
45
80
  /**
46
81
  * WorkArena Logger
47
82
  *
48
83
  * @param {string} msg - message to log
84
+ * @param {string} callerName - name of the function that called the logger
49
85
  * @param {string} level - log level (info, warn, error)
50
86
  */
51
- function waLog(msg, level) {
87
+ function waLog(msg, callerName, level) {
52
88
  if (level === undefined) {
53
89
  level = 'info';
54
90
  }
55
- console[level]('WorkArena: ' + msg);
91
+ // Get current time
92
+ const now = new Date();
93
+ const timeString = now.toTimeString().split(' ')[0]; // Format as "HH:MM:SS"
94
+
95
+ // Get the current frame's id (if it's top level, replace by "top")
96
+ let frameId = window.frameElement?.id;
97
+ if (frameId === undefined) {
98
+ frameId = 'top';
99
+ }
100
+
101
+
102
+ if (callerName != undefined) {
103
+ console[level](`WorkArena - ${callerName} - ${frameId}: [${timeString}] ${msg}`);
104
+ } else {
105
+ console[level](`WorkArena - ${frameId}: [${timeString}] ${msg}`);
106
+ }
107
+ }
108
+
109
+
110
+ /**
111
+ * Protects the execution of a function by URL
112
+ *
113
+ * @param {function} func - function to protect
114
+ * @param {string} url - url to check
115
+ *
116
+ * @returns {function} - protected function (returns null if URL is not valid)
117
+ */
118
+ async function protectExecutionByURL(func, url) {
119
+ // Get the name of func
120
+ const funcName = func.name;
121
+
122
+ // Wait until the window has finished navigating
123
+ await waitForCondition(() => window.location.href !== 'about:blank', 100);
124
+
125
+ // Decode URL components in the current window location and the url argument
126
+ const decodedCurrentUrl = decodeURIComponent(window.location.href);
127
+ const decodedExpectedUrl = decodeURIComponent(url);
128
+
129
+ if (decodedCurrentUrl.includes(decodedExpectedUrl)) {
130
+ waLog(`URL is valid. Proceeding...`, funcName, 'info');
131
+ return func;
132
+ } else {
133
+ return null;
134
+ }
135
+ }
136
+
137
+
138
+ /**
139
+ * Run a function only in the gsft_main iframe
140
+ *
141
+ * @param {function} func - function to protect
142
+ */
143
+ function runOnlyInGsftMain(func){
144
+ // Get the name of func
145
+ const funcName = func.name;
146
+
147
+ if (window.frameElement?.id === 'gsft_main'){
148
+ waLog(`gsft_main detected. Proceeding...`, funcName, 'info');
149
+
150
+ // Wait for the iframe to be fully loaded
151
+ waitForCondition(() => window.WORKARENA_LOAD_COMPLETE === true, 100)
152
+ .then(
153
+ function(){
154
+ waLog(`gsft_main has finished loading. Proceeding...`, funcName, 'info');
155
+ func();
156
+ }
157
+ );
158
+ }
159
+ }
160
+
161
+
162
+ /**
163
+ * Function to run a function in gsft_main only if the URL matches
164
+ *
165
+ * @param {function} func - function to protect
166
+ * @param {string} url - url to check
167
+ */
168
+ async function runInGsftMainOnlyAndProtectByURL(func, url){
169
+ // Protect the function by URL
170
+ const protectedFunc = await protectExecutionByURL(func, url);
171
+ if (protectedFunc === null) {
172
+ return;
173
+ }
174
+
175
+ // Run the protected function in gsft_main
176
+ runOnlyInGsftMain(protectedFunc);
56
177
  }
@@ -0,0 +1,15 @@
1
+ """
2
+ Various utility functions for string manipulation.
3
+
4
+ """
5
+
6
+
7
+ def generate_trigrams(word):
8
+ return [word[i : i + 3] for i in range(len(word) - 2)]
9
+
10
+
11
+ def share_tri_gram(str1, str2):
12
+ tri_grams1 = set(generate_trigrams(str1))
13
+ tri_grams2 = set(generate_trigrams(str2))
14
+
15
+ return bool(tri_grams1.intersection(tri_grams2))
@@ -0,0 +1,20 @@
1
+ import logging
2
+ import playwright.sync_api
3
+
4
+ from urllib import parse
5
+
6
+
7
+ def check_url_suffix_match(page: playwright.sync_api.Page, expected_url: str, task) -> bool:
8
+ """
9
+ Check if the current page URL matches the expected URL
10
+ """
11
+ expected_url = parse.unquote(expected_url)
12
+ expected_url_suffix = parse.urlparse(expected_url).path
13
+
14
+ page_url = page.evaluate("window.location.href")
15
+ page_url = parse.unquote(page_url)
16
+ page_suffix = parse.urlparse(page_url).path
17
+ if expected_url_suffix not in page_suffix:
18
+ logging.debug(f"Not in the expected URL for {task.__class__.__name__}, but in {page.url}")
19
+ return False
20
+ return True
@@ -26,7 +26,7 @@ def impersonate_user(username: str, page: playwright.sync_api.Page):
26
26
  * If you provide a username that matches to multiple users (e.g., a partial one), the first one will be selected
27
27
 
28
28
  """
29
- page.get_by_label("Avatar: available, user preferences").click()
29
+ page.locator(".header-avatar-button").click()
30
30
  page.get_by_role("menuitem", name="Impersonate user").click()
31
31
  page.locator("input.now-typeahead-native-input").click()
32
32
  page.locator("input.now-typeahead-native-input").fill(username)
@@ -67,4 +67,33 @@ def ui_login(instance: SNowInstance, page: playwright.sync_api.Page):
67
67
  # Check if we have been returned to the login page (appends /welcome.do)
68
68
  current_url = parse.urlparse(parse.unquote(page.evaluate("() => window.location.href")))
69
69
  if current_url.path.endswith("/welcome.do"):
70
- raise RuntimeError("Login failed.")
70
+ raise RuntimeError("Login failed. Check credentials.")
71
+
72
+
73
+ def url_login(instance: SNowInstance, page: playwright.sync_api.Page):
74
+ """
75
+ Log into the instance via the URL
76
+
77
+ Parameters:
78
+ -----------
79
+ instance:
80
+ The instance to log into
81
+ page:
82
+ The page instance to use for the URL login
83
+
84
+ """
85
+ (snow_username, snow_password) = instance.snow_credentials
86
+
87
+ # Encode special characters
88
+ snow_username = parse.quote(snow_username)
89
+ snow_password = parse.quote(snow_password)
90
+
91
+ # Log in via URL
92
+ page.goto(
93
+ f"{instance.snow_url}/login.do?user_name={snow_username}&user_password={snow_password}&sys_action=sysverb_login"
94
+ )
95
+
96
+ # Check if we have been returned to the login page
97
+ current_url = parse.urlparse(parse.unquote(page.evaluate("() => window.location.href")))
98
+ if "login.do" in current_url.path:
99
+ raise RuntimeError("Login failed. Check credentials and make sure to have run installer.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: browsergym-workarena
3
- Version: 0.1.0rc7
3
+ Version: 0.2.0
4
4
  Summary: WorkArena benchmark for BrowserGym
5
5
  Project-URL: homepage, https://github.com/ServiceNow/WorkArena
6
6
  Author: Léo Boisvert, Alex Drouin, Maxime Gasse, Alex Lacoste, Manuel Del Verme
@@ -13,11 +13,13 @@ Classifier: Operating System :: OS Independent
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
15
15
  Requires-Python: >3.7
16
- Requires-Dist: browsergym-core==0.1.0rc7
16
+ Requires-Dist: browsergym-core==0.2.0
17
17
  Requires-Dist: english-words>=2.0.1
18
+ Requires-Dist: faker>=24.11.0
18
19
  Requires-Dist: numpy>=1.14
19
20
  Requires-Dist: requests>=2.31
20
21
  Requires-Dist: tenacity>=8.2.3
22
+ Requires-Dist: tqdm>=4.66.2
21
23
  Description-Content-Type: text/markdown
22
24
 
23
25
  # WorkArena: How Capable are Web Agents at Solving Common Knowledge Work Tasks?
@@ -32,10 +34,12 @@ WorkArena is included in [BrowserGym](https://github.com/ServiceNow/BrowserGym),
32
34
 
33
35
  https://github.com/ServiceNow/WorkArena/assets/2374980/68640f09-7d6f-4eb1-b556-c294a6afef70
34
36
 
37
+ ## ⚠️ Pre-Release warning ⚠️
38
+ Please note that the WorkArena benchmark is still undergoing minor bug fixes and updates, which may cause discrepancies with results reported in our latest arXiv preprint. We plan to release soon a stable version of WorkArena v0.1.0 with enhanced stability, and a final version v1.0.0 with a new suite of tasks.
35
39
 
36
40
  ## Benchmark Contents
37
41
 
38
- At the moment, WorkArena includes `23,150` task instances drawn from `29` tasks that cover the main components of the ServiceNow user interface. The following videos show an agent built on `GPT-4-vision` interacting with every such component. As emphasized by our results, this benchmark is not solved and thus, the performance of the agent is not always on point.
42
+ At the moment, WorkArena includes `18,050` task instances drawn from `29` tasks that cover the main components of the ServiceNow user interface. The following videos show an agent built on `GPT-4-vision` interacting with every such component. As emphasized by our results, this benchmark is not solved and thus, the performance of the agent is not always on point.
39
43
 
40
44
  ### Knowledge Bases
41
45
 
@@ -1,11 +1,13 @@
1
- browsergym/workarena/__init__.py,sha256=l39ZSmrUH4_q5Qt8ARy13BJRzEbqpabL8FDkNV5Ndp0,701
2
- browsergym/workarena/config.py,sha256=WqgapFIC_48dqmprtTxFoMDGY79FAqvUy1hpRQ1GPoA,6571
3
- browsergym/workarena/install.py,sha256=OiBfJfxc2dA2ONPTtdrhnrPdTiChiNHxcx0KOvtPtZU,21373
1
+ browsergym/workarena/__init__.py,sha256=ac2VfSMZfn8LMCsWaoEA61pFM8yG6oFUzUbR4ZXfHVI,699
2
+ browsergym/workarena/config.py,sha256=Jl9Ht_98Qs8KlEC-HVGrV1Cy12PyrOfRgJsSlGtc9Jk,7761
3
+ browsergym/workarena/install.py,sha256=HO_f1Ba2_3A4sSjj-SwMTs7iS-QUHFAkN05pn65Js-k,36358
4
4
  browsergym/workarena/instance.py,sha256=Qw4lzHhgnl8IuiWOelsmzCJce3jXYivYYwtfTPt2H-s,4314
5
- browsergym/workarena/utils.py,sha256=UXV-loPmwFCGF8E874QcyACmVS4BBHpPrW6BofKMADY,2289
5
+ browsergym/workarena/utils.py,sha256=mD6RqVua-m1-mKM1RGGlUEu1s6un0ZI9a5ZTPN7g1hY,3199
6
6
  browsergym/workarena/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  browsergym/workarena/api/requests.py,sha256=z2vQTTkm1HR04_d_pce6jopuN--Oh0gUaT-YhrVa9-8,4148
8
- browsergym/workarena/api/utils.py,sha256=0S6-yWg8mIk-2zT2fvP_Xakvwz9sKGuNFTSAUoNVDTI,3307
8
+ browsergym/workarena/api/ui_themes.py,sha256=9H8HhnqHWt0CA5X5E1sokkXSCYYxtWZvhNFcXn3e90s,836
9
+ browsergym/workarena/api/user.py,sha256=M5QG8jspcHLcvFQ4UdTAGfyKdEFKTCeeMMgfZxImpXA,4627
10
+ browsergym/workarena/api/utils.py,sha256=EPuB6smMsl280x-uAdnyZFPhrgyCSgFHPyx4O2TysJc,3315
9
11
  browsergym/workarena/data_files/setup_files/forms/expected_change_request_form_fields.json,sha256=UOf2NohzOZrjjkTLGMTluYHlIlDvMZY0pQRoJxJ3v6M,494
10
12
  browsergym/workarena/data_files/setup_files/forms/expected_hardware_form_fields.json,sha256=Bl8_P8T3UXs0xTcyucvinFPHMq21OowsJQm_y-eunuY,768
11
13
  browsergym/workarena/data_files/setup_files/forms/expected_incident_form_fields.json,sha256=wg-5FGeslZF9zFMlt2Yl-HqkhuZEyb8hWJqX8GY1qxg,466
@@ -19,12 +21,15 @@ browsergym/workarena/data_files/setup_files/lists/expected_hardware_list_columns
19
21
  browsergym/workarena/data_files/setup_files/lists/expected_incident_list_columns.json,sha256=DJAG4sf6bEeq9oQkbbzZkDL7un29Q-6wuMhhd8Cy244,500
20
22
  browsergym/workarena/data_files/setup_files/lists/expected_service_catalog_list_columns.json,sha256=sncClj2ekwQr3WQSwBX18N2Dd4TvUlhWQrne0vtEgAA,538
21
23
  browsergym/workarena/data_files/setup_files/lists/expected_user_list_columns.json,sha256=L4yWNhOczhgC4gKOikrRgX2p2jFxaJ5XSsMM20zwjV4,1068
24
+ browsergym/workarena/data_files/setup_files/ui_themes/workarena_themes.xml,sha256=P0Tqm9TnmHTrgu2FBh-vWPviOHQa_ZkG2Z9-4iwPENY,1970309
22
25
  browsergym/workarena/data_files/task_configs/all_menu.json,sha256=LRSnt05rFL4uE5f25f9Zj8RkrLKsBvZtrrwGdZ0a53E,270388
23
26
  browsergym/workarena/data_files/task_configs/create_change_request_task.json,sha256=LMxS2YiG8_eH0fhXBis1fyAXE_XYZPwMmMuD2QuzdDY,6306733
24
27
  browsergym/workarena/data_files/task_configs/create_hardware_asset_task.json,sha256=koP4OC3ot1ic8ybjCp1fev8X0JxIy_giZ7CyLPdE4qI,4971385
25
28
  browsergym/workarena/data_files/task_configs/create_incident_task.json,sha256=BRaM61NMsOs9lrw5n1oT1GsYll0-8HpxYmi-Ry-PpBU,5812616
26
29
  browsergym/workarena/data_files/task_configs/create_problem_task.json,sha256=LhEDjkDFhKevNwREOV-j69C3PQbpsu_Plt2wGTKxwUQ,4994349
27
30
  browsergym/workarena/data_files/task_configs/create_user_task.json,sha256=UQornONckg3oTi2mToTq-uziP0ZO48Xoj5xvHXHkEp8,3981025
31
+ browsergym/workarena/data_files/task_configs/dashboard_retrieval_minmax_task.json,sha256=IsPmpZBurHMWPxMzwvURkb1qIT2HD61ACHvd4AslK5A,15733
32
+ browsergym/workarena/data_files/task_configs/dashboard_retrieval_value_task.json,sha256=aC4HPOBUN988pkMLKrzNOWUIdH7OsUym8ZBtynDhn0M,114629
28
33
  browsergym/workarena/data_files/task_configs/filter_asset_list_task.json,sha256=APTgs-p5CkBVmWO-EQ2O7Cpt9nvaqvQT5fztzWoE8dA,11882372
29
34
  browsergym/workarena/data_files/task_configs/filter_change_request_list_task.json,sha256=kL7xiQxSfXZgwEZhrnj_oMV_W0wBLo3QVwb3dHUkv7k,12812288
30
35
  browsergym/workarena/data_files/task_configs/filter_hardware_list_task.json,sha256=9e5vxd2uQNTjOCXGSRg2PfZAsc5aGR52jt3m1kbiLdQ,12785357
@@ -42,6 +47,8 @@ browsergym/workarena/data_files/task_configs/order_ipad_pro_task.json,sha256=gR5
42
47
  browsergym/workarena/data_files/task_configs/order_loaner_laptop_task.json,sha256=g_BDRnvn5wm7rRcISdmT197-4MDe2QfsWmY5FnCG7Tc,183107
43
48
  browsergym/workarena/data_files/task_configs/order_sales_laptop_task.json,sha256=6IGZg5NE2pjrUeDyOajk3Z2F4TCjqBRLS9VPh7lEu5Q,707828
44
49
  browsergym/workarena/data_files/task_configs/order_standard_laptop_task.json,sha256=qSh8lM13RgQyaKAzNIwAM0B84iZvSOgY1FQEAGeawaA,516203
50
+ browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json,sha256=xwTbhk33LfXyxbIhBgGtYXa1xE1RCegzYB6uMP6Sm8A,112107
51
+ browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json,sha256=3tTjz30MZGzrP5C1RtS7m58-OZVEbLR62iWiZjIbbNk,324394
45
52
  browsergym/workarena/data_files/task_configs/sort_asset_list_task.json,sha256=CxGupg15OFAT8z0ddieTJnIOQ1xHqCJJkqPgZI1sJNA,44721
46
53
  browsergym/workarena/data_files/task_configs/sort_change_request_list_task.json,sha256=dmYPzs86MGzD-j_h8bEiynH9LWdfm12a2Z5PkSJ7-dc,45862
47
54
  browsergym/workarena/data_files/task_configs/sort_hardware_list_task.json,sha256=iE5RmskNfiw-6CajMgmB75oxyJ8qu5JIjJugHf1NNPQ,45127
@@ -49,26 +56,30 @@ browsergym/workarena/data_files/task_configs/sort_incident_list_task.json,sha256
49
56
  browsergym/workarena/data_files/task_configs/sort_service_catalog_item_list_task.json,sha256=c0tNR4c7nrOw922VER8vpG6KNuv62399bJBJ4rJcgC0,46700
50
57
  browsergym/workarena/data_files/task_configs/sort_user_list_task.json,sha256=qcSQEtSjg0Fu4SeBMjjMukD7ndKkYFdiX4DBRDftqbU,44336
51
58
  browsergym/workarena/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- browsergym/workarena/tasks/base.py,sha256=O0IDwvSIRrHUvFRzIsr0Yl9ph59IacpC52O_xlFmjTU,3419
53
- browsergym/workarena/tasks/form.py,sha256=eRm0j5inqHJzjDmeGxqCTDKK_spxEAKfyqtmrS_xx9k,30599
54
- browsergym/workarena/tasks/knowledge.py,sha256=lVs058sceJS_DkoBw3lRymmy5rTjLH38Fr7BqaGZikI,5771
55
- browsergym/workarena/tasks/list.py,sha256=59nkZzEtPvOQ7cXjNJLCvy5P9C-ZBZYnazMhSnjXq_0,37108
56
- browsergym/workarena/tasks/navigation.py,sha256=5n6wIXxF-vZK5OXl-runw6tFdBeH6JdvnBO5dtEJrbw,7384
57
- browsergym/workarena/tasks/service_catalog.py,sha256=36XsIsKX5OowEJQySoI8-pIuSC34rge8bnkvKS_vU5I,21661
59
+ browsergym/workarena/tasks/base.py,sha256=YJKPlF1799LkZRv1cefAA9JCZZaPuaHLDTsWC7EZitw,5102
60
+ browsergym/workarena/tasks/dashboard.py,sha256=TYGsLdvkBqpv38pHRcLJH8itagz4nvjEjdNcp_wGJG0,25240
61
+ browsergym/workarena/tasks/form.py,sha256=uzpQX1QylJxj48Qb4Bgdt_uTfnwrTFTNK25bnjN0kfM,32095
62
+ browsergym/workarena/tasks/knowledge.py,sha256=DxqfoMrSZXd-_aIAQgUWLtnz9Aff939rfJhDTLISGeo,6358
63
+ browsergym/workarena/tasks/list.py,sha256=6vV13STpxShfY9SO5QUBDo_heEH5Uqe8BNSbhlfQUhk,37779
64
+ browsergym/workarena/tasks/navigation.py,sha256=8ZotJH6MfRrh_NCnzoRPlrdGXBfvz3zNatj7tJkyI3U,7399
65
+ browsergym/workarena/tasks/service_catalog.py,sha256=LDiM3rOyhmDdTBYu9BrmljW4bxprnXF_ZOscg3aDwqQ,22964
58
66
  browsergym/workarena/tasks/scripts/README.md,sha256=-jOtGf9k2zoBhrBkesmfDnr9-s0PhOEi0KWI9xfOw1s,296
59
67
  browsergym/workarena/tasks/scripts/extract_all_menu_items.py,sha256=U-GNI_cCYA2Jggtx22MQVEOKcojnYxEC2_YBBd-GCAw,9870
60
- browsergym/workarena/tasks/scripts/generate_forms.py,sha256=AG1-SDZDX8iEGT0Lq2Xhl5iYTPnQqUDfaGXUtP7ULrg,3697
68
+ browsergym/workarena/tasks/scripts/generate_dashboard_configs.py,sha256=nqIhegcW6X_mwlj3GRj-jRn7cb5m-TXyYJ_HuJNT-IU,9915
69
+ browsergym/workarena/tasks/scripts/generate_forms.py,sha256=wnqXE1b5eQdwQB0ZqsqQS5z9VNKyObUnYoYVvsq4sM0,3695
61
70
  browsergym/workarena/tasks/scripts/knowledge.py,sha256=Qrv3AY9i6vjXhitDFITGjNjMvOL6H7FLKCJR8hA6Qdo,1259
62
- browsergym/workarena/tasks/scripts/list.py,sha256=pKo3x8DEZukb9xc49qSgdYbAlQHIOLLWYccQ1Ygp2Ao,4805
71
+ browsergym/workarena/tasks/scripts/list.py,sha256=Cy9pvUHqKRwSH5yWT746ZW9TMGZC9qrBzvPKZDGWYTM,4803
63
72
  browsergym/workarena/tasks/scripts/navigation.py,sha256=2GIIGoW6Ad2YpwX99_MTuLoijSk-EgsjfRNiRaYaitE,853
64
73
  browsergym/workarena/tasks/scripts/service_catalog.py,sha256=LrNSScDQOxXNdYdMG4j14idw0D7FUbFM1Dn0ESUbJi0,4862
65
- browsergym/workarena/tasks/scripts/validate.py,sha256=CNC63sGdk0smHl2SloqeSO4Xy1nTDXzLnPoUak_YWoU,7521
74
+ browsergym/workarena/tasks/scripts/validate.py,sha256=cBzZ4EEbz2JqQFhmonxODV873S_6u6ZF-_jb99D9g0c,7521
66
75
  browsergym/workarena/tasks/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
76
  browsergym/workarena/tasks/utils/debug.py,sha256=EEy7Rt2ETwkorPm0s6y_u0wutl5rDp_PVuM7BvnsbIA,670
68
- browsergym/workarena/tasks/utils/form.py,sha256=EMi_L6WBvIX9loczyVMGqBbYcb34r3zwVphr2KPh69M,2487
69
- browsergym/workarena/tasks/utils/js_utils.js,sha256=DTU9oiO1IC-8sAb_CY5KwVWx9jrjdmP8aAEMZZEww_k,1642
70
- browsergym_workarena-0.1.0rc7.dist-info/METADATA,sha256=oCk7FAnCjbAMoTG7s6KTQZl4NFjrE2xlIYh09msUDF4,7240
71
- browsergym_workarena-0.1.0rc7.dist-info/WHEEL,sha256=uNdcs2TADwSd5pVaP0Z_kcjcvvTUklh2S7bxZMF8Uj0,87
72
- browsergym_workarena-0.1.0rc7.dist-info/entry_points.txt,sha256=rjnc1GaWB89r1PO0P_Uwriv-iVzWMhRM7EqUtXluDPs,72
73
- browsergym_workarena-0.1.0rc7.dist-info/licenses/LICENSE,sha256=sZLFiZHo_1hcxXRhXUDnQYVATUuWwRCdQjBxqxNnNEs,579
74
- browsergym_workarena-0.1.0rc7.dist-info/RECORD,,
77
+ browsergym/workarena/tasks/utils/form.py,sha256=egWzXH9A5eDmu08VSD1npNG32sttOc59TQVz1_w1MXU,2519
78
+ browsergym/workarena/tasks/utils/js_utils.js,sha256=n97fmY2Jkr59rEcQSuSbCnn1L2ZNwM3Nrg-p4TAkdUU,5199
79
+ browsergym/workarena/tasks/utils/string.py,sha256=ir5_ASD9QSFMZ9kuHo2snSXRuSfv_wROH6nxBLOTP4I,330
80
+ browsergym/workarena/tasks/utils/utils.py,sha256=kgpok2LHFaLprgiH0AIan4-Iy492EqpGQnBuzyFdrGg,669
81
+ browsergym_workarena-0.2.0.dist-info/METADATA,sha256=hQaI0hD4UAh5xVWSjFHwX-I6brXsw2UmccXH7_8OwHc,7641
82
+ browsergym_workarena-0.2.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
83
+ browsergym_workarena-0.2.0.dist-info/entry_points.txt,sha256=rjnc1GaWB89r1PO0P_Uwriv-iVzWMhRM7EqUtXluDPs,72
84
+ browsergym_workarena-0.2.0.dist-info/licenses/LICENSE,sha256=sZLFiZHo_1hcxXRhXUDnQYVATUuWwRCdQjBxqxNnNEs,579
85
+ browsergym_workarena-0.2.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.22.4
2
+ Generator: hatchling 1.24.2
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any