@jrpool/kilotest 52.0.0 → 57.0.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/.devin/config.local.json +4 -1
- package/.github/workflows/ci.yml +3 -0
- package/README.md +1 -1
- package/api/awaitTest.test.ts +114 -0
- package/api/awaitTest.ts +108 -0
- package/api/listReports.ts +2 -2
- package/api/orderNewTest.test.ts +213 -0
- package/api/orderNewTest.ts +145 -0
- package/api/orderRetest.test.ts +179 -0
- package/api/orderRetest.ts +119 -0
- package/api/requestFeature.test.ts +36 -0
- package/api/requestFeature.ts +26 -4
- package/api/{requestTest.test.ts → requestNewTest.test.ts} +57 -23
- package/api/{requestTest.ts → requestNewTest.ts} +31 -36
- package/api/requestRetest.test.ts +24 -6
- package/api/requestRetest.ts +10 -29
- package/api/routes.test.ts +7 -4
- package/api/routes.ts +45 -7
- package/api/schemas.ts +120 -10
- package/api/util.ts +59 -2
- package/api/version.ts +6 -2
- package/capability.md +9 -6
- package/docs/AI-TOOLS.md +3 -3
- package/docs/SERVICE.md +19 -8
- package/env.example +39 -0
- package/index.test.ts +146 -24
- package/index.ts +129 -36
- package/lhm.plugin.json +1 -1
- package/linkValidation.test.ts +2 -2
- package/llms-full.txt +35 -4
- package/llms.txt +6 -3
- package/mcp.test.ts +109 -12
- package/mcp.ts +146 -26
- package/memory/MEMORY.md +1 -0
- package/memory/plan_issue_111_instant_test.md +198 -0
- package/openapi.yaml +456 -9
- package/package.json +2 -1
- package/routes.test.ts +1 -1
- package/routing.test.ts +2 -2
- package/scripts/generate-openapi.ts +1 -1
- package/server.json +1 -1
- package/sitemap.xml +1 -1
- package/smokeTest.ts +2 -2
- package/util.test.ts +486 -2
- package/util.ts +276 -45
- package/web/listReports/index.html +1 -1
- package/web/listReports/listReports.test.ts +1 -1
- package/web/{requestTest → requestNewTest}/index.ts +10 -1
- package/web/{requestTest/requestTest.test.ts → requestNewTest/requestNewTest.test.ts} +18 -2
- package/web/{requestTestForm → requestNewTestForm}/index.html +1 -1
- package/web/{requestTestForm/requestTestForm.test.ts → requestNewTestForm/requestNewTestForm.test.ts} +6 -6
- package/web/requestRetest/index.ts +9 -0
- package/web/requestRetest/requestRetest.test.ts +14 -0
- package/web/tutorialAI/index.ts +25 -3
- package/web/tutorialAI/tutorialAI.test.ts +32 -0
- package/web/tutorialWeb/index.ts +25 -3
- package/web/tutorialWeb/tutorialWeb.test.ts +32 -0
- /package/web/{requestTest → requestNewTest}/index.html +0 -0
- /package/web/{requestTestForm → requestNewTestForm}/index.ts +0 -0
package/openapi.yaml
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
openapi: 3.1.0
|
|
2
2
|
info:
|
|
3
3
|
title: Kilotest API
|
|
4
|
-
description: 'Kilotest is an ensemble testing and reporting service for front-end web quality. It uses an ensemble of 12 rule engines to test
|
|
5
|
-
version:
|
|
4
|
+
description: 'Kilotest is an ensemble testing and reporting service for front-end web quality. It uses an ensemble of 12 rule engines to test web pages for front-end quality (accessibility, usability, and standards conformity). Kilotest acts as a web server for human users, an MCP server for AI platforms, and an API for programmatic access. With this API you can request that a page be tested or retested, discover available reports, incrementally retrieve facts from a report: from what reports are available, to what issues were reported in one report, to what elements violated one issue, to what diagnoses rule engines gave for one violation.'
|
|
5
|
+
version: 57.0.0
|
|
6
6
|
license:
|
|
7
7
|
name: MIT
|
|
8
8
|
identifier: MIT
|
|
@@ -810,9 +810,9 @@ paths:
|
|
|
810
810
|
- response metadata
|
|
811
811
|
- response content
|
|
812
812
|
additionalProperties: false
|
|
813
|
-
/api/
|
|
813
|
+
/api/requestNewTest:
|
|
814
814
|
post:
|
|
815
|
-
operationId:
|
|
815
|
+
operationId: requestNewTest
|
|
816
816
|
summary: Request that a page be tested
|
|
817
817
|
requestBody:
|
|
818
818
|
content:
|
|
@@ -822,7 +822,7 @@ paths:
|
|
|
822
822
|
properties:
|
|
823
823
|
description:
|
|
824
824
|
type: string
|
|
825
|
-
description:
|
|
825
|
+
description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
|
|
826
826
|
URL:
|
|
827
827
|
type: string
|
|
828
828
|
description: 12- to 300-character URL of the page, including the https:// scheme and any query
|
|
@@ -860,7 +860,7 @@ paths:
|
|
|
860
860
|
properties:
|
|
861
861
|
description:
|
|
862
862
|
type: string
|
|
863
|
-
description:
|
|
863
|
+
description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
|
|
864
864
|
URL:
|
|
865
865
|
type: string
|
|
866
866
|
description: 12- to 300-character URL of the page, including the https:// scheme and any query
|
|
@@ -1099,7 +1099,7 @@ paths:
|
|
|
1099
1099
|
properties:
|
|
1100
1100
|
feature:
|
|
1101
1101
|
type: string
|
|
1102
|
-
description: description of requested feature improvement or new feature
|
|
1102
|
+
description: 20- to 1000-character description of requested feature improvement or new feature
|
|
1103
1103
|
required:
|
|
1104
1104
|
- feature
|
|
1105
1105
|
responses:
|
|
@@ -1129,7 +1129,7 @@ paths:
|
|
|
1129
1129
|
properties:
|
|
1130
1130
|
feature:
|
|
1131
1131
|
type: string
|
|
1132
|
-
description: description of requested feature improvement or new feature
|
|
1132
|
+
description: 20- to 1000-character description of requested feature improvement or new feature
|
|
1133
1133
|
required:
|
|
1134
1134
|
- feature
|
|
1135
1135
|
additionalProperties: false
|
|
@@ -1181,6 +1181,438 @@ paths:
|
|
|
1181
1181
|
- response metadata
|
|
1182
1182
|
- response content
|
|
1183
1183
|
additionalProperties: false
|
|
1184
|
+
/api/orderNewTest:
|
|
1185
|
+
post:
|
|
1186
|
+
operationId: orderNewTest
|
|
1187
|
+
summary: Order that a page be tested immediately, without manual approval
|
|
1188
|
+
requestBody:
|
|
1189
|
+
content:
|
|
1190
|
+
application/json:
|
|
1191
|
+
schema:
|
|
1192
|
+
type: object
|
|
1193
|
+
properties:
|
|
1194
|
+
description:
|
|
1195
|
+
type: string
|
|
1196
|
+
description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
|
|
1197
|
+
URL:
|
|
1198
|
+
type: string
|
|
1199
|
+
description: 12- to 300-character URL of the page, including the https:// scheme and any query
|
|
1200
|
+
reason:
|
|
1201
|
+
type: string
|
|
1202
|
+
description: 20- to 100-character reason why the page should be tested
|
|
1203
|
+
required:
|
|
1204
|
+
- description
|
|
1205
|
+
- URL
|
|
1206
|
+
- reason
|
|
1207
|
+
responses:
|
|
1208
|
+
'200':
|
|
1209
|
+
description: Order that a page be tested immediately, without manual approval
|
|
1210
|
+
content:
|
|
1211
|
+
application/json:
|
|
1212
|
+
schema:
|
|
1213
|
+
type: object
|
|
1214
|
+
properties:
|
|
1215
|
+
tool collection:
|
|
1216
|
+
$ref: '#/components/schemas/ToolsFacts'
|
|
1217
|
+
tool name:
|
|
1218
|
+
type: string
|
|
1219
|
+
this request:
|
|
1220
|
+
type: object
|
|
1221
|
+
properties:
|
|
1222
|
+
description:
|
|
1223
|
+
type: string
|
|
1224
|
+
method:
|
|
1225
|
+
type: string
|
|
1226
|
+
const: POST
|
|
1227
|
+
URL:
|
|
1228
|
+
type: string
|
|
1229
|
+
body:
|
|
1230
|
+
type: object
|
|
1231
|
+
properties:
|
|
1232
|
+
description:
|
|
1233
|
+
type: string
|
|
1234
|
+
description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
|
|
1235
|
+
URL:
|
|
1236
|
+
type: string
|
|
1237
|
+
description: 12- to 300-character URL of the page, including the https:// scheme and any query
|
|
1238
|
+
reason:
|
|
1239
|
+
type: string
|
|
1240
|
+
description: 20- to 100-character reason why the page should be tested
|
|
1241
|
+
required:
|
|
1242
|
+
- description
|
|
1243
|
+
- URL
|
|
1244
|
+
- reason
|
|
1245
|
+
additionalProperties: false
|
|
1246
|
+
closest ancestor request:
|
|
1247
|
+
anyOf:
|
|
1248
|
+
- $ref: '#/components/schemas/RequestReference'
|
|
1249
|
+
- type: 'null'
|
|
1250
|
+
required:
|
|
1251
|
+
- description
|
|
1252
|
+
- method
|
|
1253
|
+
- URL
|
|
1254
|
+
- body
|
|
1255
|
+
- closest ancestor request
|
|
1256
|
+
additionalProperties: false
|
|
1257
|
+
URLs of similar requests for web users:
|
|
1258
|
+
type: object
|
|
1259
|
+
properties:
|
|
1260
|
+
this request:
|
|
1261
|
+
type: 'null'
|
|
1262
|
+
closest ancestor request:
|
|
1263
|
+
type:
|
|
1264
|
+
- string
|
|
1265
|
+
- 'null'
|
|
1266
|
+
required:
|
|
1267
|
+
- this request
|
|
1268
|
+
- closest ancestor request
|
|
1269
|
+
additionalProperties: false
|
|
1270
|
+
response metadata:
|
|
1271
|
+
$ref: '#/components/schemas/ResponseMetadata'
|
|
1272
|
+
response content:
|
|
1273
|
+
type: object
|
|
1274
|
+
properties:
|
|
1275
|
+
details about your order:
|
|
1276
|
+
anyOf:
|
|
1277
|
+
- type: object
|
|
1278
|
+
properties:
|
|
1279
|
+
error:
|
|
1280
|
+
type: string
|
|
1281
|
+
required:
|
|
1282
|
+
- error
|
|
1283
|
+
additionalProperties: false
|
|
1284
|
+
- type: object
|
|
1285
|
+
properties:
|
|
1286
|
+
date and time received:
|
|
1287
|
+
type: string
|
|
1288
|
+
page to be tested:
|
|
1289
|
+
type: object
|
|
1290
|
+
properties:
|
|
1291
|
+
description:
|
|
1292
|
+
type: string
|
|
1293
|
+
URL:
|
|
1294
|
+
type: string
|
|
1295
|
+
required:
|
|
1296
|
+
- description
|
|
1297
|
+
- URL
|
|
1298
|
+
additionalProperties: false
|
|
1299
|
+
reason why the page should be tested:
|
|
1300
|
+
type: string
|
|
1301
|
+
required:
|
|
1302
|
+
- date and time received
|
|
1303
|
+
- page to be tested
|
|
1304
|
+
- reason why the page should be tested
|
|
1305
|
+
additionalProperties: false
|
|
1306
|
+
disposition of your order:
|
|
1307
|
+
anyOf:
|
|
1308
|
+
- type: object
|
|
1309
|
+
properties:
|
|
1310
|
+
what happens next:
|
|
1311
|
+
type: string
|
|
1312
|
+
report identifier:
|
|
1313
|
+
anyOf:
|
|
1314
|
+
- $ref: '#/components/schemas/ReportIdentifier'
|
|
1315
|
+
- type: 'null'
|
|
1316
|
+
how you can check for completion:
|
|
1317
|
+
type: string
|
|
1318
|
+
do you want to wait for completion:
|
|
1319
|
+
type: string
|
|
1320
|
+
required:
|
|
1321
|
+
- what happens next
|
|
1322
|
+
- report identifier
|
|
1323
|
+
- how you can check for completion
|
|
1324
|
+
- do you want to wait for completion
|
|
1325
|
+
additionalProperties: false
|
|
1326
|
+
- type: 'null'
|
|
1327
|
+
required:
|
|
1328
|
+
- details about your order
|
|
1329
|
+
- disposition of your order
|
|
1330
|
+
additionalProperties: false
|
|
1331
|
+
required:
|
|
1332
|
+
- tool collection
|
|
1333
|
+
- tool name
|
|
1334
|
+
- this request
|
|
1335
|
+
- URLs of similar requests for web users
|
|
1336
|
+
- response metadata
|
|
1337
|
+
- response content
|
|
1338
|
+
additionalProperties: false
|
|
1339
|
+
/api/orderRetest/{timeStamp}/{jobID}:
|
|
1340
|
+
post:
|
|
1341
|
+
operationId: orderRetest
|
|
1342
|
+
summary: Order that a page be retested immediately, without manual approval
|
|
1343
|
+
parameters:
|
|
1344
|
+
- in: path
|
|
1345
|
+
name: timeStamp
|
|
1346
|
+
schema:
|
|
1347
|
+
type: string
|
|
1348
|
+
description: 'Timestamp of the latest report about the page in YYMMDDTHHmm format (example: 260503T0432)'
|
|
1349
|
+
required: true
|
|
1350
|
+
description: 'Timestamp of the latest report about the page in YYMMDDTHHmm format (example: 260503T0432)'
|
|
1351
|
+
- in: path
|
|
1352
|
+
name: jobID
|
|
1353
|
+
schema:
|
|
1354
|
+
type: string
|
|
1355
|
+
description: 'Job identifier of the latest report about the page (example: x9z)'
|
|
1356
|
+
required: true
|
|
1357
|
+
description: 'Job identifier of the latest report about the page (example: x9z)'
|
|
1358
|
+
requestBody:
|
|
1359
|
+
content:
|
|
1360
|
+
application/json:
|
|
1361
|
+
schema:
|
|
1362
|
+
type: object
|
|
1363
|
+
properties:
|
|
1364
|
+
reason:
|
|
1365
|
+
type: string
|
|
1366
|
+
description: 20- to 100-character reason why the page should be retested
|
|
1367
|
+
required:
|
|
1368
|
+
- reason
|
|
1369
|
+
responses:
|
|
1370
|
+
'200':
|
|
1371
|
+
description: Order that a page be retested immediately, without manual approval
|
|
1372
|
+
content:
|
|
1373
|
+
application/json:
|
|
1374
|
+
schema:
|
|
1375
|
+
type: object
|
|
1376
|
+
properties:
|
|
1377
|
+
tool collection:
|
|
1378
|
+
$ref: '#/components/schemas/ToolsFacts'
|
|
1379
|
+
tool name:
|
|
1380
|
+
type: string
|
|
1381
|
+
this request:
|
|
1382
|
+
type: object
|
|
1383
|
+
properties:
|
|
1384
|
+
description:
|
|
1385
|
+
type: string
|
|
1386
|
+
method:
|
|
1387
|
+
type: string
|
|
1388
|
+
const: POST
|
|
1389
|
+
URL:
|
|
1390
|
+
type: string
|
|
1391
|
+
body:
|
|
1392
|
+
type: object
|
|
1393
|
+
properties:
|
|
1394
|
+
reason:
|
|
1395
|
+
type: string
|
|
1396
|
+
description: 20- to 100-character reason why the page should be retested
|
|
1397
|
+
required:
|
|
1398
|
+
- reason
|
|
1399
|
+
additionalProperties: false
|
|
1400
|
+
closest ancestor request:
|
|
1401
|
+
anyOf:
|
|
1402
|
+
- $ref: '#/components/schemas/RequestReference'
|
|
1403
|
+
- type: 'null'
|
|
1404
|
+
required:
|
|
1405
|
+
- description
|
|
1406
|
+
- method
|
|
1407
|
+
- URL
|
|
1408
|
+
- body
|
|
1409
|
+
- closest ancestor request
|
|
1410
|
+
additionalProperties: false
|
|
1411
|
+
URLs of similar requests for web users:
|
|
1412
|
+
type: object
|
|
1413
|
+
properties:
|
|
1414
|
+
this request:
|
|
1415
|
+
type: 'null'
|
|
1416
|
+
closest ancestor request:
|
|
1417
|
+
type:
|
|
1418
|
+
- string
|
|
1419
|
+
- 'null'
|
|
1420
|
+
required:
|
|
1421
|
+
- this request
|
|
1422
|
+
- closest ancestor request
|
|
1423
|
+
additionalProperties: false
|
|
1424
|
+
response metadata:
|
|
1425
|
+
$ref: '#/components/schemas/ResponseMetadata'
|
|
1426
|
+
response content:
|
|
1427
|
+
type: object
|
|
1428
|
+
properties:
|
|
1429
|
+
details about your order:
|
|
1430
|
+
anyOf:
|
|
1431
|
+
- type: object
|
|
1432
|
+
properties:
|
|
1433
|
+
error:
|
|
1434
|
+
type: string
|
|
1435
|
+
required:
|
|
1436
|
+
- error
|
|
1437
|
+
additionalProperties: false
|
|
1438
|
+
- type: object
|
|
1439
|
+
properties:
|
|
1440
|
+
date and time received:
|
|
1441
|
+
type: string
|
|
1442
|
+
page to be retested:
|
|
1443
|
+
type: object
|
|
1444
|
+
properties:
|
|
1445
|
+
description:
|
|
1446
|
+
type: string
|
|
1447
|
+
URL:
|
|
1448
|
+
type: string
|
|
1449
|
+
required:
|
|
1450
|
+
- description
|
|
1451
|
+
- URL
|
|
1452
|
+
additionalProperties: false
|
|
1453
|
+
reason why the page should be retested:
|
|
1454
|
+
type: string
|
|
1455
|
+
required:
|
|
1456
|
+
- date and time received
|
|
1457
|
+
- page to be retested
|
|
1458
|
+
- reason why the page should be retested
|
|
1459
|
+
additionalProperties: false
|
|
1460
|
+
disposition of your order:
|
|
1461
|
+
anyOf:
|
|
1462
|
+
- type: object
|
|
1463
|
+
properties:
|
|
1464
|
+
what happens next:
|
|
1465
|
+
type: string
|
|
1466
|
+
report identifier:
|
|
1467
|
+
anyOf:
|
|
1468
|
+
- $ref: '#/components/schemas/ReportIdentifier'
|
|
1469
|
+
- type: 'null'
|
|
1470
|
+
how you can check for completion:
|
|
1471
|
+
type: string
|
|
1472
|
+
do you want to wait for completion:
|
|
1473
|
+
type: string
|
|
1474
|
+
required:
|
|
1475
|
+
- what happens next
|
|
1476
|
+
- report identifier
|
|
1477
|
+
- how you can check for completion
|
|
1478
|
+
- do you want to wait for completion
|
|
1479
|
+
additionalProperties: false
|
|
1480
|
+
- type: 'null'
|
|
1481
|
+
required:
|
|
1482
|
+
- details about your order
|
|
1483
|
+
- disposition of your order
|
|
1484
|
+
additionalProperties: false
|
|
1485
|
+
required:
|
|
1486
|
+
- tool collection
|
|
1487
|
+
- tool name
|
|
1488
|
+
- this request
|
|
1489
|
+
- URLs of similar requests for web users
|
|
1490
|
+
- response metadata
|
|
1491
|
+
- response content
|
|
1492
|
+
additionalProperties: false
|
|
1493
|
+
/api/awaitTest/{timeStamp}/{jobID}:
|
|
1494
|
+
post:
|
|
1495
|
+
operationId: awaitTest
|
|
1496
|
+
summary: Wait for a job ordered via orderNewTest or orderRetest to complete
|
|
1497
|
+
parameters:
|
|
1498
|
+
- in: path
|
|
1499
|
+
name: timeStamp
|
|
1500
|
+
schema:
|
|
1501
|
+
type: string
|
|
1502
|
+
description: 'Timestamp of the ordered job, from the report identifier returned by orderNewTest, in YYMMDDTHHmm format (example: 260503T0432)'
|
|
1503
|
+
required: true
|
|
1504
|
+
description: 'Timestamp of the ordered job, from the report identifier returned by orderNewTest, in YYMMDDTHHmm format (example: 260503T0432)'
|
|
1505
|
+
- in: path
|
|
1506
|
+
name: jobID
|
|
1507
|
+
schema:
|
|
1508
|
+
type: string
|
|
1509
|
+
description: 'Job identifier of the ordered job, from the report identifier returned by orderNewTest (example: x9z)'
|
|
1510
|
+
required: true
|
|
1511
|
+
description: 'Job identifier of the ordered job, from the report identifier returned by orderNewTest (example: x9z)'
|
|
1512
|
+
requestBody:
|
|
1513
|
+
content:
|
|
1514
|
+
application/json:
|
|
1515
|
+
schema:
|
|
1516
|
+
type: object
|
|
1517
|
+
properties: {}
|
|
1518
|
+
responses:
|
|
1519
|
+
'200':
|
|
1520
|
+
description: Wait for a job ordered via orderNewTest or orderRetest to complete
|
|
1521
|
+
content:
|
|
1522
|
+
application/json:
|
|
1523
|
+
schema:
|
|
1524
|
+
type: object
|
|
1525
|
+
properties:
|
|
1526
|
+
tool collection:
|
|
1527
|
+
$ref: '#/components/schemas/ToolsFacts'
|
|
1528
|
+
tool name:
|
|
1529
|
+
type: string
|
|
1530
|
+
this request:
|
|
1531
|
+
type: object
|
|
1532
|
+
properties:
|
|
1533
|
+
description:
|
|
1534
|
+
type: string
|
|
1535
|
+
method:
|
|
1536
|
+
type: string
|
|
1537
|
+
const: POST
|
|
1538
|
+
URL:
|
|
1539
|
+
type: string
|
|
1540
|
+
closest ancestor request:
|
|
1541
|
+
minItems: 2
|
|
1542
|
+
maxItems: 2
|
|
1543
|
+
type: array
|
|
1544
|
+
items:
|
|
1545
|
+
$ref: '#/components/schemas/RequestReference'
|
|
1546
|
+
required:
|
|
1547
|
+
- description
|
|
1548
|
+
- method
|
|
1549
|
+
- URL
|
|
1550
|
+
- closest ancestor request
|
|
1551
|
+
additionalProperties: false
|
|
1552
|
+
URLs of similar requests for web users:
|
|
1553
|
+
type: object
|
|
1554
|
+
properties:
|
|
1555
|
+
this request:
|
|
1556
|
+
type: 'null'
|
|
1557
|
+
closest ancestor request:
|
|
1558
|
+
type: 'null'
|
|
1559
|
+
required:
|
|
1560
|
+
- this request
|
|
1561
|
+
- closest ancestor request
|
|
1562
|
+
additionalProperties: false
|
|
1563
|
+
response metadata:
|
|
1564
|
+
$ref: '#/components/schemas/ResponseMetadata'
|
|
1565
|
+
response content:
|
|
1566
|
+
type: object
|
|
1567
|
+
properties:
|
|
1568
|
+
details about your wait:
|
|
1569
|
+
anyOf:
|
|
1570
|
+
- type: object
|
|
1571
|
+
properties:
|
|
1572
|
+
error:
|
|
1573
|
+
type: string
|
|
1574
|
+
required:
|
|
1575
|
+
- error
|
|
1576
|
+
additionalProperties: false
|
|
1577
|
+
- type: object
|
|
1578
|
+
properties:
|
|
1579
|
+
report identifier:
|
|
1580
|
+
$ref: '#/components/schemas/ReportIdentifier'
|
|
1581
|
+
required:
|
|
1582
|
+
- report identifier
|
|
1583
|
+
additionalProperties: false
|
|
1584
|
+
disposition of your wait:
|
|
1585
|
+
anyOf:
|
|
1586
|
+
- type: object
|
|
1587
|
+
properties:
|
|
1588
|
+
outcome:
|
|
1589
|
+
type: string
|
|
1590
|
+
enum:
|
|
1591
|
+
- completed
|
|
1592
|
+
- failed
|
|
1593
|
+
- timedOut
|
|
1594
|
+
what happened:
|
|
1595
|
+
type: string
|
|
1596
|
+
how you can check for completion:
|
|
1597
|
+
type: string
|
|
1598
|
+
required:
|
|
1599
|
+
- outcome
|
|
1600
|
+
- what happened
|
|
1601
|
+
- how you can check for completion
|
|
1602
|
+
additionalProperties: false
|
|
1603
|
+
- type: 'null'
|
|
1604
|
+
required:
|
|
1605
|
+
- details about your wait
|
|
1606
|
+
- disposition of your wait
|
|
1607
|
+
additionalProperties: false
|
|
1608
|
+
required:
|
|
1609
|
+
- tool collection
|
|
1610
|
+
- tool name
|
|
1611
|
+
- this request
|
|
1612
|
+
- URLs of similar requests for web users
|
|
1613
|
+
- response metadata
|
|
1614
|
+
- response content
|
|
1615
|
+
additionalProperties: false
|
|
1184
1616
|
components:
|
|
1185
1617
|
schemas:
|
|
1186
1618
|
ToolsFacts:
|
|
@@ -1253,7 +1685,9 @@ components:
|
|
|
1253
1685
|
type: string
|
|
1254
1686
|
method:
|
|
1255
1687
|
type: string
|
|
1256
|
-
|
|
1688
|
+
enum:
|
|
1689
|
+
- GET
|
|
1690
|
+
- POST
|
|
1257
1691
|
URL:
|
|
1258
1692
|
type: string
|
|
1259
1693
|
required:
|
|
@@ -1394,3 +1828,16 @@ components:
|
|
|
1394
1828
|
required:
|
|
1395
1829
|
- error
|
|
1396
1830
|
additionalProperties: false
|
|
1831
|
+
ReportIdentifier:
|
|
1832
|
+
type: object
|
|
1833
|
+
properties:
|
|
1834
|
+
timeStamp:
|
|
1835
|
+
type: string
|
|
1836
|
+
description: Timestamp to pass to listIssues once the report is ready.
|
|
1837
|
+
jobID:
|
|
1838
|
+
type: string
|
|
1839
|
+
description: Job identifier to pass to listIssues once the report is ready.
|
|
1840
|
+
required:
|
|
1841
|
+
- timeStamp
|
|
1842
|
+
- jobID
|
|
1843
|
+
additionalProperties: false
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jrpool/kilotest",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "57.0.1",
|
|
4
4
|
"description": "Ensemble testing for front-end web quality",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.ts",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@modelcontextprotocol/sdk": "*",
|
|
40
40
|
"dotenv": "*",
|
|
41
|
+
"ipaddr.js": "*",
|
|
41
42
|
"testaro-issues": "*",
|
|
42
43
|
"zod": "*"
|
|
43
44
|
},
|
package/routes.test.ts
CHANGED
|
@@ -42,7 +42,7 @@ test('routes GET includes all known GET paths', () => {
|
|
|
42
42
|
test('routes POST includes all known POST paths', () => {
|
|
43
43
|
const required = [
|
|
44
44
|
'/mcp',
|
|
45
|
-
'/
|
|
45
|
+
'/requestNewTest.html',
|
|
46
46
|
'/requestAction.html',
|
|
47
47
|
'/reannotate.html',
|
|
48
48
|
'/renewWCAG.html',
|
package/routing.test.ts
CHANGED
|
@@ -62,8 +62,8 @@ const get = (requestPath: string): Promise<any> => new Promise((resolve, reject)
|
|
|
62
62
|
|
|
63
63
|
// TESTS
|
|
64
64
|
|
|
65
|
-
test('GET /api/
|
|
66
|
-
const result = await get('/api/
|
|
65
|
+
test('GET /api/requestNewTest returns an error, not a test-request response', async () => {
|
|
66
|
+
const result = await get('/api/requestNewTest');
|
|
67
67
|
assert.ok(result.body.includes('Invalid service request'));
|
|
68
68
|
});
|
|
69
69
|
|
|
@@ -58,7 +58,7 @@ const generate = () => {
|
|
|
58
58
|
openapi: '3.1.0',
|
|
59
59
|
info: {
|
|
60
60
|
title: 'Kilotest API',
|
|
61
|
-
description: 'Kilotest is an ensemble testing and reporting service for front-end web quality. It uses an ensemble of 12 rule engines to test
|
|
61
|
+
description: 'Kilotest is an ensemble testing and reporting service for front-end web quality. It uses an ensemble of 12 rule engines to test web pages for front-end quality (accessibility, usability, and standards conformity). Kilotest acts as a web server for human users, an MCP server for AI platforms, and an API for programmatic access. With this API you can request that a page be tested or retested, discover available reports, incrementally retrieve facts from a report: from what reports are available, to what issues were reported in one report, to what elements violated one issue, to what diagnoses rule engines gave for one violation.',
|
|
62
62
|
version,
|
|
63
63
|
license: {
|
|
64
64
|
name: license,
|
package/server.json
CHANGED
package/sitemap.xml
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<url><loc>https://kilotest.com/</loc></url>
|
|
4
4
|
<url><loc>https://kilotest.com/listReports.html</loc></url>
|
|
5
5
|
<url><loc>https://kilotest.com/listTopIssues.html</loc></url>
|
|
6
|
-
<url><loc>https://kilotest.com/
|
|
6
|
+
<url><loc>https://kilotest.com/requestNewTestForm.html</loc></url>
|
|
7
7
|
<url><loc>https://kilotest.com/manage.html</loc></url>
|
|
8
8
|
<url><loc>https://kilotest.com/tutorial.html</loc></url>
|
|
9
9
|
<url><loc>https://kilotest.com/openapi.yaml</loc></url>
|
package/smokeTest.ts
CHANGED
|
@@ -51,7 +51,7 @@ const concretePaths: Record<string, Record<string, string>> = {
|
|
|
51
51
|
'/requestAction.html': '/requestAction.html',
|
|
52
52
|
'/renewWCAG.html': '/renewWCAG.html',
|
|
53
53
|
'/requestRetest.html/*': '/requestRetest.html/260101T0001/ct',
|
|
54
|
-
'/
|
|
54
|
+
'/requestNewTest.html': '/requestNewTest.html',
|
|
55
55
|
'/showHiddenReportsForm.html': '/showHiddenReportsForm.html',
|
|
56
56
|
'/tutorialAIComment.html': '/tutorialAIComment.html',
|
|
57
57
|
'/tutorialWebComment.html': '/tutorialWebComment.html',
|
|
@@ -77,7 +77,7 @@ const postBodies: Record<string, object> = {
|
|
|
77
77
|
},
|
|
78
78
|
'/renewWCAG.html': {authCode: 'invalid'},
|
|
79
79
|
'/requestRetest.html/260101T0001/ct': {why: 'smoke test'},
|
|
80
|
-
'/
|
|
80
|
+
'/requestNewTest.html': {description: 'Smoke Test Page', url: 'https://smoketest.example.com', why: 'smoke test'},
|
|
81
81
|
'/showHiddenReportsForm.html': {authCode: 'invalid'},
|
|
82
82
|
'/tutorialAIComment.html': {content: 'smoke test'},
|
|
83
83
|
'/unhideReportForm.html': {authCode: 'invalid'},
|