@kryptosai/mcp-observatory 0.20.3 → 0.22.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.
- package/COMMERCIAL.md +67 -0
- package/PRIVACY.md +52 -0
- package/README.md +100 -4
- package/TERMS.md +30 -0
- package/dist/src/checks/resources.js +9 -19
- package/dist/src/checks/resources.js.map +1 -1
- package/dist/src/checks/security-rules.js.map +1 -1
- package/dist/src/checks/security.js +33 -14
- package/dist/src/checks/security.js.map +1 -1
- package/dist/src/checks/tools-invoke.js.map +1 -1
- package/dist/src/checks/tools.js.map +1 -1
- package/dist/src/ci-issue.js +3 -1
- package/dist/src/ci-issue.js.map +1 -1
- package/dist/src/cli.js +48 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/ci-report.js +4 -0
- package/dist/src/commands/ci-report.js.map +1 -1
- package/dist/src/commands/enterprise-report.d.ts +12 -0
- package/dist/src/commands/enterprise-report.js +192 -0
- package/dist/src/commands/enterprise-report.js.map +1 -0
- package/dist/src/commands/init-ci.d.ts +31 -0
- package/dist/src/commands/init-ci.js +238 -0
- package/dist/src/commands/init-ci.js.map +1 -0
- package/dist/src/commands/scan.js +4 -0
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/score.js +2 -0
- package/dist/src/commands/score.js.map +1 -1
- package/dist/src/commands/telemetry.js +47 -2
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/test.js +11 -5
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/commercial.d.ts +5 -0
- package/dist/src/commercial.js +46 -0
- package/dist/src/commercial.js.map +1 -0
- package/dist/src/reporters/common.d.ts +16 -0
- package/dist/src/reporters/common.js +76 -0
- package/dist/src/reporters/common.js.map +1 -1
- package/dist/src/reporters/html.js +20 -0
- package/dist/src/reporters/html.js.map +1 -1
- package/dist/src/reporters/markdown.js +14 -2
- package/dist/src/reporters/markdown.js.map +1 -1
- package/dist/src/reporters/pr-comment.js +18 -1
- package/dist/src/reporters/pr-comment.js.map +1 -1
- package/dist/src/reporters/terminal.js +9 -1
- package/dist/src/reporters/terminal.js.map +1 -1
- package/dist/src/runner.js +1 -1
- package/dist/src/runner.js.map +1 -1
- package/dist/src/telemetry.d.ts +27 -0
- package/dist/src/telemetry.js +57 -3
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/types.d.ts +5 -0
- package/dist/src/validate.js +48 -5
- package/dist/src/validate.js.map +1 -1
- package/docs/architecture.md +32 -0
- package/docs/certification-campaign-template.md +181 -0
- package/docs/certification-distribution.md +129 -0
- package/docs/compatibility.md +164 -0
- package/docs/decisions.md +23 -0
- package/docs/demo.svg +59 -0
- package/docs/directory-listing-copy.md +78 -0
- package/docs/distribution-launch.md +76 -0
- package/docs/enterprise-outreach-playbook.md +83 -0
- package/docs/feishu-lark-mcp.md +65 -0
- package/docs/known-issues.md +27 -0
- package/docs/mcp-safety-report-latest.md +85 -0
- package/docs/project-case-study.md +106 -0
- package/docs/proof.md +68 -0
- package/docs/publish-readiness.md +77 -0
- package/package.json +33 -18
- package/schemas/diff-artifact.schema.json +62 -66
- package/schemas/run-artifact.schema.json +107 -142
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# MCP Observatory Case Study
|
|
2
|
+
|
|
3
|
+
## One-Line Summary
|
|
4
|
+
|
|
5
|
+
MCP Observatory is CI/security infrastructure for production MCP servers.
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
MCP servers are becoming dependencies for AI agents. Teams need to know whether those servers still start, expose usable tools, keep schemas stable, avoid obvious security footguns, and behave consistently as agents depend on them.
|
|
10
|
+
|
|
11
|
+
## Product
|
|
12
|
+
|
|
13
|
+
MCP Observatory provides:
|
|
14
|
+
|
|
15
|
+
- CLI checks for MCP servers
|
|
16
|
+
- MCP server mode so agents can inspect other MCP servers
|
|
17
|
+
- GitHub Action integration
|
|
18
|
+
- PR comments and commit status checks
|
|
19
|
+
- JSON, Markdown, HTML, JUnit, SARIF, and PR-comment reports
|
|
20
|
+
- schema drift detection
|
|
21
|
+
- record/replay/verify workflows
|
|
22
|
+
- health score badges
|
|
23
|
+
- static enterprise reports
|
|
24
|
+
- telemetry intelligence for product and account-level learning
|
|
25
|
+
|
|
26
|
+
## Architecture
|
|
27
|
+
|
|
28
|
+
The project is a TypeScript/Node CLI with modular command handlers, MCP adapters, check runners, reporters, artifact schemas, and a GitHub Action wrapper. A Cloudflare Worker handles hosted artifact upload pilots, and a separate telemetry Worker stores private aggregate usage events in D1.
|
|
29
|
+
|
|
30
|
+
## Technical Proof
|
|
31
|
+
|
|
32
|
+
As of June 19, 2026:
|
|
33
|
+
|
|
34
|
+
- 10k+ source lines in `src`
|
|
35
|
+
- 40 test files
|
|
36
|
+
- 321 passing tests
|
|
37
|
+
- npm package published
|
|
38
|
+
- GitHub Action available
|
|
39
|
+
- MCP server mode available
|
|
40
|
+
- telemetry export and company intelligence tooling available
|
|
41
|
+
|
|
42
|
+
## Traction Snapshot
|
|
43
|
+
|
|
44
|
+
Safe public and aggregate signals:
|
|
45
|
+
|
|
46
|
+
- 10,278 telemetry events
|
|
47
|
+
- 7,211 telemetry sessions
|
|
48
|
+
- 5,368 external sessions after separating internal activity
|
|
49
|
+
- 582 GitHub clones and 175 unique cloners in the visible June 2026 traffic window
|
|
50
|
+
- 104 npm downloads during June 11-17, 2026
|
|
51
|
+
|
|
52
|
+
These are early signals. Public social proof is still limited and should be improved through the certification campaign.
|
|
53
|
+
|
|
54
|
+
## Security And Privacy Posture
|
|
55
|
+
|
|
56
|
+
The project includes:
|
|
57
|
+
|
|
58
|
+
- telemetry opt-out controls
|
|
59
|
+
- privacy disclosure
|
|
60
|
+
- security policy
|
|
61
|
+
- token-based hosted artifact upload
|
|
62
|
+
- private-network rejection for hosted scans
|
|
63
|
+
- sanitized public reporting policy
|
|
64
|
+
|
|
65
|
+
Public claims should use aggregate metrics and accepted public integrations, not raw telemetry.
|
|
66
|
+
|
|
67
|
+
## Commercial Path
|
|
68
|
+
|
|
69
|
+
The free OSS wedge is local testing and public repo CI. Paid value is production/private use:
|
|
70
|
+
|
|
71
|
+
- hosted CI history
|
|
72
|
+
- private repo reporting
|
|
73
|
+
- recurring security reports
|
|
74
|
+
- certification
|
|
75
|
+
- support
|
|
76
|
+
- fleet visibility
|
|
77
|
+
- enterprise review
|
|
78
|
+
|
|
79
|
+
Current pilot anchors:
|
|
80
|
+
|
|
81
|
+
- Team: starts at `$299/month`
|
|
82
|
+
- Business: starts at `$999/month`
|
|
83
|
+
- Enterprise: starts at `$3k/month`
|
|
84
|
+
- Strategic: `$250k+/year`
|
|
85
|
+
|
|
86
|
+
## Job-Opportunity Value
|
|
87
|
+
|
|
88
|
+
This project demonstrates ability across:
|
|
89
|
+
|
|
90
|
+
- AI infrastructure
|
|
91
|
+
- developer tooling
|
|
92
|
+
- security tooling
|
|
93
|
+
- MCP ecosystem work
|
|
94
|
+
- CI/CD integrations
|
|
95
|
+
- telemetry and product analytics
|
|
96
|
+
- commercialization and enterprise packaging
|
|
97
|
+
|
|
98
|
+
It is strongest as a portfolio asset when paired with public proof: accepted external PRs, badges in other repos, directory listings, and a short demo.
|
|
99
|
+
|
|
100
|
+
## Next Milestones
|
|
101
|
+
|
|
102
|
+
1. Publish latest package with `init-ci`.
|
|
103
|
+
2. Open first certification PR wave.
|
|
104
|
+
3. Capture accepted PRs as public proof.
|
|
105
|
+
4. Publish recurring MCP safety reports.
|
|
106
|
+
5. Convert serious users into paid pilots.
|
package/docs/proof.md
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# MCP Observatory Proof
|
|
2
|
+
|
|
3
|
+
MCP Observatory is early, but it is already a working MCP testing/security stack rather than a landing page.
|
|
4
|
+
|
|
5
|
+
## Current Public Surface
|
|
6
|
+
|
|
7
|
+
- npm package: `@kryptosai/mcp-observatory`
|
|
8
|
+
- GitHub Action: `KryptosAI/mcp-observatory/action@main`
|
|
9
|
+
- CLI command count: scan, test, record, replay, verify, diff, watch, suggest, serve, lock, history, init-ci, ci-report, enterprise-report, score, badge, cloud
|
|
10
|
+
- Test suite: 321 passing tests across 40 test files as of June 19, 2026
|
|
11
|
+
- GitHub traffic snapshot: 582 clones and 175 unique cloners in the visible June 2026 traffic window
|
|
12
|
+
- npm downloads snapshot: 104 downloads for June 11-17, 2026
|
|
13
|
+
|
|
14
|
+
## Safe Aggregate Telemetry Snapshot
|
|
15
|
+
|
|
16
|
+
Internal telemetry is used for product analytics and account-level outreach. Public reporting uses only aggregate or sanitized data.
|
|
17
|
+
|
|
18
|
+
As of the latest local export on June 19, 2026:
|
|
19
|
+
|
|
20
|
+
- 10,278 telemetry events
|
|
21
|
+
- 7,211 unique sessions
|
|
22
|
+
- 5,368 external sessions after separating internal/personal activity
|
|
23
|
+
- 2,434 external CI sessions
|
|
24
|
+
- 128 attributed company/org sessions
|
|
25
|
+
- top external commands: `serve`, `run`, `diff`, `test`, `scan`, `history`
|
|
26
|
+
|
|
27
|
+
Raw emails, hostnames, private URLs, tokens, and response bodies are not published.
|
|
28
|
+
|
|
29
|
+
## Product Proof
|
|
30
|
+
|
|
31
|
+
MCP Observatory can:
|
|
32
|
+
|
|
33
|
+
- install as an npm CLI
|
|
34
|
+
- run as an MCP server
|
|
35
|
+
- test local-process and HTTP MCP targets
|
|
36
|
+
- run in GitHub Actions
|
|
37
|
+
- post PR comments
|
|
38
|
+
- generate JSON, Markdown, HTML, JUnit, SARIF, and PR-comment reports
|
|
39
|
+
- generate health badges
|
|
40
|
+
- record/replay/verify MCP sessions
|
|
41
|
+
- detect schema drift
|
|
42
|
+
- run lightweight MCP security checks
|
|
43
|
+
- create static enterprise reports from artifacts
|
|
44
|
+
|
|
45
|
+
## Certification Proof
|
|
46
|
+
|
|
47
|
+
The certification campaign is designed to create public proof through accepted maintainer PRs.
|
|
48
|
+
|
|
49
|
+
Accepted third-party integrations will be tracked here:
|
|
50
|
+
|
|
51
|
+
| Repo | PR | Check Added | Badge Added | Status |
|
|
52
|
+
| --- | --- | --- | --- | --- |
|
|
53
|
+
| _pending_ | | | | |
|
|
54
|
+
|
|
55
|
+
## Commercial Proof
|
|
56
|
+
|
|
57
|
+
Current paid positioning is pilot-first:
|
|
58
|
+
|
|
59
|
+
- Team Pilot: starts at `$299/month`
|
|
60
|
+
- Business Pilot: starts at `$999/month`
|
|
61
|
+
- Enterprise Pilot: starts at `$3k/month`
|
|
62
|
+
- Strategic Accounts: custom, `$250k+/year`
|
|
63
|
+
|
|
64
|
+
Paid value is production use: hosted reporting, private repo CI history, security reports, certification, support, fleet visibility, and enterprise review.
|
|
65
|
+
|
|
66
|
+
## Claims Policy
|
|
67
|
+
|
|
68
|
+
Use public proof for public claims. Company-domain telemetry signals are private and should only be used internally for outreach unless a customer gives permission or there is independent public evidence.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Publish And Distribution Readiness
|
|
2
|
+
|
|
3
|
+
Use this checklist before a commercialization push. The goal is to increase distribution and start paid conversations without locking the project into a permanent licensing or product shape.
|
|
4
|
+
|
|
5
|
+
## Release Gate
|
|
6
|
+
|
|
7
|
+
Run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm run lint
|
|
11
|
+
npm run typecheck
|
|
12
|
+
npm run build
|
|
13
|
+
npm test
|
|
14
|
+
npm run validate:artifacts
|
|
15
|
+
npm audit --json
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Confirm:
|
|
19
|
+
|
|
20
|
+
- GitHub Action target scans support `deep`, `security`, and baseline drift failure.
|
|
21
|
+
- `schemas/run-artifact.schema.json` and `schemas/diff-artifact.schema.json` validate current artifacts.
|
|
22
|
+
- HTTP target examples use env references instead of inline tokens.
|
|
23
|
+
- Security findings appear in artifact evidence as structured `findings`.
|
|
24
|
+
- Hosted upload is available through `mcp-observatory cloud upload <artifact>` when `MCP_OBSERVATORY_CLOUD_TOKEN` is set.
|
|
25
|
+
|
|
26
|
+
Known audit note:
|
|
27
|
+
|
|
28
|
+
- `npm audit` may report `undici <=6.26.0` through the `npm@11.17.0` package bundled under `@semantic-release/npm`. `npm audit fix` updates the fixable `@actions/http-client` path, but the remaining `undici` copy is bundled inside npm release tooling and is not part of MCP Observatory runtime dependencies or the packed npm artifact. Recheck after npm publishes a newer package.
|
|
29
|
+
|
|
30
|
+
## Public Distribution
|
|
31
|
+
|
|
32
|
+
- Merge the health/commercialization PR.
|
|
33
|
+
- Update the GitHub repo homepage to the README or commercial page.
|
|
34
|
+
- Publish npm only after the release gate is green.
|
|
35
|
+
- Refresh MCP directory listings with: “MCP Observatory helps teams test, secure, and monitor MCP servers before agents depend on them.”
|
|
36
|
+
- Include “free for local OSS use; paid for hosted reporting, private repo CI, security reports, production monitoring, certification, support, and fleet visibility.”
|
|
37
|
+
- Link production users to `COMMERCIAL.md` and `william@banksey.com`.
|
|
38
|
+
- Submit or refresh listings on Glama, PulseMCP, Smithery, and relevant awesome-MCP lists with the tags: security, developer tools, CI/CD, testing, observability, schema drift.
|
|
39
|
+
- Use the certification distribution loop to open helpful PRs against popular MCP server repos and convert accepted PRs into proof points.
|
|
40
|
+
- Link public proof, the safety report, and directory listing copy from launch/outreach materials.
|
|
41
|
+
|
|
42
|
+
## Sales Operating Loop
|
|
43
|
+
|
|
44
|
+
1. Export telemetry rows privately.
|
|
45
|
+
2. Run:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npx tsx scripts/telemetry-company-intelligence.ts --input telemetry-events.jsonl --out-dir reports
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
3. Review `reports/telemetry-company-intelligence.html`.
|
|
52
|
+
4. Contact the top 25 high-confidence company/org candidates.
|
|
53
|
+
5. For large or strategic domains, quote Strategic only and ask for a security/procurement path.
|
|
54
|
+
6. Use hosted artifact upload or static enterprise reports before building a full SaaS dashboard.
|
|
55
|
+
|
|
56
|
+
## Hosted Upload
|
|
57
|
+
|
|
58
|
+
CLI:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
export MCP_OBSERVATORY_CLOUD_TOKEN="pilot-token"
|
|
62
|
+
export MCP_OBSERVATORY_ORG="customer.com"
|
|
63
|
+
npx @kryptosai/mcp-observatory cloud upload .mcp-observatory/runs/<run>.json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Worker:
|
|
67
|
+
|
|
68
|
+
- `POST /api/v1/artifacts` stores a run artifact behind bearer-token auth.
|
|
69
|
+
- `GET /api/v1/artifacts/:org` returns the org artifact index behind the same auth.
|
|
70
|
+
- Hosted scans reject localhost/private-network targets; use local CLI for internal MCP servers.
|
|
71
|
+
|
|
72
|
+
## What Not To Do Yet
|
|
73
|
+
|
|
74
|
+
- Do not change the MIT license until paid signal demands it.
|
|
75
|
+
- Do not hard-paywall existing local OSS checks.
|
|
76
|
+
- Do not build a full dashboard before a buyer asks for dashboard workflows.
|
|
77
|
+
- Do not publish raw telemetry emails or individual PII in public materials.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kryptosai/mcp-observatory",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Test
|
|
3
|
+
"version": "0.22.0",
|
|
4
|
+
"description": "Test, secure, and monitor MCP servers before agents depend on them.",
|
|
5
5
|
"mcpName": "io.github.KryptosAI/mcp-observatory",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -31,7 +31,11 @@
|
|
|
31
31
|
"files": [
|
|
32
32
|
"dist/src",
|
|
33
33
|
"README.md",
|
|
34
|
+
"COMMERCIAL.md",
|
|
35
|
+
"PRIVACY.md",
|
|
36
|
+
"TERMS.md",
|
|
34
37
|
"LICENSE",
|
|
38
|
+
"docs",
|
|
35
39
|
"schemas"
|
|
36
40
|
],
|
|
37
41
|
"scripts": {
|
|
@@ -43,11 +47,15 @@
|
|
|
43
47
|
"prepack": "npm run build",
|
|
44
48
|
"proof:refresh": "tsx scripts/refresh-proof-artifacts.ts",
|
|
45
49
|
"release:prep": "node scripts/release.mjs",
|
|
50
|
+
"certification:pr-body": "tsx scripts/print-certification-pr-body.ts",
|
|
46
51
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
47
52
|
"test": "vitest run",
|
|
48
53
|
"validate:artifacts": "tsx scripts/validate-artifacts.ts",
|
|
49
54
|
"verify:packed-install": "node scripts/verify-packed-install.mjs",
|
|
50
|
-
"smoke": "npm run cli -- run --target tests/fixtures/sample-target-config.json && npm run cli -- diff tests/fixtures/sample-run-a.json tests/fixtures/sample-run-b.json"
|
|
55
|
+
"smoke": "npm run cli -- run --target tests/fixtures/sample-target-config.json && npm run cli -- diff tests/fixtures/sample-run-a.json tests/fixtures/sample-run-b.json",
|
|
56
|
+
"telemetry:export": "tsx scripts/export-telemetry-d1.ts",
|
|
57
|
+
"telemetry:intelligence": "tsx scripts/telemetry-company-intelligence.ts --input telemetry-exports/events-flat-full.json --out-dir reports",
|
|
58
|
+
"telemetry:external": "tsx scripts/telemetry-company-intelligence.ts --input telemetry-exports/events-flat-full.json --out-dir reports"
|
|
51
59
|
},
|
|
52
60
|
"keywords": [
|
|
53
61
|
"mcp",
|
|
@@ -66,31 +74,38 @@
|
|
|
66
74
|
"vcr",
|
|
67
75
|
"mcp-testing",
|
|
68
76
|
"security",
|
|
77
|
+
"mcp-security",
|
|
69
78
|
"ci-cd",
|
|
79
|
+
"mcp-ci",
|
|
70
80
|
"github-action",
|
|
81
|
+
"production-monitoring",
|
|
82
|
+
"enterprise",
|
|
83
|
+
"enterprise-report",
|
|
84
|
+
"feishu",
|
|
85
|
+
"lark",
|
|
71
86
|
"schema-drift"
|
|
72
87
|
],
|
|
73
88
|
"dependencies": {
|
|
74
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
89
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
75
90
|
"ci-info": "^4.4.0",
|
|
76
|
-
"commander": "
|
|
91
|
+
"commander": "15.0.0",
|
|
77
92
|
"update-notifier": "^7.3.1",
|
|
78
|
-
"zod": "4.
|
|
93
|
+
"zod": "4.4.3"
|
|
79
94
|
},
|
|
80
95
|
"devDependencies": {
|
|
81
|
-
"@eslint/js": "
|
|
96
|
+
"@eslint/js": "10.0.1",
|
|
82
97
|
"@semantic-release/changelog": "^6.0.3",
|
|
83
98
|
"@semantic-release/git": "^10.0.1",
|
|
84
|
-
"@types/node": "
|
|
85
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
86
|
-
"@typescript-eslint/parser": "8.
|
|
87
|
-
"ajv": "8.
|
|
88
|
-
"eslint": "
|
|
89
|
-
"globals": "
|
|
90
|
-
"semantic-release": "^25.0.
|
|
91
|
-
"tsx": "4.
|
|
92
|
-
"typescript": "
|
|
93
|
-
"typescript-eslint": "8.
|
|
94
|
-
"vitest": "4.
|
|
99
|
+
"@types/node": "25.9.3",
|
|
100
|
+
"@typescript-eslint/eslint-plugin": "8.61.1",
|
|
101
|
+
"@typescript-eslint/parser": "8.61.1",
|
|
102
|
+
"ajv": "8.20.0",
|
|
103
|
+
"eslint": "10.5.0",
|
|
104
|
+
"globals": "17.6.0",
|
|
105
|
+
"semantic-release": "^25.0.5",
|
|
106
|
+
"tsx": "4.22.4",
|
|
107
|
+
"typescript": "6.0.3",
|
|
108
|
+
"typescript-eslint": "8.61.1",
|
|
109
|
+
"vitest": "4.1.9"
|
|
95
110
|
}
|
|
96
111
|
}
|
|
@@ -19,113 +19,109 @@
|
|
|
19
19
|
"removed"
|
|
20
20
|
],
|
|
21
21
|
"properties": {
|
|
22
|
-
"artifactType": {
|
|
23
|
-
|
|
24
|
-
},
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
},
|
|
28
|
-
"
|
|
29
|
-
"$ref": "#/definitions/gate"
|
|
30
|
-
},
|
|
31
|
-
"baseRunId": {
|
|
32
|
-
"type": "string"
|
|
33
|
-
},
|
|
34
|
-
"headRunId": {
|
|
35
|
-
"type": "string"
|
|
36
|
-
},
|
|
37
|
-
"createdAt": {
|
|
38
|
-
"type": "string"
|
|
39
|
-
},
|
|
40
|
-
"summary": {
|
|
41
|
-
"$ref": "#/definitions/diffSummary"
|
|
42
|
-
},
|
|
22
|
+
"artifactType": { "const": "diff" },
|
|
23
|
+
"schemaVersion": { "const": "1.0.0" },
|
|
24
|
+
"gate": { "$ref": "#/definitions/gate" },
|
|
25
|
+
"baseRunId": { "type": "string" },
|
|
26
|
+
"headRunId": { "type": "string" },
|
|
27
|
+
"createdAt": { "type": "string" },
|
|
28
|
+
"summary": { "$ref": "#/definitions/diffSummary" },
|
|
43
29
|
"regressions": {
|
|
44
30
|
"type": "array",
|
|
45
|
-
"items": {
|
|
46
|
-
"$ref": "#/definitions/diffEntry"
|
|
47
|
-
}
|
|
31
|
+
"items": { "$ref": "#/definitions/diffEntry" }
|
|
48
32
|
},
|
|
49
33
|
"recoveries": {
|
|
50
34
|
"type": "array",
|
|
51
|
-
"items": {
|
|
52
|
-
"$ref": "#/definitions/diffEntry"
|
|
53
|
-
}
|
|
35
|
+
"items": { "$ref": "#/definitions/diffEntry" }
|
|
54
36
|
},
|
|
55
37
|
"unchanged": {
|
|
56
38
|
"type": "array",
|
|
57
|
-
"items": {
|
|
58
|
-
"$ref": "#/definitions/diffEntry"
|
|
59
|
-
}
|
|
39
|
+
"items": { "$ref": "#/definitions/diffEntry" }
|
|
60
40
|
},
|
|
61
41
|
"added": {
|
|
62
42
|
"type": "array",
|
|
63
|
-
"items": {
|
|
64
|
-
"$ref": "#/definitions/diffEntry"
|
|
65
|
-
}
|
|
43
|
+
"items": { "$ref": "#/definitions/diffEntry" }
|
|
66
44
|
},
|
|
67
45
|
"removed": {
|
|
68
46
|
"type": "array",
|
|
69
|
-
"items": {
|
|
70
|
-
|
|
71
|
-
|
|
47
|
+
"items": { "$ref": "#/definitions/diffEntry" }
|
|
48
|
+
},
|
|
49
|
+
"schemaDrift": {
|
|
50
|
+
"type": "array",
|
|
51
|
+
"items": { "$ref": "#/definitions/schemaDriftEntry" }
|
|
52
|
+
},
|
|
53
|
+
"responseChanges": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"items": { "$ref": "#/definitions/responseChangeEntry" }
|
|
72
56
|
}
|
|
73
57
|
},
|
|
74
58
|
"definitions": {
|
|
75
|
-
"gate": {
|
|
76
|
-
"type": "string",
|
|
77
|
-
"enum": ["pass", "fail"]
|
|
78
|
-
},
|
|
59
|
+
"gate": { "type": "string", "enum": ["pass", "fail"] },
|
|
79
60
|
"checkStatus": {
|
|
80
61
|
"type": "string",
|
|
81
62
|
"enum": ["pass", "fail", "partial", "unsupported", "flaky", "skipped"]
|
|
82
63
|
},
|
|
83
64
|
"checkId": {
|
|
84
65
|
"type": "string",
|
|
85
|
-
"enum": [
|
|
66
|
+
"enum": [
|
|
67
|
+
"tools",
|
|
68
|
+
"prompts",
|
|
69
|
+
"resources",
|
|
70
|
+
"tools-invoke",
|
|
71
|
+
"security",
|
|
72
|
+
"security-lite",
|
|
73
|
+
"conformance",
|
|
74
|
+
"schema-quality"
|
|
75
|
+
]
|
|
86
76
|
},
|
|
87
77
|
"diffEntry": {
|
|
88
78
|
"type": "object",
|
|
89
79
|
"additionalProperties": false,
|
|
90
80
|
"required": ["id", "capability", "message"],
|
|
91
81
|
"properties": {
|
|
92
|
-
"id": {
|
|
93
|
-
|
|
94
|
-
},
|
|
95
|
-
"
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
"
|
|
105
|
-
|
|
82
|
+
"id": { "$ref": "#/definitions/checkId" },
|
|
83
|
+
"capability": { "$ref": "#/definitions/checkId" },
|
|
84
|
+
"fromStatus": { "$ref": "#/definitions/checkStatus" },
|
|
85
|
+
"toStatus": { "$ref": "#/definitions/checkStatus" },
|
|
86
|
+
"message": { "type": "string" }
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"schemaDriftEntry": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"additionalProperties": false,
|
|
92
|
+
"required": ["capability", "name", "changes"],
|
|
93
|
+
"properties": {
|
|
94
|
+
"capability": { "$ref": "#/definitions/checkId" },
|
|
95
|
+
"name": { "type": "string" },
|
|
96
|
+
"changes": {
|
|
97
|
+
"type": "array",
|
|
98
|
+
"items": { "type": "string" }
|
|
106
99
|
}
|
|
107
100
|
}
|
|
108
101
|
},
|
|
102
|
+
"responseChangeEntry": {
|
|
103
|
+
"type": "object",
|
|
104
|
+
"additionalProperties": false,
|
|
105
|
+
"required": ["capability", "name", "change"],
|
|
106
|
+
"properties": {
|
|
107
|
+
"capability": { "$ref": "#/definitions/checkId" },
|
|
108
|
+
"name": { "type": "string" },
|
|
109
|
+
"change": { "type": "string" }
|
|
110
|
+
}
|
|
111
|
+
},
|
|
109
112
|
"diffSummary": {
|
|
110
113
|
"type": "object",
|
|
111
114
|
"additionalProperties": false,
|
|
112
|
-
"required": [
|
|
113
|
-
"regressions",
|
|
114
|
-
"recoveries",
|
|
115
|
-
"unchanged",
|
|
116
|
-
"added",
|
|
117
|
-
"removed",
|
|
118
|
-
"gate"
|
|
119
|
-
],
|
|
115
|
+
"required": ["regressions", "recoveries", "unchanged", "added", "removed", "gate"],
|
|
120
116
|
"properties": {
|
|
121
117
|
"regressions": { "type": "integer", "minimum": 0 },
|
|
122
118
|
"recoveries": { "type": "integer", "minimum": 0 },
|
|
123
119
|
"unchanged": { "type": "integer", "minimum": 0 },
|
|
124
120
|
"added": { "type": "integer", "minimum": 0 },
|
|
125
121
|
"removed": { "type": "integer", "minimum": 0 },
|
|
126
|
-
"
|
|
127
|
-
|
|
128
|
-
}
|
|
122
|
+
"schemaDriftCount": { "type": "integer", "minimum": 0 },
|
|
123
|
+
"responseChangeCount": { "type": "integer", "minimum": 0 },
|
|
124
|
+
"gate": { "$ref": "#/definitions/gate" }
|
|
129
125
|
}
|
|
130
126
|
}
|
|
131
127
|
}
|