@jrpool/kilotest 60.6.0 → 60.7.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/docs/AI-TOOLS.md +1 -0
- package/docs/SERVICE.md +1 -1
- package/docs/kilotest-overview.zip +0 -0
- package/index.test.ts +21 -0
- package/index.ts +15 -0
- package/lhm.plugin.json +1 -1
- package/openapi-3.0.yaml +1 -1
- package/openapi.yaml +1 -1
- package/package.json +1 -1
- package/server.json +1 -1
- package/smokeTest.ts +1 -0
- package/web/demo-chatgpt/index.html +5 -5
- package/well-known/.gitkeep +0 -0
package/docs/AI-TOOLS.md
CHANGED
|
@@ -42,6 +42,7 @@ The external features that support the use of Kilotest as a collection of AI too
|
|
|
42
42
|
- A [pull request](https://github.com/public-apis/public-apis/pull/6346/changes) to add Kilotest to the list of public APIs in the `public-apis` repository.
|
|
43
43
|
- An [issue](https://github.com/APIs-guru/openapi-directory/issues/2677) to add Kilotest to `openapi-directory`.
|
|
44
44
|
- A [pull request](https://github.com/w3c/wai-evaluation-tools-list/pull/1153) to add Kilotest to the WAI evaluation tools list.
|
|
45
|
+
- An in-progress, incomplete submission of Kilotest as a plugin to OpenAI, under the organization name Kilotest, with organization ID `org-HOt5F01qJGQcl6V0sHj9HWr3`. Submission awaits correction of a defect that prevents submitters from recording their ID cards for identity verification. Upon that correction, the archive `kilotest-overview.zip` in this `docs` directory will be uploaded to OpenAI; a challenge token received from OpenAI will be stored in the `well-known` directory; the OpenAI “Scan Tools” function will be performed; and its requirement for 3 justifications per tool will be satisfied. Example for listDiagnoses: readOnlyHint: true — "The tool only retrieves stored report data; it modifies nothing." openWorldHint: false — "It reads only Kilotest's own database of reports; users can select among stored results but cannot direct it to arbitrary external resources." destructiveHint: false — "It deletes or overwrites nothing."
|
|
45
46
|
- Registration of Kilotest as an active server in the [official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.jrpool/kilotest), maintained by the [Model Context Protocol](https://modelcontextprotocol.io/) project. The [PulseMCP](https://www.pulsemcp.com/servers) directory and the VS Code MCP gallery both crawl this registry, so Kilotest is discoverable through them with no separate submission.
|
|
46
47
|
- Registration of Kilotest with the [Smithery](https://smithery.ai/servers/pool/kilotest) MCP server registry.
|
|
47
48
|
- Registration of Kilotest with the [Glama](https://glama.ai/mcp/connectors/com.kilotest/kilotest) MCP server registry, including a claim of ownership of the MCP connector by the maintainer via a `TXT` DNS record for `_glama-claim.kilotest.com`, with the value `glama_claim_gVV4HrPdcXr9TEfj1p3icEUBJ3_OVJGX`.
|
package/docs/SERVICE.md
CHANGED
|
@@ -259,7 +259,7 @@ kilotest.com {
|
|
|
259
259
|
# Specify the only paths of forwardable requests.
|
|
260
260
|
@allowedGET {
|
|
261
261
|
method GET
|
|
262
|
-
path /mcp / /index.html /robots.txt /openapi.yaml /openapi.json /swagger.yaml /swagger.json /api-docs /llms.txt /llms-full.txt /capability.md *.html* /fullReport.json/* /api/* /tutorialWeb/images/* /tutorialAI/images/* /media/* /qai /qai/comments /favicon.* /style.css /sitemap.xml
|
|
262
|
+
path /mcp / /index.html /.well-known/* /robots.txt /openapi.yaml /openapi.json /swagger.yaml /swagger.json /api-docs /llms.txt /llms-full.txt /capability.md *.html* /fullReport.json/* /api/* /tutorialWeb/images/* /tutorialAI/images/* /media/* /qai /qai/comments /favicon.* /style.css /sitemap.xml
|
|
263
263
|
}
|
|
264
264
|
# UptimeRobot's uptime check is the only known HEAD caller, and it targets only the site
|
|
265
265
|
# root (see "Health monitoring" below), so HEAD is forwarded only for that path, not the
|
|
Binary file
|
package/index.test.ts
CHANGED
|
@@ -477,6 +477,27 @@ test('GET /media/nonexistent.mp4 returns an error page', async () => {
|
|
|
477
477
|
assert.ok(res.body.includes('Media file not found'));
|
|
478
478
|
});
|
|
479
479
|
|
|
480
|
+
test('GET /.well-known serves a well-known resource as text', async () => {
|
|
481
|
+
// Create a temporary well-known file.
|
|
482
|
+
const knownPath = path.join(import.meta.dirname, 'well-known', 'test-resource');
|
|
483
|
+
await fs.writeFile(knownPath, 'test-token-value');
|
|
484
|
+
try {
|
|
485
|
+
const res = await request('GET', '/.well-known/test-resource');
|
|
486
|
+
assert.equal(res.statusCode, 200);
|
|
487
|
+
assert.ok(res.headers['content-type'].includes('text/plain'));
|
|
488
|
+
assert.ok(res.body.includes('test-token-value'));
|
|
489
|
+
}
|
|
490
|
+
finally {
|
|
491
|
+
await fs.unlink(knownPath).catch(() => {});
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
test('GET /.well-known/nonexistent returns an error page', async () => {
|
|
496
|
+
const res = await request('GET', '/.well-known/nonexistent');
|
|
497
|
+
assert.equal(res.statusCode, 400);
|
|
498
|
+
assert.ok(res.body.includes('Well-known resource not found'));
|
|
499
|
+
});
|
|
500
|
+
|
|
480
501
|
test('GET /nonexistent.html returns an abuse error', {timeout: 500}, async () => {
|
|
481
502
|
const res = await request('GET', '/nonexistent.html');
|
|
482
503
|
assert.equal(res.statusCode, 400);
|
package/index.ts
CHANGED
|
@@ -211,6 +211,7 @@ export const routes = {
|
|
|
211
211
|
GET: [
|
|
212
212
|
'*.html*',
|
|
213
213
|
'/',
|
|
214
|
+
'/.well-known/*',
|
|
214
215
|
'/api-docs',
|
|
215
216
|
'/api/*',
|
|
216
217
|
'/capability.md',
|
|
@@ -918,6 +919,20 @@ const handleRequest = async (request: IncomingMessage, response: ServerResponse)
|
|
|
918
919
|
await serveError({message: 'Invalid service request'}, response, false);
|
|
919
920
|
}
|
|
920
921
|
}
|
|
922
|
+
// Otherwise, if it is for a well-known resource (e.g. the OpenAI domain-verification
|
|
923
|
+
// challenge token):
|
|
924
|
+
else if (pathname.startsWith('/.well-known/')) {
|
|
925
|
+
const knownFile = pathname.slice('/.well-known/'.length);
|
|
926
|
+
const knownPath = path.join(import.meta.dirname, 'well-known', knownFile);
|
|
927
|
+
try {
|
|
928
|
+
const known = await fs.readFile(knownPath);
|
|
929
|
+
setHeaders('text/plain', null, 'low');
|
|
930
|
+
response.end(known);
|
|
931
|
+
}
|
|
932
|
+
catch {
|
|
933
|
+
await serveError({message: 'ERROR: Well-known resource not found'}, response, true);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
921
936
|
// Otherwise, if it is for a media file (e.g. a demonstration video):
|
|
922
937
|
else if (pathname.startsWith('/media/')) {
|
|
923
938
|
const mediaFile = pathname.slice('/media/'.length);
|
package/lhm.plugin.json
CHANGED
package/openapi-3.0.yaml
CHANGED
|
@@ -2,7 +2,7 @@ openapi: 3.0.3
|
|
|
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 web standards, including HTML, CSS, ARIA, and WCAG). 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: 60.
|
|
5
|
+
version: 60.7.1
|
|
6
6
|
license:
|
|
7
7
|
name: MIT
|
|
8
8
|
url: https://github.com/jrpool/kilotest/blob/main/LICENSE
|
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 web standards, including HTML, CSS, ARIA, and WCAG). 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: 60.
|
|
5
|
+
version: 60.7.1
|
|
6
6
|
license:
|
|
7
7
|
name: MIT
|
|
8
8
|
identifier: MIT
|
package/package.json
CHANGED
package/server.json
CHANGED
package/smokeTest.ts
CHANGED
|
@@ -16,6 +16,7 @@ const concretePaths: Record<string, Record<string, string>> = {
|
|
|
16
16
|
GET: {
|
|
17
17
|
'*.html*': '/listPages.html',
|
|
18
18
|
'/': '/',
|
|
19
|
+
'/.well-known/*': '/.well-known/openai-apps-challenge',
|
|
19
20
|
'/api-docs': '/api-docs',
|
|
20
21
|
'/api/*': '/api/listPages',
|
|
21
22
|
'/capability.md': '/capability.md',
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<div class="demo-stage" id="demo-stage" aria-live="polite">
|
|
21
21
|
|
|
22
22
|
<section class="frame" data-scene="1">
|
|
23
|
-
<h2>1.
|
|
23
|
+
<h2>1. Listing tested pages of a website</h2>
|
|
24
24
|
<h3>Prompt 1</h3>
|
|
25
25
|
<div class="msg user"><p><span class="mention">@ Kilotest</span> Name all pages of Kilotest that Kilotest has tested. I need only their names and not their URLs, test dates, test results, or any other information.</p></div>
|
|
26
26
|
<div class="msg tool"><p>Used Kilotest — worked for a few seconds</p></div>
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
</section>
|
|
35
35
|
|
|
36
36
|
<section class="frame" data-scene="2" hidden>
|
|
37
|
-
<h2>2.
|
|
37
|
+
<h2>2. Listing issues reported on a page</h2>
|
|
38
38
|
<h3>Prompt 2</h3>
|
|
39
39
|
<div class="msg user"><p><span class="mention">@ Kilotest</span> Name the issues reported in the latest report about the Human Rights Watch contact page. I need only their names and not their descriptions, priorities, or any other information.</p></div>
|
|
40
40
|
<div class="msg tool"><p>Used Kilotest — worked for 9s</p></div>
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
</section>
|
|
98
98
|
|
|
99
99
|
<section class="frame" data-scene="3" hidden>
|
|
100
|
-
<h2>3.
|
|
100
|
+
<h2>3. Getting details about an important issue.</h2>
|
|
101
101
|
<h3>Prompt 3</h3>
|
|
102
102
|
<div class="msg user"><p><span class="mention">@ Kilotest</span> In the latest report about the Wikimedia Foundation (home) page, tell me which highest-priority issue was reported by the largest number of rule engines. For that issue, give me the XPath of the element that was reported as a violator by the largest number of rule engines. Finally, for that element and that issue, give me a one-sentence summary of the diagnoses. I do not need an issue explanation, additional information about the element, the number of diagnoses, their full texts, or the number or names of the rule engines that issued them.</p></div>
|
|
103
103
|
<div class="msg tool"><p>Used Kilotest — worked for 21s</p></div>
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
</section>
|
|
115
115
|
|
|
116
116
|
<section class="frame" data-scene="4" hidden>
|
|
117
|
-
<h2>4.
|
|
117
|
+
<h2>4. Getting a new page tested.</h2>
|
|
118
118
|
<h3>Prompt 4</h3>
|
|
119
119
|
<div class="msg user"><p><span class="mention">@ Kilotest</span> Request a Kilotest test of Example12345 (<a href="https://example12345.info">https://example12345.info</a>) and let me know whether the request was accepted. If it was, tell me how long I should expect to wait before the results will be available.</p></div>
|
|
120
120
|
<div class="msg tool"><p>Used Kilotest — worked for 12s</p></div>
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
</section>
|
|
126
126
|
|
|
127
127
|
<section class="frame" data-scene="5" hidden>
|
|
128
|
-
<h2>5.
|
|
128
|
+
<h2>5. Checking on changes since the last test of a page.</h2>
|
|
129
129
|
<h3>Prompt 5</h3>
|
|
130
130
|
<div class="msg user"><p><span class="mention">@ Kilotest</span> Order a Kilotest retest of the Example page. When the report is completed, compare it with the previous report about that page and give me two lists: one naming any eliminated issues and the other naming any newly reported issues. I do not need the report dates, the issue counts, issue explanations, or any other information. If the order is rejected, or if the report is not completed within 4 minutes, stop waiting and tell me what happened.</p></div>
|
|
131
131
|
<div class="msg tool"><p>Used Kilotest — worked for 1m 12s</p></div>
|
|
File without changes
|