@jrpool/kilotest 58.2.0 → 59.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 (53) hide show
  1. package/api/listIssues.test.ts +32 -0
  2. package/api/listIssues.ts +38 -8
  3. package/api/listPages.test.ts +92 -0
  4. package/api/listPages.ts +93 -0
  5. package/api/orderNewTest.test.ts +1 -1
  6. package/api/orderNewTest.ts +4 -4
  7. package/api/requestNewTest.ts +6 -6
  8. package/api/requestRetest.ts +2 -2
  9. package/api/routes.test.ts +1 -1
  10. package/api/routes.ts +5 -5
  11. package/api/schemas.ts +24 -7
  12. package/api/util.ts +26 -45
  13. package/apiIntegration.test.ts +5 -5
  14. package/docs/SERVICE.md +16 -5
  15. package/index.html +1 -1
  16. package/index.test.ts +30 -18
  17. package/index.ts +22 -11
  18. package/lhm.plugin.json +1433 -141
  19. package/linkValidation.test.ts +2 -2
  20. package/llms-full.txt +9 -9
  21. package/llms.txt +4 -4
  22. package/mcp.test.ts +8 -8
  23. package/mcp.ts +14 -14
  24. package/openapi.yaml +84 -30
  25. package/package.json +1 -1
  26. package/routing.test.ts +5 -5
  27. package/server.json +1 -1
  28. package/sitemap.xml +1 -1
  29. package/smokeTest.ts +2 -2
  30. package/style.css +8 -8
  31. package/test/fixtures/buildFixtures.ts +1 -1
  32. package/util.test.ts +71 -12
  33. package/util.ts +61 -12
  34. package/web/enqueueForm/index.html +1 -1
  35. package/web/hideReportForm/hideReportForm.test.ts +5 -0
  36. package/web/hideReportForm/index.ts +9 -6
  37. package/web/listIssues/index.html +2 -1
  38. package/web/listIssues/index.ts +45 -3
  39. package/web/listIssues/listIssues.test.ts +76 -0
  40. package/web/{listReports → listPages}/index.html +1 -2
  41. package/web/listPages/index.ts +99 -0
  42. package/web/listPages/listPages.test.ts +196 -0
  43. package/web/metrics/metrics.test.ts +2 -2
  44. package/web/requestRetestForm/index.ts +4 -2
  45. package/web/requestRetestForm/requestRetestForm.test.ts +11 -0
  46. package/web/unhideReportForm/index.ts +9 -6
  47. package/web/unhideReportForm/unhideReportForm.test.ts +8 -5
  48. package/web/util.test.ts +85 -11
  49. package/web/util.ts +26 -28
  50. package/api/listReports.test.ts +0 -109
  51. package/api/listReports.ts +0 -87
  52. package/web/listReports/index.ts +0 -182
  53. package/web/listReports/listReports.test.ts +0 -300
