pluginbench 0.5.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.
- pluginbench/__init__.py +3 -0
- pluginbench/__main__.py +3 -0
- pluginbench/assessment-charts.html +790 -0
- pluginbench/assessment.py +316 -0
- pluginbench/assessment_charts.py +1225 -0
- pluginbench/assessment_metrics.py +1956 -0
- pluginbench/assessment_models.py +127 -0
- pluginbench/baselines.py +792 -0
- pluginbench/claude.py +374 -0
- pluginbench/cli.py +672 -0
- pluginbench/code_diff.py +207 -0
- pluginbench/codex.py +451 -0
- pluginbench/codex_events.py +585 -0
- pluginbench/collectors.py +591 -0
- pluginbench/compare.py +927 -0
- pluginbench/components.py +129 -0
- pluginbench/coverage_report.py +610 -0
- pluginbench/datasets.py +207 -0
- pluginbench/evaluation.example.yaml +45 -0
- pluginbench/evaluation.py +1651 -0
- pluginbench/evaluation_report.py +1004 -0
- pluginbench/fallow_parse.mjs +101 -0
- pluginbench/harbor_backend.py +2946 -0
- pluginbench/isolation.py +314 -0
- pluginbench/judge.py +683 -0
- pluginbench/language_analysis.py +915 -0
- pluginbench/ledger.py +217 -0
- pluginbench/measurement_profiles.py +616 -0
- pluginbench/native_treatment_runtime.js +221 -0
- pluginbench/native_treatments.py +155 -0
- pluginbench/observer_data/go-analysis-v1/go.mod +10 -0
- pluginbench/observer_data/go-analysis-v1/go.sum +10 -0
- pluginbench/observer_data/go-analysis-v1/main.go +64 -0
- pluginbench/observer_data/oxc-parser-0.126.0/package-lock.json +449 -0
- pluginbench/observer_data/oxc-parser-0.126.0/package.json +5 -0
- pluginbench/parallel.py +101 -0
- pluginbench/processes.py +100 -0
- pluginbench/remeasure.py +992 -0
- pluginbench/run_lock.py +227 -0
- pluginbench/run_status.py +518 -0
- pluginbench/study.py +1858 -0
- pluginbench/study_review.py +924 -0
- pluginbench/submissions.py +486 -0
- pluginbench/task_sources.py +403 -0
- pluginbench/treatments.py +388 -0
- pluginbench/trial_containers.py +94 -0
- pluginbench/vendor/ECHARTS-LICENSE +222 -0
- pluginbench/vendor/ECHARTS-NOTICE +5 -0
- pluginbench/vendor/ZRENDER-LICENSE +29 -0
- pluginbench/vendor/echarts.min.js +48 -0
- pluginbench-0.5.0.dist-info/METADATA +294 -0
- pluginbench-0.5.0.dist-info/RECORD +58 -0
- pluginbench-0.5.0.dist-info/WHEEL +4 -0
- pluginbench-0.5.0.dist-info/entry_points.txt +2 -0
- pluginbench-0.5.0.dist-info/licenses/LICENSE +201 -0
- pluginbench-0.5.0.dist-info/licenses/src/pluginbench/vendor/ECHARTS-LICENSE +222 -0
- pluginbench-0.5.0.dist-info/licenses/src/pluginbench/vendor/ECHARTS-NOTICE +5 -0
- pluginbench-0.5.0.dist-info/licenses/src/pluginbench/vendor/ZRENDER-LICENSE +29 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "oxc-parser-0.126.0",
|
|
3
|
+
"lockfileVersion": 3,
|
|
4
|
+
"requires": true,
|
|
5
|
+
"packages": {
|
|
6
|
+
"": {
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"oxc-parser": "0.126.0"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"node_modules/@emnapi/core": {
|
|
12
|
+
"version": "1.9.2",
|
|
13
|
+
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz",
|
|
14
|
+
"integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"optional": true,
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@emnapi/wasi-threads": "1.2.1",
|
|
19
|
+
"tslib": "^2.4.0"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"node_modules/@emnapi/runtime": {
|
|
23
|
+
"version": "1.9.2",
|
|
24
|
+
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz",
|
|
25
|
+
"integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"optional": true,
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"tslib": "^2.4.0"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"node_modules/@emnapi/wasi-threads": {
|
|
33
|
+
"version": "1.2.1",
|
|
34
|
+
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
|
|
35
|
+
"integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"optional": true,
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"tslib": "^2.4.0"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"node_modules/@napi-rs/wasm-runtime": {
|
|
43
|
+
"version": "1.2.5",
|
|
44
|
+
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.5.tgz",
|
|
45
|
+
"integrity": "sha512-HshSvXzmBxNzqejd3k/KemgQ3hdREUYFRRrgxOZ+gPljDIsO2SDZrVZMd4Z/HsxudQbE62OVyVFE8z9BCurfjA==",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"optional": true,
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@tybys/wasm-util": "^0.10.3"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": "^20.19.0 || ^22.13.0 || >=23.5.0"
|
|
53
|
+
},
|
|
54
|
+
"funding": {
|
|
55
|
+
"type": "github",
|
|
56
|
+
"url": "https://github.com/sponsors/Brooooooklyn"
|
|
57
|
+
},
|
|
58
|
+
"peerDependencies": {
|
|
59
|
+
"@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4",
|
|
60
|
+
"@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4"
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"node_modules/@oxc-parser/binding-android-arm-eabi": {
|
|
64
|
+
"version": "0.126.0",
|
|
65
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.126.0.tgz",
|
|
66
|
+
"integrity": "sha512-svyoHt25J4741QJ5aa4R+h0iiBeSRt63Lr3aAZcxy2c/NeSE1IfDeMnSij6rIg7EjxkdlXzz613wUjeCeilBNA==",
|
|
67
|
+
"cpu": [
|
|
68
|
+
"arm"
|
|
69
|
+
],
|
|
70
|
+
"license": "MIT",
|
|
71
|
+
"optional": true,
|
|
72
|
+
"os": [
|
|
73
|
+
"android"
|
|
74
|
+
],
|
|
75
|
+
"engines": {
|
|
76
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"node_modules/@oxc-parser/binding-android-arm64": {
|
|
80
|
+
"version": "0.126.0",
|
|
81
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.126.0.tgz",
|
|
82
|
+
"integrity": "sha512-hPEBRKgplp1mG9GkINFsr4JVMDNrGJLOqfDaadTWpAoTnzYR5Rmv8RMvB3hJZpiNvbk1aacopdHUP1pggMQ/cw==",
|
|
83
|
+
"cpu": [
|
|
84
|
+
"arm64"
|
|
85
|
+
],
|
|
86
|
+
"license": "MIT",
|
|
87
|
+
"optional": true,
|
|
88
|
+
"os": [
|
|
89
|
+
"android"
|
|
90
|
+
],
|
|
91
|
+
"engines": {
|
|
92
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"node_modules/@oxc-parser/binding-darwin-arm64": {
|
|
96
|
+
"version": "0.126.0",
|
|
97
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.126.0.tgz",
|
|
98
|
+
"integrity": "sha512-ccRpu9sdYmznePJQG5halhs0FW5tw5a8zRSoZXOzM1OjoeZ4jiRRruFiPclsD59edoVAK1l83dvfjWz1nQi6lg==",
|
|
99
|
+
"cpu": [
|
|
100
|
+
"arm64"
|
|
101
|
+
],
|
|
102
|
+
"license": "MIT",
|
|
103
|
+
"optional": true,
|
|
104
|
+
"os": [
|
|
105
|
+
"darwin"
|
|
106
|
+
],
|
|
107
|
+
"engines": {
|
|
108
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"node_modules/@oxc-parser/binding-darwin-x64": {
|
|
112
|
+
"version": "0.126.0",
|
|
113
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.126.0.tgz",
|
|
114
|
+
"integrity": "sha512-CHB4zVjNSKqx8Fw9pHowzQQnjjuq04i4Ng0Avj+DixlwhwAoMYqlFbocYIlbg+q3zOLGlm7vEHm83jqEMitnyg==",
|
|
115
|
+
"cpu": [
|
|
116
|
+
"x64"
|
|
117
|
+
],
|
|
118
|
+
"license": "MIT",
|
|
119
|
+
"optional": true,
|
|
120
|
+
"os": [
|
|
121
|
+
"darwin"
|
|
122
|
+
],
|
|
123
|
+
"engines": {
|
|
124
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"node_modules/@oxc-parser/binding-freebsd-x64": {
|
|
128
|
+
"version": "0.126.0",
|
|
129
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.126.0.tgz",
|
|
130
|
+
"integrity": "sha512-RQ3nEJdcDKBfBjmLJ3Vl1d0KQERPV1P8eUrnBm7+VTYyoaJSPLVFuPg1mlD1hk3n0/879VLFMfusFkBal4ssWQ==",
|
|
131
|
+
"cpu": [
|
|
132
|
+
"x64"
|
|
133
|
+
],
|
|
134
|
+
"license": "MIT",
|
|
135
|
+
"optional": true,
|
|
136
|
+
"os": [
|
|
137
|
+
"freebsd"
|
|
138
|
+
],
|
|
139
|
+
"engines": {
|
|
140
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"node_modules/@oxc-parser/binding-linux-arm-gnueabihf": {
|
|
144
|
+
"version": "0.126.0",
|
|
145
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.126.0.tgz",
|
|
146
|
+
"integrity": "sha512-onipc2wCDA7Bauzb4KK1mab0GsEDf4ujiIfWECdnmY/2LlzAoX3xdQRLAUyEDB1kn3yilHBrkmXDdHluyHXxiw==",
|
|
147
|
+
"cpu": [
|
|
148
|
+
"arm"
|
|
149
|
+
],
|
|
150
|
+
"license": "MIT",
|
|
151
|
+
"optional": true,
|
|
152
|
+
"os": [
|
|
153
|
+
"linux"
|
|
154
|
+
],
|
|
155
|
+
"engines": {
|
|
156
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"node_modules/@oxc-parser/binding-linux-arm-musleabihf": {
|
|
160
|
+
"version": "0.126.0",
|
|
161
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.126.0.tgz",
|
|
162
|
+
"integrity": "sha512-5BuJJPohrV5NJ8lmcYOMbfRCUGoYH5J9HZHeuqOLwkHXWAuPMN3X1h8bC/2mWjmosdbfTtmyIdX3spS/TkqKNg==",
|
|
163
|
+
"cpu": [
|
|
164
|
+
"arm"
|
|
165
|
+
],
|
|
166
|
+
"license": "MIT",
|
|
167
|
+
"optional": true,
|
|
168
|
+
"os": [
|
|
169
|
+
"linux"
|
|
170
|
+
],
|
|
171
|
+
"engines": {
|
|
172
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
"node_modules/@oxc-parser/binding-linux-arm64-gnu": {
|
|
176
|
+
"version": "0.126.0",
|
|
177
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.126.0.tgz",
|
|
178
|
+
"integrity": "sha512-r2KApRgm2pOJaduRm6GOT8x0whcr67AyejNkSdzPt34GJ+Y3axcXN2mwlTs+8lfO/SSmpO5ZJGYiHYnxEE0jkw==",
|
|
179
|
+
"cpu": [
|
|
180
|
+
"arm64"
|
|
181
|
+
],
|
|
182
|
+
"license": "MIT",
|
|
183
|
+
"optional": true,
|
|
184
|
+
"os": [
|
|
185
|
+
"linux"
|
|
186
|
+
],
|
|
187
|
+
"engines": {
|
|
188
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"node_modules/@oxc-parser/binding-linux-arm64-musl": {
|
|
192
|
+
"version": "0.126.0",
|
|
193
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.126.0.tgz",
|
|
194
|
+
"integrity": "sha512-FQ+MMh7MT0Dr/u8+RWmWKlfoeWPQyHDbhhxJShJlYtROXXPHsRs9EvmQOZZ3sx4Nn7JU8NX+oyw2YzQ7anBJcA==",
|
|
195
|
+
"cpu": [
|
|
196
|
+
"arm64"
|
|
197
|
+
],
|
|
198
|
+
"license": "MIT",
|
|
199
|
+
"optional": true,
|
|
200
|
+
"os": [
|
|
201
|
+
"linux"
|
|
202
|
+
],
|
|
203
|
+
"engines": {
|
|
204
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"node_modules/@oxc-parser/binding-linux-ppc64-gnu": {
|
|
208
|
+
"version": "0.126.0",
|
|
209
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.126.0.tgz",
|
|
210
|
+
"integrity": "sha512-Wv/T8C98hRQhGTlx2XFyLn5raRMp9U1lOQD+YnXNgAr7wHbJJpZ8mDBU7Rw+M3WytGcGTFcr6kqgfyQeHVtLbQ==",
|
|
211
|
+
"cpu": [
|
|
212
|
+
"ppc64"
|
|
213
|
+
],
|
|
214
|
+
"license": "MIT",
|
|
215
|
+
"optional": true,
|
|
216
|
+
"os": [
|
|
217
|
+
"linux"
|
|
218
|
+
],
|
|
219
|
+
"engines": {
|
|
220
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"node_modules/@oxc-parser/binding-linux-riscv64-gnu": {
|
|
224
|
+
"version": "0.126.0",
|
|
225
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.126.0.tgz",
|
|
226
|
+
"integrity": "sha512-DHx1rT1zauW0ZbLHOiQh5AC9Xs3UkWx2XmfZHs+7nnWYr3sagrufoUQC+/XPwwjMIlCFXiFGM0sFh3TyOCZwqA==",
|
|
227
|
+
"cpu": [
|
|
228
|
+
"riscv64"
|
|
229
|
+
],
|
|
230
|
+
"license": "MIT",
|
|
231
|
+
"optional": true,
|
|
232
|
+
"os": [
|
|
233
|
+
"linux"
|
|
234
|
+
],
|
|
235
|
+
"engines": {
|
|
236
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
"node_modules/@oxc-parser/binding-linux-riscv64-musl": {
|
|
240
|
+
"version": "0.126.0",
|
|
241
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.126.0.tgz",
|
|
242
|
+
"integrity": "sha512-umDc2mTShH0U2zcEYf8mIJ163seLJNn54ZUZYeI5jD4qlg9izPwoLrC2aNPKlMJTu6u/ysmQWiEvIiaAG+INkw==",
|
|
243
|
+
"cpu": [
|
|
244
|
+
"riscv64"
|
|
245
|
+
],
|
|
246
|
+
"license": "MIT",
|
|
247
|
+
"optional": true,
|
|
248
|
+
"os": [
|
|
249
|
+
"linux"
|
|
250
|
+
],
|
|
251
|
+
"engines": {
|
|
252
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
"node_modules/@oxc-parser/binding-linux-s390x-gnu": {
|
|
256
|
+
"version": "0.126.0",
|
|
257
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.126.0.tgz",
|
|
258
|
+
"integrity": "sha512-PXXeWayclRtO1pxQEeCpiqIglQdhK2mAI2VX5xnsWdImzSB5GpoQ8TNw7vTCKk2k+GZuxl+q1knncidjCyUP9w==",
|
|
259
|
+
"cpu": [
|
|
260
|
+
"s390x"
|
|
261
|
+
],
|
|
262
|
+
"license": "MIT",
|
|
263
|
+
"optional": true,
|
|
264
|
+
"os": [
|
|
265
|
+
"linux"
|
|
266
|
+
],
|
|
267
|
+
"engines": {
|
|
268
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
"node_modules/@oxc-parser/binding-linux-x64-gnu": {
|
|
272
|
+
"version": "0.126.0",
|
|
273
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.126.0.tgz",
|
|
274
|
+
"integrity": "sha512-wzocjxm34TbB3bFlqG65JiLtvf6ZDg2ZxRkLLbgXwDQUNU+0MPjQN8zy/0jBKNA5fnPLk3XeVdZ7Uin+7+CVkg==",
|
|
275
|
+
"cpu": [
|
|
276
|
+
"x64"
|
|
277
|
+
],
|
|
278
|
+
"license": "MIT",
|
|
279
|
+
"optional": true,
|
|
280
|
+
"os": [
|
|
281
|
+
"linux"
|
|
282
|
+
],
|
|
283
|
+
"engines": {
|
|
284
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
"node_modules/@oxc-parser/binding-linux-x64-musl": {
|
|
288
|
+
"version": "0.126.0",
|
|
289
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.126.0.tgz",
|
|
290
|
+
"integrity": "sha512-e83uftP60jmkPs2+CW6T6A1GYzN2H6IumDAiTntv9WyHR73PI3ImHNBkYqnA3ukeKI3xjcCbhSh9QeJWmufxGQ==",
|
|
291
|
+
"cpu": [
|
|
292
|
+
"x64"
|
|
293
|
+
],
|
|
294
|
+
"license": "MIT",
|
|
295
|
+
"optional": true,
|
|
296
|
+
"os": [
|
|
297
|
+
"linux"
|
|
298
|
+
],
|
|
299
|
+
"engines": {
|
|
300
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"node_modules/@oxc-parser/binding-openharmony-arm64": {
|
|
304
|
+
"version": "0.126.0",
|
|
305
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.126.0.tgz",
|
|
306
|
+
"integrity": "sha512-4WiOILHnPrTDY2/L4mE6PZCYwLN1d3ghma6BuTJ452CCgzRMt3uFplCtR+o3r9zdUWJYb370UizpI9CUcWXr1A==",
|
|
307
|
+
"cpu": [
|
|
308
|
+
"arm64"
|
|
309
|
+
],
|
|
310
|
+
"license": "MIT",
|
|
311
|
+
"optional": true,
|
|
312
|
+
"os": [
|
|
313
|
+
"openharmony"
|
|
314
|
+
],
|
|
315
|
+
"engines": {
|
|
316
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
317
|
+
}
|
|
318
|
+
},
|
|
319
|
+
"node_modules/@oxc-parser/binding-wasm32-wasi": {
|
|
320
|
+
"version": "0.126.0",
|
|
321
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.126.0.tgz",
|
|
322
|
+
"integrity": "sha512-Y17hhnrQTrxgAxAyAq401vnN9URsAL4s5AjqpG1NDsXSlhe1yBNnns+rC2P6xcMoitgX5nKH2ryYt9oiFRlzLw==",
|
|
323
|
+
"cpu": [
|
|
324
|
+
"wasm32"
|
|
325
|
+
],
|
|
326
|
+
"license": "MIT",
|
|
327
|
+
"optional": true,
|
|
328
|
+
"dependencies": {
|
|
329
|
+
"@emnapi/core": "1.9.2",
|
|
330
|
+
"@emnapi/runtime": "1.9.2",
|
|
331
|
+
"@napi-rs/wasm-runtime": "^1.1.4"
|
|
332
|
+
},
|
|
333
|
+
"engines": {
|
|
334
|
+
"node": ">=14.0.0"
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
"node_modules/@oxc-parser/binding-win32-arm64-msvc": {
|
|
338
|
+
"version": "0.126.0",
|
|
339
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.126.0.tgz",
|
|
340
|
+
"integrity": "sha512-Znug1u1iRvT4VC3jANz6nhGBHsFwEFMxuimYpJFwMtsB6H5FcEoZRMmH26tHkSTD03JvDmG+gB65W3ajLjPcSw==",
|
|
341
|
+
"cpu": [
|
|
342
|
+
"arm64"
|
|
343
|
+
],
|
|
344
|
+
"license": "MIT",
|
|
345
|
+
"optional": true,
|
|
346
|
+
"os": [
|
|
347
|
+
"win32"
|
|
348
|
+
],
|
|
349
|
+
"engines": {
|
|
350
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"node_modules/@oxc-parser/binding-win32-ia32-msvc": {
|
|
354
|
+
"version": "0.126.0",
|
|
355
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.126.0.tgz",
|
|
356
|
+
"integrity": "sha512-qrw7mx5hFFTxVSXToOA40hpnjgNB/DJprZchtB4rDKNLKqkD3F26HbzaQeH1nxAKej0efSZfJd5Sw3qdtOLGhw==",
|
|
357
|
+
"cpu": [
|
|
358
|
+
"ia32"
|
|
359
|
+
],
|
|
360
|
+
"license": "MIT",
|
|
361
|
+
"optional": true,
|
|
362
|
+
"os": [
|
|
363
|
+
"win32"
|
|
364
|
+
],
|
|
365
|
+
"engines": {
|
|
366
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
"node_modules/@oxc-parser/binding-win32-x64-msvc": {
|
|
370
|
+
"version": "0.126.0",
|
|
371
|
+
"resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.126.0.tgz",
|
|
372
|
+
"integrity": "sha512-ibB1s+mPUFXvS7MFJO2jpw/aCNs/P6ifnWlRyTYB+WYBpniOiCcHQQskZneJtwcjQMDRol3RGG3ihoYnzXSY4w==",
|
|
373
|
+
"cpu": [
|
|
374
|
+
"x64"
|
|
375
|
+
],
|
|
376
|
+
"license": "MIT",
|
|
377
|
+
"optional": true,
|
|
378
|
+
"os": [
|
|
379
|
+
"win32"
|
|
380
|
+
],
|
|
381
|
+
"engines": {
|
|
382
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
"node_modules/@oxc-project/types": {
|
|
386
|
+
"version": "0.126.0",
|
|
387
|
+
"resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.126.0.tgz",
|
|
388
|
+
"integrity": "sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==",
|
|
389
|
+
"license": "MIT",
|
|
390
|
+
"funding": {
|
|
391
|
+
"url": "https://github.com/sponsors/Boshen"
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
"node_modules/@tybys/wasm-util": {
|
|
395
|
+
"version": "0.10.4",
|
|
396
|
+
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz",
|
|
397
|
+
"integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==",
|
|
398
|
+
"license": "MIT",
|
|
399
|
+
"optional": true,
|
|
400
|
+
"dependencies": {
|
|
401
|
+
"tslib": "^2.4.0"
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
"node_modules/oxc-parser": {
|
|
405
|
+
"version": "0.126.0",
|
|
406
|
+
"resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.126.0.tgz",
|
|
407
|
+
"integrity": "sha512-FktCvLby/mOHyuijZt22+nOt10dS24gGUZE3XwIbUg7Kf4+rer3/5T7RgwzazlNuVsCjPloZ3p8E+4ONT3A8Kw==",
|
|
408
|
+
"license": "MIT",
|
|
409
|
+
"dependencies": {
|
|
410
|
+
"@oxc-project/types": "^0.126.0"
|
|
411
|
+
},
|
|
412
|
+
"engines": {
|
|
413
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
414
|
+
},
|
|
415
|
+
"funding": {
|
|
416
|
+
"url": "https://github.com/sponsors/Boshen"
|
|
417
|
+
},
|
|
418
|
+
"optionalDependencies": {
|
|
419
|
+
"@oxc-parser/binding-android-arm-eabi": "0.126.0",
|
|
420
|
+
"@oxc-parser/binding-android-arm64": "0.126.0",
|
|
421
|
+
"@oxc-parser/binding-darwin-arm64": "0.126.0",
|
|
422
|
+
"@oxc-parser/binding-darwin-x64": "0.126.0",
|
|
423
|
+
"@oxc-parser/binding-freebsd-x64": "0.126.0",
|
|
424
|
+
"@oxc-parser/binding-linux-arm-gnueabihf": "0.126.0",
|
|
425
|
+
"@oxc-parser/binding-linux-arm-musleabihf": "0.126.0",
|
|
426
|
+
"@oxc-parser/binding-linux-arm64-gnu": "0.126.0",
|
|
427
|
+
"@oxc-parser/binding-linux-arm64-musl": "0.126.0",
|
|
428
|
+
"@oxc-parser/binding-linux-ppc64-gnu": "0.126.0",
|
|
429
|
+
"@oxc-parser/binding-linux-riscv64-gnu": "0.126.0",
|
|
430
|
+
"@oxc-parser/binding-linux-riscv64-musl": "0.126.0",
|
|
431
|
+
"@oxc-parser/binding-linux-s390x-gnu": "0.126.0",
|
|
432
|
+
"@oxc-parser/binding-linux-x64-gnu": "0.126.0",
|
|
433
|
+
"@oxc-parser/binding-linux-x64-musl": "0.126.0",
|
|
434
|
+
"@oxc-parser/binding-openharmony-arm64": "0.126.0",
|
|
435
|
+
"@oxc-parser/binding-wasm32-wasi": "0.126.0",
|
|
436
|
+
"@oxc-parser/binding-win32-arm64-msvc": "0.126.0",
|
|
437
|
+
"@oxc-parser/binding-win32-ia32-msvc": "0.126.0",
|
|
438
|
+
"@oxc-parser/binding-win32-x64-msvc": "0.126.0"
|
|
439
|
+
}
|
|
440
|
+
},
|
|
441
|
+
"node_modules/tslib": {
|
|
442
|
+
"version": "2.8.1",
|
|
443
|
+
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
|
444
|
+
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
|
445
|
+
"license": "0BSD",
|
|
446
|
+
"optional": true
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
pluginbench/parallel.py
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Bounded independent jobs with one coordinator and cancellation-aware draining."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Callable, Sequence
|
|
6
|
+
from concurrent.futures import CancelledError, Future, ThreadPoolExecutor, wait, FIRST_COMPLETED
|
|
7
|
+
from queue import Empty, SimpleQueue
|
|
8
|
+
from threading import Event
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def validate_jobs(jobs: object) -> None:
|
|
12
|
+
if type(jobs) is not int or not 1 <= jobs <= 16:
|
|
13
|
+
raise ValueError("jobs must be an integer from 1 to 16")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def run_jobs[T](
|
|
17
|
+
items: Sequence[T],
|
|
18
|
+
*,
|
|
19
|
+
jobs: int,
|
|
20
|
+
operation: Callable[[T, Event, Callable[[Callable[[], None]], None]], None],
|
|
21
|
+
on_submit: Callable[[T], None] | None = None,
|
|
22
|
+
) -> None:
|
|
23
|
+
"""Stop admission on failure; drain active calls and coordinator updates before raising."""
|
|
24
|
+
validate_jobs(jobs)
|
|
25
|
+
cancelled = Event()
|
|
26
|
+
if jobs == 1:
|
|
27
|
+
try:
|
|
28
|
+
for item in items:
|
|
29
|
+
if on_submit:
|
|
30
|
+
on_submit(item)
|
|
31
|
+
operation(item, cancelled, lambda callback: callback())
|
|
32
|
+
except BaseException:
|
|
33
|
+
cancelled.set()
|
|
34
|
+
raise
|
|
35
|
+
return
|
|
36
|
+
updates: SimpleQueue[Callable[[], None]] = SimpleQueue()
|
|
37
|
+
failures: SimpleQueue[BaseException] = SimpleQueue()
|
|
38
|
+
first_failure: BaseException | None = None
|
|
39
|
+
|
|
40
|
+
def perform(item: T) -> None:
|
|
41
|
+
if cancelled.is_set():
|
|
42
|
+
return
|
|
43
|
+
try:
|
|
44
|
+
operation(item, cancelled, updates.put)
|
|
45
|
+
except BaseException as exc:
|
|
46
|
+
if not isinstance(exc, CancelledError) or not cancelled.is_set():
|
|
47
|
+
failures.put(exc)
|
|
48
|
+
cancelled.set()
|
|
49
|
+
|
|
50
|
+
def drain_updates() -> None:
|
|
51
|
+
nonlocal first_failure
|
|
52
|
+
while True:
|
|
53
|
+
try:
|
|
54
|
+
failure = failures.get_nowait()
|
|
55
|
+
except Empty:
|
|
56
|
+
break
|
|
57
|
+
first_failure = first_failure or failure
|
|
58
|
+
while True:
|
|
59
|
+
try:
|
|
60
|
+
callback = updates.get_nowait()
|
|
61
|
+
except Empty:
|
|
62
|
+
break
|
|
63
|
+
try:
|
|
64
|
+
callback()
|
|
65
|
+
except BaseException as exc:
|
|
66
|
+
first_failure = first_failure or exc
|
|
67
|
+
cancelled.set()
|
|
68
|
+
|
|
69
|
+
iterator = iter(items)
|
|
70
|
+
active: set[Future[None]] = set()
|
|
71
|
+
with ThreadPoolExecutor(max_workers=jobs, thread_name_prefix="pluginbench") as pool:
|
|
72
|
+
|
|
73
|
+
def replenish() -> None:
|
|
74
|
+
while len(active) < jobs and not cancelled.is_set():
|
|
75
|
+
try:
|
|
76
|
+
item = next(iterator)
|
|
77
|
+
except StopIteration:
|
|
78
|
+
return
|
|
79
|
+
if on_submit:
|
|
80
|
+
on_submit(item)
|
|
81
|
+
active.add(pool.submit(perform, item))
|
|
82
|
+
|
|
83
|
+
try:
|
|
84
|
+
replenish()
|
|
85
|
+
except BaseException as exc:
|
|
86
|
+
first_failure = exc
|
|
87
|
+
cancelled.set()
|
|
88
|
+
while active:
|
|
89
|
+
try:
|
|
90
|
+
drain_updates()
|
|
91
|
+
done, _ = wait(active, timeout=0.05, return_when=FIRST_COMPLETED)
|
|
92
|
+
active.difference_update(done)
|
|
93
|
+
drain_updates()
|
|
94
|
+
replenish()
|
|
95
|
+
except BaseException as exc:
|
|
96
|
+
first_failure = first_failure or exc
|
|
97
|
+
cancelled.set()
|
|
98
|
+
# Current native calls finish under their existing timeout. No new work is admitted.
|
|
99
|
+
drain_updates()
|
|
100
|
+
if first_failure is not None:
|
|
101
|
+
raise first_failure
|
pluginbench/processes.py
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Run commands and clean up only the POSIX process groups they own."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
import signal
|
|
7
|
+
import subprocess
|
|
8
|
+
import time
|
|
9
|
+
from collections.abc import Mapping, Sequence
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
_CLEANUP_TIMEOUT = 1.0
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _signal_group(pid: int, sig: int) -> bool:
|
|
16
|
+
try:
|
|
17
|
+
os.killpg(pid, sig)
|
|
18
|
+
except ProcessLookupError:
|
|
19
|
+
return False
|
|
20
|
+
except PermissionError:
|
|
21
|
+
if sig != 0:
|
|
22
|
+
raise
|
|
23
|
+
# macOS can report EPERM while an owned, terminated group is disappearing.
|
|
24
|
+
return True
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def terminate_process_group(proc: subprocess.Popen[str]) -> None:
|
|
28
|
+
"""Reap a command started with start_new_session=True and stop its group.
|
|
29
|
+
|
|
30
|
+
The group can outlive its leader. Descendants that create a new session or
|
|
31
|
+
process group escape this cleanup and require a separate containment boundary.
|
|
32
|
+
"""
|
|
33
|
+
if _signal_group(proc.pid, signal.SIGTERM):
|
|
34
|
+
deadline = time.monotonic() + _CLEANUP_TIMEOUT
|
|
35
|
+
while time.monotonic() < deadline:
|
|
36
|
+
proc.poll()
|
|
37
|
+
if not _signal_group(proc.pid, 0):
|
|
38
|
+
break
|
|
39
|
+
time.sleep(0.01)
|
|
40
|
+
else:
|
|
41
|
+
_signal_group(proc.pid, signal.SIGKILL)
|
|
42
|
+
proc.wait(timeout=_CLEANUP_TIMEOUT)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def run_command(
|
|
46
|
+
argv: Sequence[str | Path],
|
|
47
|
+
*,
|
|
48
|
+
cwd: str | Path,
|
|
49
|
+
env: Mapping[str, str],
|
|
50
|
+
timeout: float | None,
|
|
51
|
+
) -> subprocess.CompletedProcess[str]:
|
|
52
|
+
"""Capture UTF-8 output and clean the command's group, including on failure.
|
|
53
|
+
|
|
54
|
+
TimeoutExpired retains byte output. The final drain is bounded because an
|
|
55
|
+
escaped descendant can keep pipes open after the owned group has stopped.
|
|
56
|
+
"""
|
|
57
|
+
proc = subprocess.Popen(
|
|
58
|
+
argv,
|
|
59
|
+
cwd=cwd,
|
|
60
|
+
env=env,
|
|
61
|
+
stdout=subprocess.PIPE,
|
|
62
|
+
stderr=subprocess.PIPE,
|
|
63
|
+
text=True,
|
|
64
|
+
encoding="utf-8",
|
|
65
|
+
start_new_session=True,
|
|
66
|
+
)
|
|
67
|
+
failure: BaseException | None = None
|
|
68
|
+
try:
|
|
69
|
+
try:
|
|
70
|
+
stdout, stderr = proc.communicate(timeout=timeout)
|
|
71
|
+
except BaseException as error:
|
|
72
|
+
failure = error
|
|
73
|
+
raise
|
|
74
|
+
finally:
|
|
75
|
+
try:
|
|
76
|
+
terminate_process_group(proc)
|
|
77
|
+
except (OSError, subprocess.TimeoutExpired) as cleanup_error:
|
|
78
|
+
if failure is None:
|
|
79
|
+
raise
|
|
80
|
+
failure.add_note(f"Process-group cleanup failed: {cleanup_error}")
|
|
81
|
+
except BaseException as error:
|
|
82
|
+
try:
|
|
83
|
+
stdout, stderr = proc.communicate(timeout=_CLEANUP_TIMEOUT)
|
|
84
|
+
except subprocess.TimeoutExpired:
|
|
85
|
+
error.add_note(
|
|
86
|
+
f"Final output drain exceeded {_CLEANUP_TIMEOUT:g} seconds; "
|
|
87
|
+
"a descendant may hold pipes open."
|
|
88
|
+
)
|
|
89
|
+
except OSError as drain_error:
|
|
90
|
+
error.add_note(f"Could not drain captured process output: {drain_error}")
|
|
91
|
+
else:
|
|
92
|
+
if isinstance(error, subprocess.TimeoutExpired):
|
|
93
|
+
error.output = stdout.encode("utf-8")
|
|
94
|
+
error.stderr = stderr.encode("utf-8")
|
|
95
|
+
finally:
|
|
96
|
+
for pipe in (proc.stdout, proc.stderr):
|
|
97
|
+
if pipe is not None:
|
|
98
|
+
pipe.close()
|
|
99
|
+
raise
|
|
100
|
+
return subprocess.CompletedProcess(argv, proc.returncode, stdout, stderr)
|