@jrpool/kilotest 55.0.0 → 57.1.0

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 (52) hide show
  1. package/README.md +1 -1
  2. package/api/awaitTest.test.ts +114 -0
  3. package/api/awaitTest.ts +108 -0
  4. package/api/listReports.ts +2 -2
  5. package/api/orderNewTest.test.ts +213 -0
  6. package/api/orderNewTest.ts +145 -0
  7. package/api/orderRetest.test.ts +179 -0
  8. package/api/orderRetest.ts +119 -0
  9. package/api/{requestTest.test.ts → requestNewTest.test.ts} +25 -25
  10. package/api/{requestTest.ts → requestNewTest.ts} +16 -39
  11. package/api/requestRetest.test.ts +6 -6
  12. package/api/requestRetest.ts +10 -33
  13. package/api/routes.test.ts +7 -4
  14. package/api/routes.ts +45 -7
  15. package/api/schemas.ts +120 -10
  16. package/api/util.ts +59 -2
  17. package/api/version.ts +6 -2
  18. package/capability.md +12 -5
  19. package/docs/SERVICE.md +6 -8
  20. package/env.example +15 -0
  21. package/index.html +1 -0
  22. package/index.test.ts +95 -24
  23. package/index.ts +83 -16
  24. package/lhm.plugin.json +1 -1
  25. package/linkValidation.test.ts +2 -2
  26. package/llms-full.txt +34 -3
  27. package/llms.txt +6 -2
  28. package/mcp.test.ts +72 -12
  29. package/mcp.ts +81 -11
  30. package/memory/MEMORY.md +1 -0
  31. package/memory/plan_issue_111_instant_test.md +198 -0
  32. package/openapi.yaml +451 -4
  33. package/package.json +1 -1
  34. package/routes.test.ts +1 -1
  35. package/routing.test.ts +2 -2
  36. package/server.json +1 -1
  37. package/sitemap.xml +2 -1
  38. package/smokeTest.ts +2 -2
  39. package/util.test.ts +214 -2
  40. package/util.ts +175 -7
  41. package/web/listReports/index.html +1 -1
  42. package/web/listReports/listReports.test.ts +1 -1
  43. package/web/privacy/index.html +37 -0
  44. package/web/privacy/index.ts +20 -0
  45. package/web/privacy/privacy.test.ts +18 -0
  46. package/web/{requestTest → requestNewTest}/index.ts +1 -1
  47. package/web/{requestTest/requestTest.test.ts → requestNewTest/requestNewTest.test.ts} +2 -2
  48. package/web/{requestTestForm → requestNewTestForm}/index.html +1 -1
  49. package/web/{requestTestForm/requestTestForm.test.ts → requestNewTestForm/requestNewTestForm.test.ts} +6 -6
  50. package/web/tutorialAI/index.html +26 -39
  51. /package/web/{requestTest → requestNewTest}/index.html +0 -0
  52. /package/web/{requestTestForm → requestNewTestForm}/index.ts +0 -0
package/openapi.yaml CHANGED
@@ -2,7 +2,7 @@ openapi: 3.1.0
2
2
  info:
3
3
  title: Kilotest API
4
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: 2.1.0
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/requestTest:
813
+ /api/requestNewTest:
814
814
  post:
815
- operationId: requestTest
815
+ operationId: requestNewTest
816
816
  summary: Request that a page be tested
817
817
  requestBody:
818
818
  content:
@@ -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
- const: GET
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": "55.0.0",
3
+ "version": "57.1.0",
4
4
  "description": "Ensemble testing for front-end web quality",
5
5
  "type": "module",
6
6
  "main": "index.ts",
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
- '/requestTest.html',
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/requestTest returns an error, not a test-request response', async () => {
66
- const result = await get('/api/requestTest');
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
 
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/jrpool/kilotest",
7
7
  "source": "github"
8
8
  },
9
- "version": "2.1.0",
9
+ "version": "57.0.0",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
package/sitemap.xml CHANGED
@@ -3,9 +3,10 @@
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/requestTestForm.html</loc></url>
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
+ <url><loc>https://kilotest.com/privacy.html</loc></url>
9
10
  <url><loc>https://kilotest.com/openapi.yaml</loc></url>
10
11
  <url><loc>https://kilotest.com/llms.txt</loc></url>
11
12
  <url><loc>https://kilotest.com/llms-full.txt</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
- '/requestTest.html': '/requestTest.html',
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
- '/requestTest.html': {description: 'Smoke Test Page', url: 'https://smoketest.example.com', why: 'smoke test'},
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'},