@@ -41,7 +41,7 @@ const htmlRoutes = [
41
41
  '/tutorialAI.html',
42
42
  '/tutorialWebComment.html',
43
43
  '/tutorialAIComment.html',
44
- '/listReports.html',
44
+ '/listPages.html',
45
45
  '/listTopIssues.html',
46
46
  '/listIssues.html',
47
47
  '/listDiagnoses.html',
@@ -178,7 +178,7 @@ test('Internal links in index.html resolve to expected paths', () => {
178
178
  const expectedLinks = [
179
179
  '/tutorialWeb.html',
180
180
  '/tutorialAI.html',
181
- '/listReports.html',
181
+ '/listPages.html',
182
182
  '/listTopIssues.html',
183
183
  '/manage.html',
184
184
  '/mcp',
package/llms-full.txt CHANGED
@@ -59,8 +59,8 @@ In the marketplace for MCP servers that test for front-end quality, all servers
59
59
  Kilotest offers a comprehensive suite of capabilities to users via its web UI:
60
60
 
61
61
  - [Home page](https://kilotest.com/)
62
- - [Get summary test results for all tested pages](https://kilotest.com/listReports.html)
63
- - Get statistics about issues reported in one report: `https://kilotest.com/listIssues.html/{timeStamp}/{jobID}`
62
+ - [Get a list of all tested pages, each linked to its latest report](https://kilotest.com/listPages.html)
63
+ - 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}`
64
64
  - Get details about one issue reported in one report: `https://kilotest.com/listViolators.html/{issueID}/{timeStamp}/{jobID}`
65
65
  - 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}`
66
66
  - [Recommend the testing of a not-yet-tested page](https://kilotest.com/requestNewTestForm.html)
@@ -76,19 +76,19 @@ In the specifications below, the term `report` refers to the records of one sess
76
76
 
77
77
  Kilotest offers these tools:
78
78
 
79
- - `listReports`
79
+ - `listPages`
80
80
  - method: `GET`
81
- - purpose: list all available reports
82
- - path: `/api/listReports`
81
+ - purpose: list all tested pages, each with its latest report and its number of reports
82
+ - path: `/api/listPages`
83
83
  - caveat: Cached results are likely to be stale and should not be used
84
84
  - `listIssues`
85
85
  - method: `GET`
86
- - purpose: list all issues in one report
86
+ - purpose: list all issues in one report, and all reports about the same page, from oldest to latest
87
87
  - path: `/api/listIssues/{timeStamp}/{jobID}`
88
88
  - parameters
89
89
  - `timeStamp`: initial segment of report identifier
90
90
  - `jobID`: final segment of report identifier
91
- - source of parameters: response to a `listReports` request
91
+ - source of parameters: response to a `listPages` request, or the history of reports about the page in the response to a `listIssues` request
92
92
  - `listViolators`
93
93
  - method: `GET`
94
94
  - purpose: list all elements exhibiting one issue in one report
@@ -173,8 +173,8 @@ When you request a test or a retest:
173
173
  - approval followed by the requested testing
174
174
  - rejection
175
175
  - how to confirm approval
176
- - check test completion by calling `listReports` and looking for the page and completion date in the list
177
- - you advise the user to check in approximately 1 day for the test results on the Kilotest website, starting at `https://kilotest.com/listReports.html`
176
+ - check test completion by calling `listPages` and looking for the page and the completion date of its latest report in the list
177
+ - you advise the user to check in approximately 1 day for the test results on the Kilotest website, starting at `https://kilotest.com/listPages.html`
178
178
 
179
179
  For immediate testing without waiting for manual approval, use `orderNewTest` or `orderRetest` instead of `requestNewTest` or `requestRetest`. Each enqueues the job right away and returns a report identifier along with a question about whether to wait for completion. To wait, call `awaitTest` with that identifier; it blocks until the report is ready, the job fails, or a maximum wait time elapses. To check later instead, call `listIssues` with the same identifier.
180
180
 
package/llms.txt CHANGED
@@ -4,8 +4,8 @@ Kilotest helps language models and AI platforms to give thorough, accurate and t
4
4
 
5
5
  ## API
6
6
 
7
- - [List all available reports](/api/listReports) (`GET`)
8
- - List all issues in one report: `/api/listIssues/{timeStamp}/{jobID}` (`GET`)
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
9
  - List all elements exhibiting one issue in one report: `/api/listViolators/{issueID}/{timeStamp}/{jobID}` (`GET`)
10
10
  - List all diagnoses of one element exhibiting one issue in one report: `/api/listDiagnoses/{catalogIndex}/{issueID}/{timeStamp}/{jobID}` (`GET`)
11
11
  - Get one full report in JSON: `/api/getReport/{timeStamp}/{jobID}` (`GET`)
@@ -22,8 +22,8 @@ Kilotest helps language models and AI platforms to give thorough, accurate and t
22
22
 
23
23
  ## Web UI
24
24
 
25
- - [List all available reports](https://kilotest.com/listReports.html)
26
- - List all issues in one report: `https://kilotest.com/listIssues.html/{timeStamp}/{jobID}`
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
27
  - List all elements exhibiting one issue in one report: `https://kilotest.com/listViolators.html/{issueID}/{timeStamp}/{jobID}`
28
28
  - List all diagnoses of one element exhibiting one issue in one report: `https://kilotest.com/listDiagnoses.html/{issueID}/{timeStamp}/{jobID}/{catalogIndex}`
29
29
  - Get one full report in JSON: `https://kilotest.com/fullReport.json/{timeStamp}/{jobID}`
package/mcp.test.ts CHANGED
@@ -43,7 +43,7 @@ test('createMCPServer registers all 12 tools', () => {
43
43
  assert.equal(toolNames.length, 12);
44
44
  assert.deepEqual(toolNames, [
45
45
  'getKilotestOverview',
46
- 'listReports',
46
+ 'listPages',
47
47
  'listIssues',
48
48
  'listViolators',
49
49
  'listDiagnoses',
@@ -97,14 +97,14 @@ test('client receives instructions, server description, and the overview resourc
97
97
  await server.close();
98
98
  });
99
99
 
100
- test('listReports handler returns content and structuredContent', async () => {
100
+ test('listPages handler returns content and structuredContent', async () => {
101
101
  const server = createMCPServer();
102
- const countBefore = getToolCallCount('listReports');
103
- const result = await (server as any)._registeredTools.listReports.handler({});
102
+ const countBefore = getToolCallCount('listPages');
103
+ const result = await (server as any)._registeredTools.listPages.handler({});
104
104
  assert.ok(result.content);
105
105
  assert.equal(result.content[0].type, 'text');
106
106
  assert.ok(result.structuredContent);
107
- assert.equal(getToolCallCount('listReports'), countBefore + 1);
107
+ assert.equal(getToolCallCount('listPages'), countBefore + 1);
108
108
  });
109
109
 
110
110
  test('listIssues handler returns content and structuredContent for a valid report', async () => {
@@ -369,7 +369,7 @@ test('handleMCP lists all 12 tools via tools/list', async () => {
369
369
  assert.equal(toolNames.length, 12);
370
370
  assert.deepEqual(toolNames, [
371
371
  'getKilotestOverview',
372
- 'listReports',
372
+ 'listPages',
373
373
  'listIssues',
374
374
  'listViolators',
375
375
  'listDiagnoses',
@@ -387,12 +387,12 @@ test('handleMCP lists all 12 tools via tools/list', async () => {
387
387
  }
388
388
  });
389
389
 
390
- test('handleMCP executes listReports tool via tools/call', async () => {
390
+ test('handleMCP executes listPages tool via tools/call', async () => {
391
391
  const server = await startMCPServer();
392
392
  try {
393
393
  const port = server.address().port;
394
394
  const res = await sendMCPRequest(port, 'tools/call', {
395
- name: 'listReports',
395
+ name: 'listPages',
396
396
  arguments: {}
397
397
  }, 3);
398
398
  assert.equal(res.statusCode, 200);
package/mcp.ts CHANGED
@@ -9,7 +9,7 @@ import type {IncomingMessage, ServerResponse} from 'node:http';
9
9
  import {McpServer} from '@modelcontextprotocol/sdk/server/mcp.js';
10
10
  import {StreamableHTTPServerTransport} from '@modelcontextprotocol/sdk/server/streamableHttp.js';
11
11
  import * as getReportAPI from './api/getReport.ts';
12
- import * as listReportsAPI from './api/listReports.ts';
12
+ import * as listPagesAPI from './api/listPages.ts';
13
13
  import * as listIssuesAPI from './api/listIssues.ts';
14
14
  import * as listViolatorsAPI from './api/listViolators.ts';
15
15
  import * as listDiagnosesAPI from './api/listDiagnoses.ts';
@@ -33,7 +33,7 @@ import {
33
33
  orderNewTestSchema,
34
34
  orderRetestSchema,
35
35
  awaitTestSchema,
36
- listReportsResponseSchema,
36
+ listPagesResponseSchema,
37
37
  listIssuesResponseSchema,
38
38
  listViolatorsResponseSchema,
39
39
  listDiagnosesResponseSchema,
@@ -54,15 +54,15 @@ export const mcpPath = '/mcp';
54
54
  // description, in the server instructions, and in the getKilotestOverview tool description,
55
55
  // because some MCP clients do not propagate server-level instructions or the server
56
56
  // description to their models.
57
- const sharedContext = 'Kilotest tests web pages for front-end quality (accessibility, usability, and standards conformity); results are organized as report, then issue, then violator element, then diagnosis.';
57
+ const sharedContext = 'Kilotest tests web pages for front-end quality (accessibility, usability, and standards conformity); results are organized as tested page, then report, then issue, then violator element, then diagnosis.';
58
58
 
59
59
  // Detailed overview of the Kilotest domain, data hierarchy, and tool workflow, returned by
60
60
  // the getKilotestOverview tool and served as the docs://kilotest/overview resource.
61
61
  const kilotestOverview = [
62
62
  'Kilotest tests web pages for front-end quality: accessibility, usability, and standards conformity.',
63
63
  'Kilotest integrates an ensemble of twelve independent rule engines to test a web page and stores the results as a structured report.',
64
- 'Results are organized as a hierarchy. A report contains issues. An issue has violators: elements of the tested page reported as exhibiting the issue. A violator has diagnoses: explanations from rule engines of how the element exhibited the issue.',
65
- 'Typical workflow: call the listReports tool to learn whether a report about the page already exists. If it does, drill down with the listIssues, listViolators, and listDiagnoses tools, or retrieve the entire report with the getReport tool. If no report exists, request a test with the requestNewTest tool. If the latest report is obsolete, request a retest with the requestRetest tool.',
64
+ 'Results are organized as a hierarchy. A tested page has one or more reports, from oldest to latest. A report contains issues. An issue has violators: elements of the tested page reported as exhibiting the issue. A violator has diagnoses: explanations from rule engines of how the element exhibited the issue.',
65
+ 'Typical workflow: call the listPages tool to learn whether the page has been tested. If it has, drill down from its latest report with the listIssues, listViolators, and listDiagnoses tools, or retrieve the entire report with the getReport tool. The listIssues output also lists all reports about the same page, so you can examine earlier reports. If the page has not been tested, request a test with the requestNewTest tool. If the latest report is obsolete, request a retest with the requestRetest tool.',
66
66
  'For immediate, automatically approved testing, use the orderNewTest tool (for a new page) or the orderRetest tool (for a page with an obsolete report) instead of requestNewTest or requestRetest. Each enqueues the job right away, with no manual approval step, and returns a report identifier along with a question about whether to wait for completion. To wait, call the awaitTest tool with that identifier; it blocks until the report is ready, the job fails, or a maximum wait time elapses. To check later instead, call the listIssues tool with the same identifier.',
67
67
  'More documentation is available at https://kilotest.com/llms.txt and https://kilotest.com/llms-full.txt.'
68
68
  ].join('\n\n');
@@ -81,7 +81,7 @@ export const createMCPServer = (): McpServer => {
81
81
  description: 'Tools that test web pages for front-end quality (accessibility, usability, and standards conformity) and make test results available'
82
82
  },
83
83
  {
84
- instructions: `${sharedContext} Use the listReports tool to start. If it shows that there is a report available about the page you want facts about, drill down with the listIssues, listViolators, and listDiagnoses tools. If not, use the requestNewTest tool to request that the page be tested, or the orderNewTest tool for immediate, automatically approved testing. If the latest report about the page is obsolete, use the requestRetest tool to request that the page be retested, or the orderRetest tool for immediate, automatically approved retesting. For detailed documentation, call the getKilotestOverview tool.`
84
+ instructions: `${sharedContext} Use the listPages tool to start. If it shows that the page you want facts about has been tested, drill down from its latest report with the listIssues, listViolators, and listDiagnoses tools. If not, use the requestNewTest tool to request that the page be tested, or the orderNewTest tool for immediate, automatically approved testing. If the latest report about the page is obsolete, use the requestRetest tool to request that the page be retested, or the orderRetest tool for immediate, automatically approved retesting. For detailed documentation, call the getKilotestOverview tool.`
85
85
  });
86
86
  server.registerTool(
87
87
  'getKilotestOverview',
@@ -102,13 +102,13 @@ export const createMCPServer = (): McpServer => {
102
102
  }
103
103
  );
104
104
  server.registerTool(
105
- 'listReports',
105
+ 'listPages',
106
106
  {
107
- description: toolDoc('Provide basics about all available reports.'),
107
+ description: toolDoc('Provide basics about all tested pages, including how to get details about the latest report about each.'),
108
108
  inputSchema: {},
109
- outputSchema: listReportsResponseSchema,
109
+ outputSchema: listPagesResponseSchema,
110
110
  annotations: {
111
- title: toolDoc('Provide basics about all available reports.'),
111
+ title: toolDoc('Provide basics about all tested pages, including how to get details about the latest report about each.'),
112
112
  readOnlyHint: true,
113
113
  idempotentHint: true,
114
114
  destructiveHint: false,
@@ -116,19 +116,19 @@ export const createMCPServer = (): McpServer => {
116
116
  }
117
117
  },
118
118
  async () => {
119
- const result = await listReportsAPI.response();
120
- await recordMetric('mcpToolCalls', 'listReports');
119
+ const result = await listPagesAPI.response();
120
+ await recordMetric('mcpToolCalls', 'listPages');
121
121
  return {content: [{type: 'text', text: JSON.stringify(result)}], structuredContent: result};
122
122
  }
123
123
  );
124
124
  server.registerTool(
125
125
  'listIssues',
126
126
  {
127
- description: toolDoc('Provide details about one report, including basics about the issues reported in it.'),
127
+ description: toolDoc('Provide details about one report, including basics about the issues reported in it and the history of all reports about the same page.'),
128
128
  inputSchema: listIssuesSchema,
129
129
  outputSchema: listIssuesResponseSchema,
130
130
  annotations: {
131
- title: toolDoc('Provide details about one report, including basics about the issues reported in it.'),
131
+ title: toolDoc('Provide details about one report, including basics about the issues reported in it and the history of all reports about the same page.'),
132
132
  readOnlyHint: true,
133
133
  idempotentHint: true,
134
134
  destructiveHint: false,
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: 57.2.0
5
+ version: 58.2.7
6
6
  license:
7
7
  name: MIT
8
8
  identifier: MIT
@@ -15,13 +15,13 @@ servers:
15
15
  description: Kilotest production server
16
16
  security: []
17
17
  paths:
18
- /api/listReports:
18
+ /api/listPages:
19
19
  get:
20
- operationId: listReports
21
- summary: List all available reports
20
+ operationId: listPages
21
+ summary: List all tested pages
22
22
  responses:
23
23
  '200':
24
- description: List all available reports
24
+ description: List all tested pages
25
25
  content:
26
26
  application/json:
27
27
  schema:
@@ -58,20 +58,11 @@ paths:
58
58
  response content:
59
59
  type: object
60
60
  properties:
61
- basics about all available reports:
61
+ basics about all tested pages:
62
62
  type: array
63
63
  items:
64
64
  type: object
65
65
  properties:
66
- identifier:
67
- type: string
68
- description: timeStamp-jobID identifier of the report.
69
- completion date and time:
70
- type: string
71
- days since the report was completed:
72
- type:
73
- - number
74
- - 'null'
75
66
  tested web page:
76
67
  type: object
77
68
  properties:
@@ -83,9 +74,26 @@ paths:
83
74
  - description
84
75
  - URL
85
76
  additionalProperties: false
86
- whether a later report about the same page exists:
87
- type: boolean
88
- how to get details about the report:
77
+ number of reports about the page:
78
+ type: number
79
+ basics about the latest report:
80
+ type: object
81
+ properties:
82
+ identifier:
83
+ type: string
84
+ description: timeStamp-jobID identifier of the report.
85
+ completion date and time:
86
+ type: string
87
+ days since the report was completed:
88
+ type:
89
+ - number
90
+ - 'null'
91
+ required:
92
+ - identifier
93
+ - completion date and time
94
+ - days since the report was completed
95
+ additionalProperties: false
96
+ how to get details about the latest report:
89
97
  type: object
90
98
  properties:
91
99
  method:
@@ -97,16 +105,14 @@ paths:
97
105
  - method
98
106
  - URL
99
107
  additionalProperties: false
100
- web users can get details about the report at:
108
+ web users can get details about the latest report at:
101
109
  type: string
102
110
  required:
103
- - identifier
104
- - completion date and time
105
- - days since the report was completed
106
111
  - tested web page
107
- - whether a later report about the same page exists
108
- - how to get details about the report
109
- - web users can get details about the report at
112
+ - number of reports about the page
113
+ - basics about the latest report
114
+ - how to get details about the latest report
115
+ - web users can get details about the latest report at
110
116
  additionalProperties: false
111
117
  how to request that a page with no report be tested:
112
118
  type: object
@@ -147,7 +153,7 @@ paths:
147
153
  - URL
148
154
  additionalProperties: false
149
155
  required:
150
- - basics about all available reports
156
+ - basics about all tested pages
151
157
  - how to request that a page with no report be tested
152
158
  - how a web user can request that the page be tested
153
159
  additionalProperties: false
@@ -219,6 +225,53 @@ paths:
219
225
  properties:
220
226
  basics about the report:
221
227
  $ref: '#/components/schemas/ReportBasicsOrError'
228
+ history of reports about the page:
229
+ anyOf:
230
+ - type: array
231
+ items:
232
+ type: object
233
+ properties:
234
+ identifier:
235
+ type: string
236
+ description: timeStamp-jobID identifier of the report.
237
+ completion date and time:
238
+ type: string
239
+ days since the report was completed:
240
+ type:
241
+ - number
242
+ - 'null'
243
+ whether it is the oldest report about the page:
244
+ type: boolean
245
+ whether it is the latest report about the page:
246
+ type: boolean
247
+ whether it is the report described in this response:
248
+ type: boolean
249
+ how to get details about the report:
250
+ type: object
251
+ properties:
252
+ method:
253
+ type: string
254
+ const: GET
255
+ URL:
256
+ type: string
257
+ required:
258
+ - method
259
+ - URL
260
+ additionalProperties: false
261
+ web users can get details about the report at:
262
+ type: string
263
+ required:
264
+ - identifier
265
+ - completion date and time
266
+ - days since the report was completed
267
+ - whether it is the oldest report about the page
268
+ - whether it is the latest report about the page
269
+ - whether it is the report described in this response
270
+ - how to get details about the report
271
+ - web users can get details about the report at
272
+ additionalProperties: false
273
+ - type: 'null'
274
+ description: All reports about the same page, from oldest to latest, or null if the report is unavailable.
222
275
  details about the report:
223
276
  anyOf:
224
277
  - type: object
@@ -424,6 +477,7 @@ paths:
424
477
  - type: 'null'
425
478
  required:
426
479
  - basics about the report
480
+ - history of reports about the page
427
481
  - details about the report
428
482
  - how to request that the page be retested
429
483
  - how a web user can request that the page be retested
@@ -822,7 +876,7 @@ paths:
822
876
  properties:
823
877
  description:
824
878
  type: string
825
- description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
879
+ description: 1- to 100-character description of the page conforming to the naming convention used in the listPages output
826
880
  URL:
827
881
  type: string
828
882
  description: 12- to 300-character URL of the page, including the https:// scheme and any query
@@ -860,7 +914,7 @@ paths:
860
914
  properties:
861
915
  description:
862
916
  type: string
863
- description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
917
+ description: 1- to 100-character description of the page conforming to the naming convention used in the listPages output
864
918
  URL:
865
919
  type: string
866
920
  description: 12- to 300-character URL of the page, including the https:// scheme and any query
@@ -1193,7 +1247,7 @@ paths:
1193
1247
  properties:
1194
1248
  description:
1195
1249
  type: string
1196
- description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
1250
+ description: 1- to 100-character description of the page conforming to the naming convention used in the listPages output
1197
1251
  URL:
1198
1252
  type: string
1199
1253
  description: 12- to 300-character URL of the page, including the https:// scheme and any query
@@ -1231,7 +1285,7 @@ paths:
1231
1285
  properties:
1232
1286
  description:
1233
1287
  type: string
1234
- description: 1- to 100-character description of the page conforming to the naming convention used in the listReports output
1288
+ description: 1- to 100-character description of the page conforming to the naming convention used in the listPages output
1235
1289
  URL:
1236
1290
  type: string
1237
1291
  description: 12- to 300-character URL of the page, including the https:// scheme and any query
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jrpool/kilotest",
3
- "version": "58.2.0",
3
+ "version": "59.0.0",
4
4
  "description": "Ensemble testing for front-end web quality",
5
5
  "type": "module",
6
6
  "main": "index.ts",
package/routing.test.ts CHANGED
@@ -77,10 +77,10 @@ test('GET /api/requestFeature returns an error, not a feature-request response',
77
77
  assert.ok(result.body.includes('Invalid service request'));
78
78
  });
79
79
 
80
- test('GET /api/listReports returns a valid JSON response', async () => {
81
- const result = await get('/api/listReports');
80
+ test('GET /api/listPages returns a valid JSON response', async () => {
81
+ const result = await get('/api/listPages');
82
82
  const body = JSON.parse(result.body);
83
- assert.equal(body['tool name'], 'listReports');
84
- const reports = body['response content']['basics about all available reports'];
85
- assert.equal(reports.length, 8);
83
+ assert.equal(body['tool name'], 'listPages');
84
+ const pages = body['response content']['basics about all tested pages'];
85
+ assert.equal(pages.length, 7);
86
86
  });
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/jrpool/kilotest",
7
7
  "source": "github"
8
8
  },
9
- "version": "57.0.0",
9
+ "version": "59.0.0",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
package/sitemap.xml CHANGED
@@ -1,7 +1,7 @@
1
1
  <!-- sitemap.xml -->
2
2
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3
3
  <url><loc>https://kilotest.com/</loc></url>
4
- <url><loc>https://kilotest.com/listReports.html</loc></url>
4
+ <url><loc>https://kilotest.com/listPages.html</loc></url>
5
5
  <url><loc>https://kilotest.com/listTopIssues.html</loc></url>
6
6
  <url><loc>https://kilotest.com/requestNewTestForm.html</loc></url>
7
7
  <url><loc>https://kilotest.com/manage.html</loc></url>
package/smokeTest.ts CHANGED
@@ -14,10 +14,10 @@ import {mcpPath} from './mcp.ts';
14
14
  // Concrete paths matching each wildcard pattern in the routes table, for smoke testing.
15
15
  const concretePaths: Record<string, Record<string, string>> = {
16
16
  GET: {
17
- '*.html*': '/listReports.html',
17
+ '*.html*': '/listPages.html',
18
18
  '/': '/',
19
19
  '/api-docs': '/api-docs',
20
- '/api/*': '/api/listReports',
20
+ '/api/*': '/api/listPages',
21
21
  '/capability.md': '/capability.md',
22
22
  '/favicon.*': '/favicon.ico',
23
23
  '/fullReport.json/*': '/fullReport.json/260101T0000/mix',
package/style.css CHANGED
@@ -180,21 +180,21 @@ ul {
180
180
  ul.pseudoTopLevel {
181
181
  list-style: disc;
182
182
  }
183
- ul.nav {
184
- padding-inline-start: 0.25rem;
185
- }
186
- ul.nav li, ul.headed li {
187
- list-style: none;
188
- }
189
- ul.nav li > a {
183
+ ul.links li > a, ul.nav li > a {
190
184
  display: block;
191
185
  box-sizing: border-box;
192
186
  min-height: 44px;
193
187
  min-width: 44px;
194
188
  margin-right: 1rem;
195
- padding-left: 1rem;
189
+ padding-left: 0.25rem;
196
190
  padding-top: 0.5rem;
197
191
  }
192
+ ul.nav {
193
+ padding-inline-start: 0.25rem;
194
+ }
195
+ ul.nav li, ul.headed li {
196
+ list-style: none;
197
+ }
198
198
  ul.whereList {
199
199
  margin-left: 2rem;
200
200
  padding-left: 0;
@@ -226,7 +226,7 @@ const main = async () => {
226
226
  preventedReport
227
227
  );
228
228
 
229
- // Fixture 7: hidden. A report placed in hiddenReports/ instead of reports/, so it must not appear in listReports, listIssues, listViolators, listDiagnoses, or getReport API responses.
229
+ // Fixture 7: hidden. A report placed in hiddenReports/ instead of reports/, so it must not appear in listPages, listIssues, listViolators, listDiagnoses, or getReport API responses.
230
230
  const hiddenCatalog = {
231
231
  '0': catalogItem('A', 'Secret link', '/html/body/a[1]', '5:10:60:20')
232
232
  };