@jrpool/kilotest 59.1.3 → 60.0.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 (64) hide show
  1. package/README.md +2 -5
  2. package/api/awaitTest.test.ts +9 -9
  3. package/api/awaitTest.ts +12 -12
  4. package/api/getReport.test.ts +4 -4
  5. package/api/getReport.ts +9 -9
  6. package/api/listDiagnoses.test.ts +14 -14
  7. package/api/listDiagnoses.ts +8 -8
  8. package/api/listIssues.test.ts +15 -15
  9. package/api/listIssues.ts +18 -20
  10. package/api/listPages.test.ts +2 -2
  11. package/api/listPages.ts +4 -4
  12. package/api/listViolators.test.ts +10 -10
  13. package/api/listViolators.ts +10 -10
  14. package/api/orderNewTest.test.ts +1 -2
  15. package/api/orderNewTest.ts +3 -4
  16. package/api/orderRetest.test.ts +10 -10
  17. package/api/orderRetest.ts +13 -14
  18. package/api/requestRetest.test.ts +11 -11
  19. package/api/requestRetest.ts +11 -11
  20. package/api/routes.ts +9 -11
  21. package/api/schemas.ts +18 -28
  22. package/api/util.test.ts +2 -2
  23. package/api/util.ts +7 -7
  24. package/capability.md +4 -4
  25. package/docs/AI-TOOLS.md +45 -5
  26. package/docs/decisions/009-report-id.md +16 -0
  27. package/index.test.ts +91 -41
  28. package/index.ts +66 -15
  29. package/lhm.plugin.json +33 -119
  30. package/llms-full.txt +18 -24
  31. package/llms.txt +12 -12
  32. package/mcp.test.ts +11 -20
  33. package/mcp.ts +18 -18
  34. package/openapi-3.0.yaml +1847 -0
  35. package/openapi.yaml +38 -97
  36. package/package.json +8 -2
  37. package/routing.test.ts +1 -1
  38. package/scripts/generate-openapi.ts +83 -1
  39. package/scripts/postPR.ts +89 -0
  40. package/scripts/prePR.ts +64 -0
  41. package/server.json +1 -1
  42. package/util.test.ts +32 -33
  43. package/util.ts +47 -43
  44. package/web/hideReportForm/index.ts +5 -6
  45. package/web/listDiagnoses/index.ts +4 -5
  46. package/web/listDiagnoses/listDiagnoses.test.ts +13 -13
  47. package/web/listIssues/index.ts +11 -12
  48. package/web/listIssues/listIssues.test.ts +24 -24
  49. package/web/listPages/index.ts +2 -2
  50. package/web/listPages/listPages.test.ts +2 -2
  51. package/web/listTopIssues/index.ts +2 -2
  52. package/web/listViolators/index.ts +5 -6
  53. package/web/listViolators/listViolators.test.ts +12 -12
  54. package/web/reannotate/index.ts +3 -3
  55. package/web/reannotateForm/index.ts +1 -2
  56. package/web/reportDeletion.ts +9 -12
  57. package/web/requestRetest/index.ts +2 -2
  58. package/web/requestRetest/requestRetest.test.ts +7 -7
  59. package/web/requestRetestForm/index.html +2 -2
  60. package/web/requestRetestForm/index.ts +3 -4
  61. package/web/requestRetestForm/requestRetestForm.test.ts +7 -8
  62. package/web/unhideReportForm/index.ts +4 -6
  63. package/web/util.test.ts +29 -29
  64. package/web/util.ts +1 -1
