stillhunter 0.0.1 → 0.2.1
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.
- package/.claude-plugin/plugin.json +10 -0
- package/README.md +102 -2
- package/agents/hunter.md +105 -0
- package/dist/accounting.mjs +99 -0
- package/dist/browser.mjs +76 -0
- package/dist/change.mjs +217 -0
- package/dist/common.mjs +110 -0
- package/dist/coverage.mjs +119 -0
- package/dist/finish.mjs +357 -0
- package/dist/flags.mjs +49 -0
- package/dist/hunt.mjs +193 -0
- package/dist/keep.mjs +195 -0
- package/dist/layout.mjs +143 -0
- package/dist/probe-child.mjs +456 -0
- package/dist/probe-host.mjs +206 -0
- package/dist/relay.mjs +235 -0
- package/dist/reset.mjs +87 -0
- package/dist/results.mjs +87 -0
- package/dist/target.mjs +121 -0
- package/hooks/guard.mjs +255 -0
- package/hooks/hooks.json +28 -0
- package/npm-shrinkwrap.json +447 -0
- package/package.json +41 -3
- package/skills/hunt/SKILL.md +25 -0
- package/skills/keep/SKILL.md +19 -0
- package/skills/replay/SKILL.md +14 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "stillhunter",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "stillhunter",
|
|
9
|
+
"version": "0.2.1",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"playwright-core": "1.64.1"
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"stillhunter": "dist/hunt.mjs"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@types/node": "22.20.5",
|
|
19
|
+
"typescript": "7.0.2",
|
|
20
|
+
"yaml": "2.9.1"
|
|
21
|
+
},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=22.22.0"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"node_modules/@types/node": {
|
|
27
|
+
"version": "22.20.5",
|
|
28
|
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.5.tgz",
|
|
29
|
+
"integrity": "sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==",
|
|
30
|
+
"dev": true,
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"undici-types": "~6.21.0"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"node_modules/@typescript/typescript-aix-ppc64": {
|
|
37
|
+
"version": "7.0.2",
|
|
38
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz",
|
|
39
|
+
"integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==",
|
|
40
|
+
"cpu": [
|
|
41
|
+
"ppc64"
|
|
42
|
+
],
|
|
43
|
+
"dev": true,
|
|
44
|
+
"license": "Apache-2.0",
|
|
45
|
+
"optional": true,
|
|
46
|
+
"os": [
|
|
47
|
+
"aix"
|
|
48
|
+
],
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=16.20.0"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"node_modules/@typescript/typescript-darwin-arm64": {
|
|
54
|
+
"version": "7.0.2",
|
|
55
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz",
|
|
56
|
+
"integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==",
|
|
57
|
+
"cpu": [
|
|
58
|
+
"arm64"
|
|
59
|
+
],
|
|
60
|
+
"dev": true,
|
|
61
|
+
"license": "Apache-2.0",
|
|
62
|
+
"optional": true,
|
|
63
|
+
"os": [
|
|
64
|
+
"darwin"
|
|
65
|
+
],
|
|
66
|
+
"engines": {
|
|
67
|
+
"node": ">=16.20.0"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"node_modules/@typescript/typescript-darwin-x64": {
|
|
71
|
+
"version": "7.0.2",
|
|
72
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz",
|
|
73
|
+
"integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==",
|
|
74
|
+
"cpu": [
|
|
75
|
+
"x64"
|
|
76
|
+
],
|
|
77
|
+
"dev": true,
|
|
78
|
+
"license": "Apache-2.0",
|
|
79
|
+
"optional": true,
|
|
80
|
+
"os": [
|
|
81
|
+
"darwin"
|
|
82
|
+
],
|
|
83
|
+
"engines": {
|
|
84
|
+
"node": ">=16.20.0"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"node_modules/@typescript/typescript-freebsd-arm64": {
|
|
88
|
+
"version": "7.0.2",
|
|
89
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz",
|
|
90
|
+
"integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==",
|
|
91
|
+
"cpu": [
|
|
92
|
+
"arm64"
|
|
93
|
+
],
|
|
94
|
+
"dev": true,
|
|
95
|
+
"license": "Apache-2.0",
|
|
96
|
+
"optional": true,
|
|
97
|
+
"os": [
|
|
98
|
+
"freebsd"
|
|
99
|
+
],
|
|
100
|
+
"engines": {
|
|
101
|
+
"node": ">=16.20.0"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"node_modules/@typescript/typescript-freebsd-x64": {
|
|
105
|
+
"version": "7.0.2",
|
|
106
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz",
|
|
107
|
+
"integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==",
|
|
108
|
+
"cpu": [
|
|
109
|
+
"x64"
|
|
110
|
+
],
|
|
111
|
+
"dev": true,
|
|
112
|
+
"license": "Apache-2.0",
|
|
113
|
+
"optional": true,
|
|
114
|
+
"os": [
|
|
115
|
+
"freebsd"
|
|
116
|
+
],
|
|
117
|
+
"engines": {
|
|
118
|
+
"node": ">=16.20.0"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"node_modules/@typescript/typescript-linux-arm": {
|
|
122
|
+
"version": "7.0.2",
|
|
123
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz",
|
|
124
|
+
"integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==",
|
|
125
|
+
"cpu": [
|
|
126
|
+
"arm"
|
|
127
|
+
],
|
|
128
|
+
"dev": true,
|
|
129
|
+
"license": "Apache-2.0",
|
|
130
|
+
"optional": true,
|
|
131
|
+
"os": [
|
|
132
|
+
"linux"
|
|
133
|
+
],
|
|
134
|
+
"engines": {
|
|
135
|
+
"node": ">=16.20.0"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"node_modules/@typescript/typescript-linux-arm64": {
|
|
139
|
+
"version": "7.0.2",
|
|
140
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz",
|
|
141
|
+
"integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==",
|
|
142
|
+
"cpu": [
|
|
143
|
+
"arm64"
|
|
144
|
+
],
|
|
145
|
+
"dev": true,
|
|
146
|
+
"license": "Apache-2.0",
|
|
147
|
+
"optional": true,
|
|
148
|
+
"os": [
|
|
149
|
+
"linux"
|
|
150
|
+
],
|
|
151
|
+
"engines": {
|
|
152
|
+
"node": ">=16.20.0"
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"node_modules/@typescript/typescript-linux-loong64": {
|
|
156
|
+
"version": "7.0.2",
|
|
157
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz",
|
|
158
|
+
"integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==",
|
|
159
|
+
"cpu": [
|
|
160
|
+
"loong64"
|
|
161
|
+
],
|
|
162
|
+
"dev": true,
|
|
163
|
+
"license": "Apache-2.0",
|
|
164
|
+
"optional": true,
|
|
165
|
+
"os": [
|
|
166
|
+
"linux"
|
|
167
|
+
],
|
|
168
|
+
"engines": {
|
|
169
|
+
"node": ">=16.20.0"
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
"node_modules/@typescript/typescript-linux-mips64el": {
|
|
173
|
+
"version": "7.0.2",
|
|
174
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz",
|
|
175
|
+
"integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==",
|
|
176
|
+
"cpu": [
|
|
177
|
+
"mips64el"
|
|
178
|
+
],
|
|
179
|
+
"dev": true,
|
|
180
|
+
"license": "Apache-2.0",
|
|
181
|
+
"optional": true,
|
|
182
|
+
"os": [
|
|
183
|
+
"linux"
|
|
184
|
+
],
|
|
185
|
+
"engines": {
|
|
186
|
+
"node": ">=16.20.0"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"node_modules/@typescript/typescript-linux-ppc64": {
|
|
190
|
+
"version": "7.0.2",
|
|
191
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz",
|
|
192
|
+
"integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==",
|
|
193
|
+
"cpu": [
|
|
194
|
+
"ppc64"
|
|
195
|
+
],
|
|
196
|
+
"dev": true,
|
|
197
|
+
"license": "Apache-2.0",
|
|
198
|
+
"optional": true,
|
|
199
|
+
"os": [
|
|
200
|
+
"linux"
|
|
201
|
+
],
|
|
202
|
+
"engines": {
|
|
203
|
+
"node": ">=16.20.0"
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"node_modules/@typescript/typescript-linux-riscv64": {
|
|
207
|
+
"version": "7.0.2",
|
|
208
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz",
|
|
209
|
+
"integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==",
|
|
210
|
+
"cpu": [
|
|
211
|
+
"riscv64"
|
|
212
|
+
],
|
|
213
|
+
"dev": true,
|
|
214
|
+
"license": "Apache-2.0",
|
|
215
|
+
"optional": true,
|
|
216
|
+
"os": [
|
|
217
|
+
"linux"
|
|
218
|
+
],
|
|
219
|
+
"engines": {
|
|
220
|
+
"node": ">=16.20.0"
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
"node_modules/@typescript/typescript-linux-s390x": {
|
|
224
|
+
"version": "7.0.2",
|
|
225
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz",
|
|
226
|
+
"integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==",
|
|
227
|
+
"cpu": [
|
|
228
|
+
"s390x"
|
|
229
|
+
],
|
|
230
|
+
"dev": true,
|
|
231
|
+
"license": "Apache-2.0",
|
|
232
|
+
"optional": true,
|
|
233
|
+
"os": [
|
|
234
|
+
"linux"
|
|
235
|
+
],
|
|
236
|
+
"engines": {
|
|
237
|
+
"node": ">=16.20.0"
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
"node_modules/@typescript/typescript-linux-x64": {
|
|
241
|
+
"version": "7.0.2",
|
|
242
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz",
|
|
243
|
+
"integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==",
|
|
244
|
+
"cpu": [
|
|
245
|
+
"x64"
|
|
246
|
+
],
|
|
247
|
+
"dev": true,
|
|
248
|
+
"license": "Apache-2.0",
|
|
249
|
+
"optional": true,
|
|
250
|
+
"os": [
|
|
251
|
+
"linux"
|
|
252
|
+
],
|
|
253
|
+
"engines": {
|
|
254
|
+
"node": ">=16.20.0"
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"node_modules/@typescript/typescript-netbsd-arm64": {
|
|
258
|
+
"version": "7.0.2",
|
|
259
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz",
|
|
260
|
+
"integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==",
|
|
261
|
+
"cpu": [
|
|
262
|
+
"arm64"
|
|
263
|
+
],
|
|
264
|
+
"dev": true,
|
|
265
|
+
"license": "Apache-2.0",
|
|
266
|
+
"optional": true,
|
|
267
|
+
"os": [
|
|
268
|
+
"netbsd"
|
|
269
|
+
],
|
|
270
|
+
"engines": {
|
|
271
|
+
"node": ">=16.20.0"
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"node_modules/@typescript/typescript-netbsd-x64": {
|
|
275
|
+
"version": "7.0.2",
|
|
276
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz",
|
|
277
|
+
"integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==",
|
|
278
|
+
"cpu": [
|
|
279
|
+
"x64"
|
|
280
|
+
],
|
|
281
|
+
"dev": true,
|
|
282
|
+
"license": "Apache-2.0",
|
|
283
|
+
"optional": true,
|
|
284
|
+
"os": [
|
|
285
|
+
"netbsd"
|
|
286
|
+
],
|
|
287
|
+
"engines": {
|
|
288
|
+
"node": ">=16.20.0"
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"node_modules/@typescript/typescript-openbsd-arm64": {
|
|
292
|
+
"version": "7.0.2",
|
|
293
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz",
|
|
294
|
+
"integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==",
|
|
295
|
+
"cpu": [
|
|
296
|
+
"arm64"
|
|
297
|
+
],
|
|
298
|
+
"dev": true,
|
|
299
|
+
"license": "Apache-2.0",
|
|
300
|
+
"optional": true,
|
|
301
|
+
"os": [
|
|
302
|
+
"openbsd"
|
|
303
|
+
],
|
|
304
|
+
"engines": {
|
|
305
|
+
"node": ">=16.20.0"
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
"node_modules/@typescript/typescript-openbsd-x64": {
|
|
309
|
+
"version": "7.0.2",
|
|
310
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz",
|
|
311
|
+
"integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==",
|
|
312
|
+
"cpu": [
|
|
313
|
+
"x64"
|
|
314
|
+
],
|
|
315
|
+
"dev": true,
|
|
316
|
+
"license": "Apache-2.0",
|
|
317
|
+
"optional": true,
|
|
318
|
+
"os": [
|
|
319
|
+
"openbsd"
|
|
320
|
+
],
|
|
321
|
+
"engines": {
|
|
322
|
+
"node": ">=16.20.0"
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
"node_modules/@typescript/typescript-sunos-x64": {
|
|
326
|
+
"version": "7.0.2",
|
|
327
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz",
|
|
328
|
+
"integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==",
|
|
329
|
+
"cpu": [
|
|
330
|
+
"x64"
|
|
331
|
+
],
|
|
332
|
+
"dev": true,
|
|
333
|
+
"license": "Apache-2.0",
|
|
334
|
+
"optional": true,
|
|
335
|
+
"os": [
|
|
336
|
+
"sunos"
|
|
337
|
+
],
|
|
338
|
+
"engines": {
|
|
339
|
+
"node": ">=16.20.0"
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
"node_modules/@typescript/typescript-win32-arm64": {
|
|
343
|
+
"version": "7.0.2",
|
|
344
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz",
|
|
345
|
+
"integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==",
|
|
346
|
+
"cpu": [
|
|
347
|
+
"arm64"
|
|
348
|
+
],
|
|
349
|
+
"dev": true,
|
|
350
|
+
"license": "Apache-2.0",
|
|
351
|
+
"optional": true,
|
|
352
|
+
"os": [
|
|
353
|
+
"win32"
|
|
354
|
+
],
|
|
355
|
+
"engines": {
|
|
356
|
+
"node": ">=16.20.0"
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"node_modules/@typescript/typescript-win32-x64": {
|
|
360
|
+
"version": "7.0.2",
|
|
361
|
+
"resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz",
|
|
362
|
+
"integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==",
|
|
363
|
+
"cpu": [
|
|
364
|
+
"x64"
|
|
365
|
+
],
|
|
366
|
+
"dev": true,
|
|
367
|
+
"license": "Apache-2.0",
|
|
368
|
+
"optional": true,
|
|
369
|
+
"os": [
|
|
370
|
+
"win32"
|
|
371
|
+
],
|
|
372
|
+
"engines": {
|
|
373
|
+
"node": ">=16.20.0"
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
"node_modules/playwright-core": {
|
|
377
|
+
"version": "1.64.1",
|
|
378
|
+
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.1.tgz",
|
|
379
|
+
"integrity": "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==",
|
|
380
|
+
"license": "Apache-2.0",
|
|
381
|
+
"bin": {
|
|
382
|
+
"playwright-core": "cli.js"
|
|
383
|
+
},
|
|
384
|
+
"engines": {
|
|
385
|
+
"node": ">=20"
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
"node_modules/typescript": {
|
|
389
|
+
"version": "7.0.2",
|
|
390
|
+
"resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz",
|
|
391
|
+
"integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==",
|
|
392
|
+
"dev": true,
|
|
393
|
+
"license": "Apache-2.0",
|
|
394
|
+
"bin": {
|
|
395
|
+
"tsc": "bin/tsc"
|
|
396
|
+
},
|
|
397
|
+
"engines": {
|
|
398
|
+
"node": ">=16.20.0"
|
|
399
|
+
},
|
|
400
|
+
"optionalDependencies": {
|
|
401
|
+
"@typescript/typescript-aix-ppc64": "7.0.2",
|
|
402
|
+
"@typescript/typescript-darwin-arm64": "7.0.2",
|
|
403
|
+
"@typescript/typescript-darwin-x64": "7.0.2",
|
|
404
|
+
"@typescript/typescript-freebsd-arm64": "7.0.2",
|
|
405
|
+
"@typescript/typescript-freebsd-x64": "7.0.2",
|
|
406
|
+
"@typescript/typescript-linux-arm": "7.0.2",
|
|
407
|
+
"@typescript/typescript-linux-arm64": "7.0.2",
|
|
408
|
+
"@typescript/typescript-linux-loong64": "7.0.2",
|
|
409
|
+
"@typescript/typescript-linux-mips64el": "7.0.2",
|
|
410
|
+
"@typescript/typescript-linux-ppc64": "7.0.2",
|
|
411
|
+
"@typescript/typescript-linux-riscv64": "7.0.2",
|
|
412
|
+
"@typescript/typescript-linux-s390x": "7.0.2",
|
|
413
|
+
"@typescript/typescript-linux-x64": "7.0.2",
|
|
414
|
+
"@typescript/typescript-netbsd-arm64": "7.0.2",
|
|
415
|
+
"@typescript/typescript-netbsd-x64": "7.0.2",
|
|
416
|
+
"@typescript/typescript-openbsd-arm64": "7.0.2",
|
|
417
|
+
"@typescript/typescript-openbsd-x64": "7.0.2",
|
|
418
|
+
"@typescript/typescript-sunos-x64": "7.0.2",
|
|
419
|
+
"@typescript/typescript-win32-arm64": "7.0.2",
|
|
420
|
+
"@typescript/typescript-win32-x64": "7.0.2"
|
|
421
|
+
}
|
|
422
|
+
},
|
|
423
|
+
"node_modules/undici-types": {
|
|
424
|
+
"version": "6.21.0",
|
|
425
|
+
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
|
426
|
+
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
|
427
|
+
"dev": true,
|
|
428
|
+
"license": "MIT"
|
|
429
|
+
},
|
|
430
|
+
"node_modules/yaml": {
|
|
431
|
+
"version": "2.9.1",
|
|
432
|
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz",
|
|
433
|
+
"integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==",
|
|
434
|
+
"dev": true,
|
|
435
|
+
"license": "ISC",
|
|
436
|
+
"bin": {
|
|
437
|
+
"yaml": "bin.mjs"
|
|
438
|
+
},
|
|
439
|
+
"engines": {
|
|
440
|
+
"node": ">= 14.6"
|
|
441
|
+
},
|
|
442
|
+
"funding": {
|
|
443
|
+
"url": "https://github.com/sponsors/eemeli"
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,49 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stillhunter",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Hunts bugs in a web app change the way a careful QA engineer would, and reports only bugs it has made happen twice in a real browser.",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"testing",
|
|
8
|
+
"bug-hunting",
|
|
9
|
+
"playwright",
|
|
10
|
+
"fault-injection",
|
|
11
|
+
"claude-code",
|
|
12
|
+
"claude-code-plugin"
|
|
13
|
+
],
|
|
6
14
|
"repository": {
|
|
7
15
|
"type": "git",
|
|
8
16
|
"url": "git+https://github.com/stillhunter/stillhunter.git"
|
|
9
17
|
},
|
|
10
|
-
"
|
|
18
|
+
"type": "module",
|
|
19
|
+
"bin": {
|
|
20
|
+
"stillhunter": "dist/hunt.mjs"
|
|
21
|
+
},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=22.22.0"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
".claude-plugin/plugin.json",
|
|
27
|
+
"skills/",
|
|
28
|
+
"agents/",
|
|
29
|
+
"hooks/",
|
|
30
|
+
"dist/",
|
|
31
|
+
"README.md",
|
|
32
|
+
"npm-shrinkwrap.json"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc -p tsconfig.json",
|
|
36
|
+
"test": "node --test \"test/*.test.mjs\"",
|
|
37
|
+
"bench": "node benchmark/bench/cli.mts",
|
|
38
|
+
"bench:check": "tsc -p benchmark/bench/tsconfig.json",
|
|
39
|
+
"bench:test": "node --test \"benchmark/bench/test/*.test.mts\""
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"playwright-core": "1.64.1"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "22.20.5",
|
|
46
|
+
"typescript": "7.0.2",
|
|
47
|
+
"yaml": "2.9.1"
|
|
48
|
+
}
|
|
11
49
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hunt
|
|
3
|
+
description: Hunts for bugs in what you just changed in this web app, or in a feature you name. Tests each idea in a real browser with failing, slow and malformed requests and bad input, and reports only bugs that reproduce twice. Say what you want after it, for example "quick look at the invite dialog" or "the export, only serious problems, 20 minutes". About 10 minutes by default.
|
|
4
|
+
argument-hint: "[what you want hunted, how long, how serious]"
|
|
5
|
+
context: fork
|
|
6
|
+
agent: stillhunter:hunter
|
|
7
|
+
background: false
|
|
8
|
+
allowed-tools:
|
|
9
|
+
- Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" start *)
|
|
10
|
+
- Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" probe *)
|
|
11
|
+
- Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" finish *)
|
|
12
|
+
- Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" diff)
|
|
13
|
+
- Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" diff *)
|
|
14
|
+
---
|
|
15
|
+
Hunt for bugs in this repository, following your instructions.
|
|
16
|
+
|
|
17
|
+
What the person asked for, in their words (empty means: the current change, default settings):
|
|
18
|
+
|
|
19
|
+
$ARGUMENTS
|
|
20
|
+
|
|
21
|
+
Your runner prefix `<HUNT>` is, typed exactly:
|
|
22
|
+
|
|
23
|
+
node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs"
|
|
24
|
+
|
|
25
|
+
Turn the request into `start` flags as your instructions say, then start with `<HUNT> start`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: keep
|
|
3
|
+
description: Saves a finding Stillhunter confirmed as a test under .stillhunter/tests/, so it can be replayed with no model. Name the finding after it, by its number or title in the last hunt report.
|
|
4
|
+
argument-hint: "<finding number or title> [as <test name>]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" keep *)
|
|
7
|
+
- Read
|
|
8
|
+
- Glob
|
|
9
|
+
---
|
|
10
|
+
Keep this Stillhunter finding as a test: $ARGUMENTS
|
|
11
|
+
|
|
12
|
+
1. Find the finding in the most recent Stillhunter hunt report in this conversation. The run id is on the line that starts `stillhunter |` (`run <id>`), and each finding's `repro:` line names its probe (`probes/<probe>.mjs`) and its check (`expectation "<check>"`). Match what the person wrote by the finding's number or title. If the report ends with a `hidden:` line, or the person names a finding you cannot see in it, Read that run's `findings.json` (`.stillhunter/runs/<id>/findings.json`) and match against its full `confirmed` list, since the printed report shows only the findings at or above the severity floor. With no report in this conversation, use Glob for `.stillhunter/runs/*-hunt-*/findings.json`, Read the newest one and match a finding in its `confirmed` list (each has `probe`, `check` and `title`; the run id is the folder name).
|
|
13
|
+
2. If more than one finding matches, or none does, list the confirmed findings and ask which one. Do not guess.
|
|
14
|
+
3. Run, typed exactly with the values filled in:
|
|
15
|
+
|
|
16
|
+
node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" keep --run <id> --probe "<probe>" --check "<check>"
|
|
17
|
+
|
|
18
|
+
Quote `<probe>` and `<check>`: a check name can hold spaces. Escape any double quote inside the name with a backslash. Add `--as <name>` (lowercase letters, digits and dashes) when the person gave a name for the test.
|
|
19
|
+
4. Reply with the block it prints, copied unchanged. Do not edit or write files under `.stillhunter/` yourself.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: replay
|
|
3
|
+
description: Runs the tests kept under .stillhunter/tests/ against the running app, with no model. A test passes when the bug it was kept for is gone. Name tests to run only those; add --watch to watch one in a visible browser.
|
|
4
|
+
argument-hint: "[test names] [--watch]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Bash(node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" replay*)
|
|
7
|
+
---
|
|
8
|
+
Replay Stillhunter's kept tests. The person asked for: $ARGUMENTS
|
|
9
|
+
|
|
10
|
+
Run, typed exactly, with the test names and `--watch` from the request after `replay` (nothing after it runs every kept test):
|
|
11
|
+
|
|
12
|
+
node "${CLAUDE_PLUGIN_ROOT}/dist/hunt.mjs" replay
|
|
13
|
+
|
|
14
|
+
Use the Bash tool with timeout 600000. Reply with the block it prints, copied unchanged, then one sentence: which tests failed, if any. A failing kept test means the bug it was kept for is there.
|