package/lhm.plugin.json CHANGED
@@ -125,7 +125,7 @@
125
125
  "properties": {
126
126
  "identifier": {
127
127
  "type": "string",
128
- "description": "timeStamp-jobID identifier of the report."
128
+ "description": "Identifier of the report (example: 260503T0432-x9z)."
129
129
  },
130
130
  "completion date and time": {
131
131
  "type": "string"
@@ -419,18 +419,13 @@
419
419
  "inputSchema": {
420
420
  "type": "object",
421
421
  "properties": {
422
- "timeStamp": {
422
+ "reportID": {
423
423
  "type": "string",
424
- "description": "Timestamp of the report in YYMMDDTHHmm format (example: 260503T0432)"
425
- },
426
- "jobID": {
427
- "type": "string",
428
- "description": "Job identifier of the report (example: x9z)"
424
+ "description": "Identifier of the report (example: 260503T0432-x9z)"
429
425
  }
430
426
  },
431
427
  "required": [
432
- "timeStamp",
433
- "jobID"
428
+ "reportID"
434
429
  ],
435
430
  "$schema": "http://json-schema.org/draft-07/schema#"
436
431
  },
@@ -496,7 +491,7 @@
496
491
  "properties": {
497
492
  "identifier": {
498
493
  "type": "string",
499
- "description": "timeStamp-jobID identifier of the report."
494
+ "description": "Identifier of the report (example: 260503T0432-x9z)."
500
495
  },
501
496
  "completion date and time": {
502
497
  "type": "string"
@@ -1073,7 +1068,7 @@
1073
1068
  "properties": {
1074
1069
  "identifier": {
1075
1070
  "type": "string",
1076
- "description": "timeStamp-jobID identifier of the report."
1071
+ "description": "Identifier of the report (example: 260503T0432-x9z)."
1077
1072
  },
1078
1073
  "completion date and time": {
1079
1074
  "type": "string"
@@ -1162,19 +1157,14 @@
1162
1157
  "type": "string",
1163
1158
  "description": "Issue identifier (example: contrastPoor)"
1164
1159
  },
1165
- "timeStamp": {
1166
- "type": "string",
1167
- "description": "Timestamp of the report in YYMMDDTHHmm format (example: 260503T0432)"
1168
- },
1169
- "jobID": {
1160
+ "reportID": {
1170
1161
  "type": "string",
1171
- "description": "Job identifier of the report (example: x9z)"
1162
+ "description": "Identifier of the report (example: 260503T0432-x9z)"
1172
1163
  }
1173
1164
  },
1174
1165
  "required": [
1175
1166
  "issueID",
1176
- "timeStamp",
1177
- "jobID"
1167
+ "reportID"
1178
1168
  ],
1179
1169
  "$schema": "http://json-schema.org/draft-07/schema#"
1180
1170
  },
@@ -1512,7 +1502,7 @@
1512
1502
  "properties": {
1513
1503
  "identifier": {
1514
1504
  "type": "string",
1515
- "description": "timeStamp-jobID identifier of the report."
1505
+ "description": "Identifier of the report (example: 260503T0432-x9z)."
1516
1506
  },
1517
1507
  "completion date and time": {
1518
1508
  "type": "string"
@@ -1672,20 +1662,15 @@
1672
1662
  "type": "string",
1673
1663
  "description": "Issue identifier (example: contrastPoor)"
1674
1664
  },
1675
- "timeStamp": {
1665
+ "reportID": {
1676
1666
  "type": "string",
1677
- "description": "Timestamp of the report in YYMMDDTHHmm format (example: 260503T0432)"
1678
- },
1679
- "jobID": {
1680
- "type": "string",
1681
- "description": "Job identifier of the report (example: x9z)"
1667
+ "description": "Identifier of the report (example: 260503T0432-x9z)"
1682
1668
  }
1683
1669
  },
1684
1670
  "required": [
1685
1671
  "catalogIndex",
1686
1672
  "issueID",
1687
- "timeStamp",
1688
- "jobID"
1673
+ "reportID"
1689
1674
  ],
1690
1675
  "$schema": "http://json-schema.org/draft-07/schema#"
1691
1676
  },
@@ -2062,7 +2047,7 @@
2062
2047
  "properties": {
2063
2048
  "identifier": {
2064
2049
  "type": "string",
2065
- "description": "timeStamp-jobID identifier of the report."
2050
+ "description": "Identifier of the report (example: 260503T0432-x9z)."
2066
2051
  },
2067
2052
  "completion date and time": {
2068
2053
  "type": "string"
@@ -2188,18 +2173,13 @@
2188
2173
  "inputSchema": {
2189
2174
  "type": "object",
2190
2175
  "properties": {
2191
- "timeStamp": {
2176
+ "reportID": {
2192
2177
  "type": "string",
2193
- "description": "Timestamp of the report in YYMMDDTHHmm format (example: 260503T0432)"
2194
- },
2195
- "jobID": {
2196
- "type": "string",
2197
- "description": "Job identifier of the report (example: x9z)"
2178
+ "description": "Identifier of the report (example: 260503T0432-x9z)"
2198
2179
  }
2199
2180
  },
2200
2181
  "required": [
2201
- "timeStamp",
2202
- "jobID"
2182
+ "reportID"
2203
2183
  ],
2204
2184
  "$schema": "http://json-schema.org/draft-07/schema#"
2205
2185
  },
@@ -2810,13 +2790,9 @@
2810
2790
  "inputSchema": {
2811
2791
  "type": "object",
2812
2792
  "properties": {
2813
- "timeStamp": {
2814
- "type": "string",
2815
- "description": "Timestamp of the latest report about the page in YYMMDDTHHmm format (example: 260503T0432)"
2816
- },
2817
- "jobID": {
2793
+ "reportID": {
2818
2794
  "type": "string",
2819
- "description": "Job identifier of the latest report about the page (example: x9z)"
2795
+ "description": "Identifier of the latest report about the page (example: 260503T0432-x9z)"
2820
2796
  },
2821
2797
  "reason": {
2822
2798
  "type": "string",
@@ -2824,8 +2800,7 @@
2824
2800
  }
2825
2801
  },
2826
2802
  "required": [
2827
- "timeStamp",
2828
- "jobID",
2803
+ "reportID",
2829
2804
  "reason"
2830
2805
  ],
2831
2806
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -3603,7 +3578,8 @@
3603
3578
  "report identifier": {
3604
3579
  "anyOf": [
3605
3580
  {
3606
- "$ref": "#/definitions/ReportIdentifier"
3581
+ "type": "string",
3582
+ "description": "Identifier of the report, to pass to listIssues once the report is ready (example: 260503T0432-x9z)."
3607
3583
  },
3608
3584
  {
3609
3585
  "type": "null"
@@ -3779,24 +3755,6 @@
3779
3755
  "date and time"
3780
3756
  ],
3781
3757
  "additionalProperties": false
3782
- },
3783
- "ReportIdentifier": {
3784
- "type": "object",
3785
- "properties": {
3786
- "timeStamp": {
3787
- "type": "string",
3788
- "description": "Timestamp to pass to listIssues once the report is ready."
3789
- },
3790
- "jobID": {
3791
- "type": "string",
3792
- "description": "Job identifier to pass to listIssues once the report is ready."
3793
- }
3794
- },
3795
- "required": [
3796
- "timeStamp",
3797
- "jobID"
3798
- ],
3799
- "additionalProperties": false
3800
3758
  }
3801
3759
  }
3802
3760
  },
@@ -3817,13 +3775,9 @@
3817
3775
  "inputSchema": {
3818
3776
  "type": "object",
3819
3777
  "properties": {
3820
- "timeStamp": {
3778
+ "reportID": {
3821
3779
  "type": "string",
3822
- "description": "Timestamp of the latest report about the page in YYMMDDTHHmm format (example: 260503T0432)"
3823
- },
3824
- "jobID": {
3825
- "type": "string",
3826
- "description": "Job identifier of the latest report about the page (example: x9z)"
3780
+ "description": "Identifier of the latest report about the page (example: 260503T0432-x9z)"
3827
3781
  },
3828
3782
  "reason": {
3829
3783
  "type": "string",
@@ -3831,8 +3785,7 @@
3831
3785
  }
3832
3786
  },
3833
3787
  "required": [
3834
- "timeStamp",
3835
- "jobID",
3788
+ "reportID",
3836
3789
  "reason"
3837
3790
  ],
3838
3791
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -3977,7 +3930,8 @@
3977
3930
  "report identifier": {
3978
3931
  "anyOf": [
3979
3932
  {
3980
- "$ref": "#/definitions/ReportIdentifier"
3933
+ "type": "string",
3934
+ "description": "Identifier of the report, to pass to listIssues once the report is ready (example: 260503T0432-x9z)."
3981
3935
  },
3982
3936
  {
3983
3937
  "type": "null"
@@ -4153,24 +4107,6 @@
4153
4107
  "date and time"
4154
4108
  ],
4155
4109
  "additionalProperties": false
4156
- },
4157
- "ReportIdentifier": {
4158
- "type": "object",
4159
- "properties": {
4160
- "timeStamp": {
4161
- "type": "string",
4162
- "description": "Timestamp to pass to listIssues once the report is ready."
4163
- },
4164
- "jobID": {
4165
- "type": "string",
4166
- "description": "Job identifier to pass to listIssues once the report is ready."
4167
- }
4168
- },
4169
- "required": [
4170
- "timeStamp",
4171
- "jobID"
4172
- ],
4173
- "additionalProperties": false
4174
4110
  }
4175
4111
  }
4176
4112
  },
@@ -4191,18 +4127,13 @@
4191
4127
  "inputSchema": {
4192
4128
  "type": "object",
4193
4129
  "properties": {
4194
- "timeStamp": {
4195
- "type": "string",
4196
- "description": "Timestamp of the ordered job, from the report identifier returned by orderNewTest, in YYMMDDTHHmm format (example: 260503T0432)"
4197
- },
4198
- "jobID": {
4130
+ "reportID": {
4199
4131
  "type": "string",
4200
- "description": "Job identifier of the ordered job, from the report identifier returned by orderNewTest (example: x9z)"
4132
+ "description": "Report identifier returned by orderNewTest or orderRetest (example: 260503T0432-x9z)"
4201
4133
  }
4202
4134
  },
4203
4135
  "required": [
4204
- "timeStamp",
4205
- "jobID"
4136
+ "reportID"
4206
4137
  ],
4207
4138
  "$schema": "http://json-schema.org/draft-07/schema#"
4208
4139
  },
@@ -4285,7 +4216,8 @@
4285
4216
  "type": "object",
4286
4217
  "properties": {
4287
4218
  "report identifier": {
4288
- "$ref": "#/definitions/ReportIdentifier"
4219
+ "type": "string",
4220
+ "description": "Identifier of the report, to pass to listIssues once the report is ready (example: 260503T0432-x9z)."
4289
4221
  }
4290
4222
  },
4291
4223
  "required": [
@@ -4476,24 +4408,6 @@
4476
4408
  "date and time"
4477
4409
  ],
4478
4410
  "additionalProperties": false
4479
- },
4480
- "ReportIdentifier": {
4481
- "type": "object",
4482
- "properties": {
4483
- "timeStamp": {
4484
- "type": "string",
4485
- "description": "Timestamp to pass to listIssues once the report is ready."
4486
- },
4487
- "jobID": {
4488
- "type": "string",
4489
- "description": "Job identifier to pass to listIssues once the report is ready."
4490
- }
4491
- },
4492
- "required": [
4493
- "timeStamp",
4494
- "jobID"
4495
- ],
4496
- "additionalProperties": false
4497
4411
  }
4498
4412
  }
4499
4413
  },
@@ -4509,5 +4423,5 @@
4509
4423
  }
4510
4424
  }
4511
4425
  ],
4512
- "version": "59.1.3"
4426
+ "version": "59.1.4"
4513
4427
  }
package/llms-full.txt CHANGED
@@ -56,11 +56,11 @@ Kilotest offers a comprehensive suite of capabilities to users via its web UI:
56
56
 
57
57
  - [Home page](https://kilotest.com/)
58
58
  - [Get a list of all tested pages, each linked to its latest report](https://kilotest.com/listPages.html)
59
- - Get statistics about issues reported in one report, and a history of all reports about the same page: `https://kilotest.com/listIssues.html/{timeStamp}/{jobID}`
60
- - Get details about one issue reported in one report: `https://kilotest.com/listViolators.html/{issueID}/{timeStamp}/{jobID}`
61
- - Get diagnoses by rule engines of rule violations for one HTML element exhibiting one issue in one report: `https://kilotest.com/listDiagnoses.html/{issueID}/{timeStamp}/{jobID}/{catalogIndex}`
59
+ - Get statistics about issues reported in one report, and a history of all reports about the same page: `https://kilotest.com/listIssues.html/{reportID}`
60
+ - Get details about one issue reported in one report: `https://kilotest.com/listViolators.html/{issueID}/{reportID}`
61
+ - Get diagnoses by rule engines of rule violations for one HTML element exhibiting one issue in one report: `https://kilotest.com/listDiagnoses.html/{issueID}/{reportID}/{catalogIndex}`
62
62
  - [Request the testing of a not-yet-tested page](https://kilotest.com/requestNewTestForm.html)
63
- - Request the retesting of a previously tested page: `https://kilotest.com/requestRetestForm.html/{timeStamp}/{jobID}`
63
+ - Request the retesting of a previously tested page: `https://kilotest.com/requestRetestForm.html/{reportID}`
64
64
  - [Get statistics about frequently reported issues across all pages](https://kilotest.com/listTopIssues.html)
65
65
  - [Get a list of the operations that Kilotest managers are authorized to request](https://kilotest.com/manage.html)
66
66
  - [Tutorial, “Accessibility testing strategies”](https://kilotest.com/tutorialWeb.html)
@@ -80,29 +80,26 @@ Kilotest offers these tools:
80
80
  - `listIssues`
81
81
  - method: `GET`
82
82
  - purpose: list all issues in one report, and all reports about the same page, from oldest to latest
83
- - path: `/api/listIssues/{timeStamp}/{jobID}`
83
+ - path: `/api/listIssues/{reportID}`
84
84
  - parameters
85
- - `timeStamp`: initial segment of report identifier
86
- - `jobID`: final segment of report identifier
85
+ - `reportID`: identifier of the report, with YYMMDDTHHmm format for its initial segment (example: 260503T0432-x9z)
87
86
  - source of parameters: response to a `listPages` request, or the history of reports about the page in the response to a `listIssues` request
88
87
  - `listViolators`
89
88
  - method: `GET`
90
89
  - purpose: list all elements exhibiting one issue in one report
91
- - path: `/api/listViolators/{issueID}/{timeStamp}/{jobID}`
90
+ - path: `/api/listViolators/{issueID}/{reportID}`
92
91
  - parameters
93
92
  - `issueID`: identifier of the issue
94
- - `timeStamp`: initial segment of report identifier
95
- - `jobID`: final segment of report identifier
93
+ - `reportID`: identifier of the report, with YYMMDDTHHmm format for its initial segment (example: 260503T0432-x9z)
96
94
  - source of parameters: response to a `listIssues` request
97
95
  - `listDiagnoses`
98
96
  - method: `GET`
99
97
  - purpose: list all diagnoses of one issue exhibited by one element in one report
100
- - path: `/api/listDiagnoses/{catalogIndex}/{issueID}/{timeStamp}/{jobID}`
98
+ - path: `/api/listDiagnoses/{catalogIndex}/{issueID}/{reportID}`
101
99
  - parameters
102
100
  - `catalogIndex`: index of the catalog entry of the element
103
101
  - `issueID`: identifier of the issue
104
- - `timeStamp`: initial segment of report identifier
105
- - `jobID`: final segment of report identifier
102
+ - `reportID`: identifier of the report, with YYMMDDTHHmm format for its initial segment (example: 260503T0432-x9z)
106
103
  - source of parameters: response to a `listViolators` request
107
104
  - `requestNewTest`
108
105
  - method: `POST`
@@ -115,10 +112,9 @@ Kilotest offers these tools:
115
112
  - `requestRetest`
116
113
  - method: `POST`
117
114
  - purpose: request retesting of one web page about which a report is available
118
- - path: `/api/requestRetest/{timeStamp}/{jobID}`
115
+ - path: `/api/requestRetest/{reportID}`
119
116
  - parameters
120
- - `timeStamp`: initial segment of report identifier
121
- - `jobID`: final segment of report identifier
117
+ - `reportID`: identifier of the report, with YYMMDDTHHmm format for its initial segment (example: 260503T0432-x9z)
122
118
  - source of parameters: response to a `listIssues` request
123
119
  - payload properties
124
120
  - `reason`: reason for retesting the page
@@ -136,25 +132,23 @@ Kilotest offers these tools:
136
132
  - `description`: description of the page to be tested
137
133
  - `URL`: URL of the page to be tested
138
134
  - `reason`: reason for testing the page
139
- - response includes a report identifier (`timeStamp` and `jobID`) once the job is enqueued
135
+ - response includes a report identifier (`reportID`) once the job is enqueued
140
136
  - `orderRetest`
141
137
  - method: `POST`
142
138
  - purpose: order immediate, automatically approved retesting of one web page about which a report is available, instead of waiting for manual approval
143
- - path: `/api/orderRetest/{timeStamp}/{jobID}`
139
+ - path: `/api/orderRetest/{reportID}`
144
140
  - parameters
145
- - `timeStamp`: initial segment of report identifier
146
- - `jobID`: final segment of report identifier
141
+ - `reportID`: identifier of the report, with YYMMDDTHHmm format for its initial segment (example: 260503T0432-x9z)
147
142
  - source of parameters: response to a `listIssues` request
148
143
  - payload properties
149
144
  - `reason`: reason for retesting the page
150
- - response includes a report identifier (`timeStamp` and `jobID`) once the job is enqueued
145
+ - response includes a report identifier (`reportID`) once the job is enqueued
151
146
  - `awaitTest`
152
147
  - method: `POST`
153
148
  - purpose: wait for a job ordered via `orderNewTest` or `orderRetest` to complete; blocks until the report is ready, the job fails, or a maximum wait time elapses, then returns
154
- - path: `/api/awaitTest/{timeStamp}/{jobID}`
149
+ - path: `/api/awaitTest/{reportID}`
155
150
  - parameters
156
- - `timeStamp`: initial segment of the report identifier returned by `orderNewTest` or `orderRetest`
157
- - `jobID`: final segment of the report identifier returned by `orderNewTest` or `orderRetest`
151
+ - `reportID`: the report identifier returned by `orderNewTest` or `orderRetest` (example: 260503T0432-x9z)
158
152
  - source of parameters: response to an `orderNewTest` or `orderRetest` request
159
153
  - caveat: testing typically takes 2 to 4 minutes; sends no interim notices while waiting
160
154
 
package/llms.txt CHANGED
@@ -5,16 +5,16 @@ Kilotest integrates an ensemble of 12 rule engines, with about 1,300 rules, to t
5
5
  ## API
6
6
 
7
7
  - [List all tested pages, each with its latest report](/api/listPages) (`GET`)
8
- - List all issues in one report, and all reports about the same page: `/api/listIssues/{timeStamp}/{jobID}` (`GET`)
9
- - List all elements exhibiting one issue in one report: `/api/listViolators/{issueID}/{timeStamp}/{jobID}` (`GET`)
10
- - List all diagnoses of one element exhibiting one issue in one report: `/api/listDiagnoses/{catalogIndex}/{issueID}/{timeStamp}/{jobID}` (`GET`)
11
- - Get one full report in JSON: `/api/getReport/{timeStamp}/{jobID}` (`GET`)
8
+ - List all issues in one report, and all reports about the same page: `/api/listIssues/{reportID}` (`GET`)
9
+ - List all elements exhibiting one issue in one report: `/api/listViolators/{issueID}/{reportID}` (`GET`)
10
+ - List all diagnoses of one element exhibiting one issue in one report: `/api/listDiagnoses/{catalogIndex}/{issueID}/{reportID}` (`GET`)
11
+ - Get one full report in JSON: `/api/getReport/{reportID}` (`GET`)
12
12
  - Request testing of a web page: `/api/requestNewTest` (`POST`)
13
- - Request retesting of a web page: `/api/requestRetest/{timeStamp}/{jobID}` (`POST`)
13
+ - Request retesting of a web page: `/api/requestRetest/{reportID}` (`POST`)
14
14
  - Request adding or improving a feature: `/api/requestFeature` (`POST`)
15
15
  - Order immediate, automatically approved testing of a web page: `/api/orderNewTest` (`POST`)
16
- - Order immediate, automatically approved retesting of a web page: `/api/orderRetest/{timeStamp}/{jobID}` (`POST`)
17
- - Wait for a job ordered via orderNewTest or orderRetest to complete: `/api/awaitTest/{timeStamp}/{jobID}` (`POST`)
16
+ - Order immediate, automatically approved retesting of a web page: `/api/orderRetest/{reportID}` (`POST`)
17
+ - Wait for a job ordered via orderNewTest or orderRetest to complete: `/api/awaitTest/{reportID}` (`POST`)
18
18
 
19
19
  ## MCP Server
20
20
 
@@ -23,12 +23,12 @@ Kilotest integrates an ensemble of 12 rule engines, with about 1,300 rules, to t
23
23
  ## Web UI
24
24
 
25
25
  - [List all tested pages, each linked to its latest report](https://kilotest.com/listPages.html)
26
- - List all issues in one report, and all reports about the same page: `https://kilotest.com/listIssues.html/{timeStamp}/{jobID}`
27
- - List all elements exhibiting one issue in one report: `https://kilotest.com/listViolators.html/{issueID}/{timeStamp}/{jobID}`
28
- - List all diagnoses of one element exhibiting one issue in one report: `https://kilotest.com/listDiagnoses.html/{issueID}/{timeStamp}/{jobID}/{catalogIndex}`
29
- - Get one full report in JSON: `https://kilotest.com/fullReport.json/{timeStamp}/{jobID}`
26
+ - List all issues in one report, and all reports about the same page: `https://kilotest.com/listIssues.html/{reportID}`
27
+ - List all elements exhibiting one issue in one report: `https://kilotest.com/listViolators.html/{issueID}/{reportID}`
28
+ - List all diagnoses of one element exhibiting one issue in one report: `https://kilotest.com/listDiagnoses.html/{issueID}/{reportID}/{catalogIndex}`
29
+ - Get one full report in JSON: `https://kilotest.com/fullReport.json/{reportID}`
30
30
  - [Request testing of a web page](https://kilotest.com/requestNewTestForm.html)
31
- - Request retesting of a web page: `https://kilotest.com/requestRetestForm.html/{timeStamp}/{jobID}`
31
+ - Request retesting of a web page: `https://kilotest.com/requestRetestForm.html/{reportID}`
32
32
  - [List the operations that Kilotest managers are authorized to request](https://kilotest.com/manage.html)
33
33
  - [Provide statistics about frequently reported issues across all pages](https://kilotest.com/listTopIssues.html)
34
34
  - [Tutorial, “Accessibility testing strategies”](https://kilotest.com/tutorial.html)
package/mcp.test.ts CHANGED
@@ -111,8 +111,7 @@ test('listIssues handler returns content and structuredContent for a valid repor
111
111
  const server = createMCPServer();
112
112
  const countBefore = getToolCallCount('listIssues');
113
113
  const result = await (server as any)._registeredTools.listIssues.handler({
114
- timeStamp: '260101T0000',
115
- jobID: 'mix'
114
+ reportID: '260101T0000-mix'
116
115
  });
117
116
  assert.ok(result.content);
118
117
  assert.equal(result.content[0].type, 'text');
@@ -125,8 +124,7 @@ test('listViolators handler returns content and structuredContent for a valid is
125
124
  const countBefore = getToolCallCount('listViolators');
126
125
  const result = await (server as any)._registeredTools.listViolators.handler({
127
126
  issueID: 'linkNoText',
128
- timeStamp: '260101T0000',
129
- jobID: 'mix'
127
+ reportID: '260101T0000-mix'
130
128
  });
131
129
  assert.ok(result.content);
132
130
  assert.equal(result.content[0].type, 'text');
@@ -140,8 +138,7 @@ test('listDiagnoses handler returns content and structuredContent for a valid di
140
138
  const result = await (server as any)._registeredTools.listDiagnoses.handler({
141
139
  catalogIndex: '0',
142
140
  issueID: 'linkNoText',
143
- timeStamp: '260101T0000',
144
- jobID: 'mix'
141
+ reportID: '260101T0000-mix'
145
142
  });
146
143
  assert.ok(result.content);
147
144
  assert.equal(result.content[0].type, 'text');
@@ -153,8 +150,7 @@ test('getReport handler returns content and structuredContent for a valid report
153
150
  const server = createMCPServer();
154
151
  const countBefore = getToolCallCount('getReport');
155
152
  const result = await (server as any)._registeredTools.getReport.handler({
156
- timeStamp: '260101T0000',
157
- jobID: 'mix'
153
+ reportID: '260101T0000-mix'
158
154
  });
159
155
  assert.ok(result.content);
160
156
  assert.equal(result.content[0].type, 'text');
@@ -180,8 +176,7 @@ test('requestRetest handler returns content and structuredContent for a valid re
180
176
  const server = createMCPServer();
181
177
  const countBefore = getToolCallCount('requestRetest');
182
178
  const result = await (server as any)._registeredTools.requestRetest.handler({
183
- timeStamp: '260101T0000',
184
- jobID: 'mix',
179
+ reportID: '260101T0000-mix',
185
180
  reason: 'Because the report is obsolete'
186
181
  });
187
182
  assert.ok(result.content);
@@ -217,7 +212,7 @@ test('orderNewTest handler returns content and structuredContent, and enqueues a
217
212
  assert.equal(getToolCallCount('orderNewTest'), countBefore + 1);
218
213
  const reportIdentifier = result.structuredContent['response content']['disposition of your order']['report identifier'];
219
214
  assert.ok(reportIdentifier);
220
- const queuedPath = `${jobsPath()}/queue/${reportIdentifier.timeStamp}-${reportIdentifier.jobID}.json`;
215
+ const queuedPath = `${jobsPath()}/queue/${reportIdentifier}.json`;
221
216
  fs.unlinkSync(queuedPath);
222
217
  });
223
218
 
@@ -228,8 +223,7 @@ test('orderRetest handler returns content and structuredContent, and enqueues a
228
223
  // 260202T0000-new is the latest report of "Mixed Outcomes" (260101T0000-mix is an
229
224
  // earlier, superseded report of the same page), so this order is accepted.
230
225
  const result = await (server as any)._registeredTools.orderRetest.handler({
231
- timeStamp: '260202T0000',
232
- jobID: 'new',
226
+ reportID: '260202T0000-new',
233
227
  reason: 'Because the report is obsolete'
234
228
  });
235
229
  assert.ok(result.content);
@@ -238,7 +232,7 @@ test('orderRetest handler returns content and structuredContent, and enqueues a
238
232
  assert.equal(getToolCallCount('orderRetest'), countBefore + 1);
239
233
  const reportIdentifier = result.structuredContent['response content']['disposition of your order']['report identifier'];
240
234
  assert.ok(reportIdentifier);
241
- const queuedPath = `${jobsPath()}/queue/${reportIdentifier.timeStamp}-${reportIdentifier.jobID}.json`;
235
+ const queuedPath = `${jobsPath()}/queue/${reportIdentifier}.json`;
242
236
  fs.unlinkSync(queuedPath);
243
237
  });
244
238
 
@@ -246,8 +240,7 @@ test('awaitTest handler returns content and structuredContent for an already-com
246
240
  const server = createMCPServer();
247
241
  const countBefore = getToolCallCount('awaitTest');
248
242
  const result = await (server as any)._registeredTools.awaitTest.handler({
249
- timeStamp: '260101T0000',
250
- jobID: 'mix'
243
+ reportID: '260101T0000-mix'
251
244
  });
252
245
  assert.ok(result.content);
253
246
  assert.equal(result.content[0].type, 'text');
@@ -259,8 +252,7 @@ test('awaitTest handler returns content and structuredContent for an already-com
259
252
  test('listIssues handler returns an error for a nonexistent report', async () => {
260
253
  const server = createMCPServer();
261
254
  const result = await (server as any)._registeredTools.listIssues.handler({
262
- timeStamp: '990101T0000',
263
- jobID: 'xxx'
255
+ reportID: '990101T0000-xxx'
264
256
  });
265
257
  const reportBasics = result.structuredContent['response content']['basics about the report'];
266
258
  assert.ok(reportBasics.error);
@@ -270,8 +262,7 @@ test('listViolators handler returns an error for an unknown issue', async () =>
270
262
  const server = createMCPServer();
271
263
  const result = await (server as any)._registeredTools.listViolators.handler({
272
264
  issueID: 'nonexistentIssue',
273
- timeStamp: '260101T0000',
274
- jobID: 'mix'
265
+ reportID: '260101T0000-mix'
275
266
  });
276
267
  const issueBasics = result.structuredContent['response content']['basics about the issue'];
277
268
  assert.ok(issueBasics.error);