lighthouse 13.5.0-dev.20261008 → 13.5.0-dev.20261009

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.
@@ -0,0 +1,176 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://raw.githubusercontent.com/ards-project/ard-spec/main/spec/schemas/ard-entry.schema.json",
4
+ "title": "ArdEntry",
5
+ "description": "JSON Schema for an ARD entry — the description of a single agentic resource in a form that can be found by search. An ARD entry is defined by the ARD specification. It adopts the core descriptive terms of the default namespace and additionally requires the terms discovery depends on. Every ARD entry is a well-formed catalog entry; not every catalog entry is an ARD entry.",
6
+ "$ref": "#/$defs/ArdEntry",
7
+ "$defs": {
8
+ "EntryFields": {
9
+ "type": "object",
10
+ "description": "The terms an ARD entry may carry. This definition imposes no required terms; ArdEntry layers its own requirements on top.",
11
+ "properties": {
12
+ "@context": {
13
+ "description": "Optional JSON-LD context. Absent, the entry's unprefixed terms resolve to the default namespace. Present, it MAY declare additional namespaces whose prefixed terms describe the resource and become available as filter dimensions.",
14
+ "oneOf": [
15
+ { "type": "string", "format": "uri" },
16
+ { "type": "object" },
17
+ { "type": "array" }
18
+ ]
19
+ },
20
+ "@id": {
21
+ "type": "string",
22
+ "description": "Optional JSON-LD node identifier. When present alongside `identifier`, both MUST denote the same resource."
23
+ },
24
+ "identifier": {
25
+ "type": "string",
26
+ "pattern": "^urn:air:[a-zA-Z0-9.-]+(:[a-zA-Z0-9._-]+)+$",
27
+ "description": "Globally unique discovery handle. Domain-anchored URN: urn:air:<publisher>:<namespace>:<agent-name>. The <publisher> segment is the authority anchor used for publisher-authority binding."
28
+ },
29
+ "displayName": {
30
+ "type": "string",
31
+ "description": "Human-readable name."
32
+ },
33
+ "type": {
34
+ "type": "string",
35
+ "description": "Artifact type as an IANA Media Type (e.g. application/mcp-server-card+json). Names what the artifact is without constraining its internal schema."
36
+ },
37
+ "url": {
38
+ "type": "string",
39
+ "format": "uri",
40
+ "description": "Reference to the full artifact document. Mutually exclusive with `data`."
41
+ },
42
+ "data": {
43
+ "type": "object",
44
+ "description": "The complete artifact document, inline. Mutually exclusive with `url`."
45
+ },
46
+ "representativeQueries": {
47
+ "type": "array",
48
+ "items": { "type": "string" },
49
+ "description": "Sample natural-language queries this resource can serve — the signal a registry builds its semantic index from. RECOMMENDED on every entry; SHOULD contain 2-5 examples. Neither presence nor count is enforced here so that emitted entries validate; the conformance tester flags absence, or a count outside 2-5, as a warning (§D.2)."
50
+ },
51
+ "capabilities": {
52
+ "type": "array",
53
+ "items": { "type": "string" },
54
+ "description": "Short skill or tool tokens (e.g. [\"WeatherTool\"]) enabling structured filtering without fetching the full artifact."
55
+ },
56
+ "description": {
57
+ "type": "string",
58
+ "description": "Short natural-language description. Contributes to the semantic index."
59
+ },
60
+ "tags": {
61
+ "type": "array",
62
+ "items": { "type": "string" },
63
+ "description": "Keywords for filtering and faceting."
64
+ },
65
+ "version": {
66
+ "type": "string",
67
+ "description": "Version of the artifact."
68
+ },
69
+ "updatedAt": {
70
+ "type": "string",
71
+ "format": "date-time",
72
+ "description": "ISO 8601 timestamp of the last modification."
73
+ },
74
+ "metadata": {
75
+ "type": "object",
76
+ "description": "Custom key-value pairs, available as metadata.* filter keys.",
77
+ "additionalProperties": {
78
+ "type": ["string", "number", "boolean", "null"]
79
+ }
80
+ },
81
+ "TrustManifest": {
82
+ "$ref": "#/$defs/TrustManifest"
83
+ }
84
+ },
85
+ "additionalProperties": true,
86
+ "$comment": "additionalProperties is intentionally true. Terms drawn from namespaces declared in the entry's @context (e.g. okf:taxonomy) are valid and become filter dimensions. Constraining this to false would defeat the namespace extension mechanism."
87
+ },
88
+ "ArdEntry": {
89
+ "description": "A complete ARD entry, as published. Requires the discovery-critical terms and exactly one of url/data.",
90
+ "allOf": [{ "$ref": "#/$defs/EntryFields" }],
91
+ "required": ["identifier", "displayName", "type"],
92
+ "oneOf": [
93
+ {
94
+ "required": ["url"],
95
+ "not": { "required": ["data"] }
96
+ },
97
+ {
98
+ "required": ["data"],
99
+ "not": { "required": ["url"] }
100
+ }
101
+ ]
102
+ },
103
+ "ArdManifest": {
104
+ "type": "object",
105
+ "description": "The document published at /.well-known/ard.json (or any entry source). ARD requires only an `entries` array of ARD entries; any other top-level members are transport-defined and ignored by ARD, so additionalProperties is open.",
106
+ "required": ["entries"],
107
+ "properties": {
108
+ "entries": {
109
+ "type": "array",
110
+ "items": { "$ref": "#/$defs/ArdEntry" }
111
+ }
112
+ },
113
+ "additionalProperties": true
114
+ },
115
+ "TrustManifest": {
116
+ "type": "object",
117
+ "description": "Identity, compliance, and provenance envelope. ARD requires only `identity` (for publisher-authority binding) and does not constrain the internal schema; validation is intentionally permissive (additionalProperties: true) so a trust manifest defined by any framework is structurally valid, including members ARD does not enumerate such as trustSchema. This does not mean consumers ignore it: a federated registry is expected to inspect the manifest and verify it per the framework named in trustSchema (attestations, provenance, signature). Signing and verification procedures are defined by that framework, not by ARD.",
118
+ "required": ["identity"],
119
+ "properties": {
120
+ "identity": {
121
+ "type": "string",
122
+ "description": "Globally unique cryptographic workload identifier (SPIFFE ID, DID, or HTTPS FQDN URI). Its trust domain MUST align with the <publisher> segment of the entry's identifier."
123
+ },
124
+ "identityType": {
125
+ "type": "string",
126
+ "description": "Hint for the cryptographic format of the identity (e.g. spiffe, did, https)."
127
+ },
128
+ "trustSchema": {
129
+ "type": "object",
130
+ "description": "The trust framework the manifest conforms to, and the source of its verification procedure.",
131
+ "properties": {
132
+ "identifier": { "type": "string" },
133
+ "version": { "type": "string" },
134
+ "governanceUri": { "type": "string", "format": "uri" },
135
+ "verificationMethods": { "type": "array", "items": { "type": "string" } }
136
+ },
137
+ "additionalProperties": true
138
+ },
139
+ "attestations": {
140
+ "type": "array",
141
+ "description": "Verifiable claims (compliance audits, certifications).",
142
+ "items": {
143
+ "type": "object",
144
+ "required": ["type", "uri"],
145
+ "properties": {
146
+ "type": { "type": "string" },
147
+ "uri": { "type": "string", "format": "uri" },
148
+ "mediaType": { "type": "string" },
149
+ "digest": { "type": "string" }
150
+ },
151
+ "additionalProperties": true
152
+ }
153
+ },
154
+ "provenance": {
155
+ "type": "array",
156
+ "description": "Lineage trail of the artifact.",
157
+ "items": {
158
+ "type": "object",
159
+ "required": ["relation", "sourceId"],
160
+ "properties": {
161
+ "relation": { "type": "string" },
162
+ "sourceId": { "type": "string" },
163
+ "sourceDigest": { "type": "string" }
164
+ },
165
+ "additionalProperties": true
166
+ }
167
+ },
168
+ "signature": {
169
+ "type": "string",
170
+ "description": "Detached signature over the trust manifest content, per the framework named in trustSchema."
171
+ }
172
+ },
173
+ "additionalProperties": true
174
+ }
175
+ }
176
+ }
@@ -124,9 +124,9 @@ export interface GathererArtifacts extends PublicGathererArtifacts {
124
124
  InspectorIssues: Artifacts.InspectorIssues;
125
125
  /** The status and tools registered via WebMCP. */
126
126
  WebMCP: {isSupported: boolean, tools: Artifacts.WebMCPTool[]};
127
- /**
128
- * The WebMCP schema validation issues.
129
- * TODO: fold this into the WebMCP artifact.
127
+ /**
128
+ * The WebMCP schema validation issues.
129
+ * TODO: fold this into the WebMCP artifact.
130
130
  */
131
131
  WebMcpSchemaIssues: Artifacts.WebMcpSchemaIssue[];
132
132
  /** JS coverage information for code used during audit. Keyed by script id. */
@@ -138,18 +138,38 @@ export interface GathererArtifacts extends PublicGathererArtifacts {
138
138
  RobotsTxt: { status: number | null, content: string | null, errorMessage?: string };
139
139
  /** Information on fetching and the content of the /llm.txt file. */
140
140
  LlmsTxt: { status: number | null, content: string | null, errorMessage?: string };
141
- /** Information on fetching and the content of the /ai-catalog.json manifest file. */
141
+ /** Information on discovering, fetching, and the content of the Agentic Resource Discovery (ARD) manifest. */
142
142
  AgentResourceDiscovery: {
143
143
  status: number | null;
144
144
  content: string | null;
145
145
  headers: Record<string, string> | null;
146
- catalogUrl: string | null;
146
+ /** The loaded manifest URL, or if none loaded, the first failed advertised URL (or `/.well-known/ard.json`). */
147
+ catalogUrl: string;
148
+ /** The discovery mechanism `catalogUrl` came from. `legacy*` sources are ARD's predecessor (`ai-catalog`) names. */
149
+ discoverySource: Artifacts.ArdDiscoverySource;
147
150
  discoverySignals: {
148
151
  robotsTxtAgentmap: string | null;
152
+ /** `<link rel="ard">` */
149
153
  htmlLink: string | null;
154
+ /** `Link: <...>; rel="ard"` */
150
155
  httpHeaderLink: string | null;
156
+ /** `<link rel="ai-catalog">` */
157
+ legacyHtmlLink: string | null;
158
+ /** `Link: <...>; rel="ai-catalog"` */
159
+ legacyHttpHeaderLink: string | null;
160
+ /** `/.well-known/ard.json` */
151
161
  wellKnown: string;
162
+ /** `/.well-known/ai-catalog.json` */
163
+ legacyWellKnown: string;
152
164
  };
165
+ /** Advertised locations (not the probed well-known paths) that were tried and failed to load, in discovery order. */
166
+ failedSources: Array<{
167
+ source: Artifacts.ArdDiscoverySource;
168
+ url: string;
169
+ status: number | null;
170
+ /** Set when the fetch itself failed (e.g. a timeout) rather than returning an HTTP error. */
171
+ errorMessage?: string;
172
+ }>;
153
173
  errorMessage?: string;
154
174
  };
155
175
  /** Source maps of scripts executed in the page. */
@@ -165,6 +185,10 @@ export interface GathererArtifacts extends PublicGathererArtifacts {
165
185
  }
166
186
 
167
187
  declare namespace Artifacts {
188
+ /** Agentic Resource Discovery (ARD) manifest locations. `legacy*` sources are ARD's predecessor (`ai-catalog`) names. */
189
+ type ArdDiscoverySource = 'robotsTxtAgentmap' | 'htmlLink' | 'httpHeaderLink' | 'wellKnown' |
190
+ 'legacyHtmlLink' | 'legacyHttpHeaderLink' | 'legacyWellKnown';
191
+
168
192
  interface WebMcpSchemaIssue {
169
193
  errorType: string;
170
194
  violatingNodeId?: number;
@@ -1,16 +0,0 @@
1
- // https://buildtracker.dev/docs/installation/#upload-your-builds
2
-
3
-
4
- module.exports = {
5
- applicationUrl: 'https://lh-build-tracker.herokuapp.com',
6
- artifacts: [
7
- 'dist/lightrider/lighthouse-lr-bundle.js',
8
- 'dist/extension/scripts/lighthouse-ext-bundle.js',
9
- 'dist/devtools/lighthouse-dt-bundle.js',
10
- 'dist/gh-pages/viewer/src/bundled.js',
11
- 'dist/gh-pages/treemap/src/bundled.js',
12
- 'dist/lightrider/report-generator-bundle.js',
13
- 'dist/dt-report-resources/report.js',
14
- 'dist/dt-report-resources/report-generator.js',
15
- ],
16
- };
@@ -1,292 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://raw.githubusercontent.com/ards-project/ard-spec/main/spec/schemas/ai-catalog.schema.json",
4
- "title": "AICatalogManifest",
5
- "description": "JSON Schema for the ai-catalog.json capability manifest, defining how AI artifacts are advertised.",
6
- "type": "object",
7
- "required": [
8
- "specVersion",
9
- "entries"
10
- ],
11
- "properties": {
12
- "specVersion": {
13
- "type": "string",
14
- "description": "Version of the ai-catalog specification used in this manifest.",
15
- "enum": [
16
- "1.0"
17
- ]
18
- },
19
- "host": {
20
- "type": "object",
21
- "description": "Information about the catalog publisher or hosting entity.",
22
- "required": [
23
- "displayName"
24
- ],
25
- "properties": {
26
- "displayName": {
27
- "type": "string",
28
- "description": "Human-readable name of the host."
29
- },
30
- "identifier": {
31
- "type": "string",
32
- "description": "Cryptographic or verifiable identifier of the host (e.g. did:web:domain.com)."
33
- },
34
- "documentationUrl": {
35
- "type": "string",
36
- "format": "uri",
37
- "description": "URL to publisher documentation."
38
- },
39
- "logoUrl": {
40
- "type": "string",
41
- "format": "uri",
42
- "description": "URL to the publisher's logo image."
43
- },
44
- "trustManifest": {
45
- "$ref": "#/$defs/trustManifest"
46
- }
47
- },
48
- "additionalProperties": false
49
- },
50
- "entries": {
51
- "type": "array",
52
- "description": "List of AI agent or capability catalog entries.",
53
- "items": {
54
- "$ref": "#/$defs/catalogEntry"
55
- }
56
- }
57
- },
58
- "additionalProperties": false,
59
- "$defs": {
60
- "catalogEntry": {
61
- "type": "object",
62
- "description": "A single AI capability entry within the catalog.",
63
- "required": [
64
- "identifier",
65
- "displayName",
66
- "type"
67
- ],
68
- "oneOf": [
69
- {
70
- "required": [
71
- "url"
72
- ],
73
- "not": {
74
- "required": [
75
- "data"
76
- ]
77
- }
78
- },
79
- {
80
- "required": [
81
- "data"
82
- ],
83
- "not": {
84
- "required": [
85
- "url"
86
- ]
87
- }
88
- }
89
- ],
90
- "properties": {
91
- "identifier": {
92
- "type": "string",
93
- "pattern": "^urn:air:[a-zA-Z0-9.-]+(:[a-zA-Z0-9._-]+)+$",
94
- "description": "RFC 8141-compliant unique logical URN formatted as: urn:air:<publisher>:<namespace>:<agent-name>"
95
- },
96
- "displayName": {
97
- "type": "string",
98
- "description": "Human-friendly display name."
99
- },
100
- "type": {
101
- "type": "string",
102
- "description": "IANA Media Type indicating the specific protocol wrapper or payload structure (e.g. application/mcp-server-card+json)."
103
- },
104
- "url": {
105
- "type": "string",
106
- "format": "uri",
107
- "description": "HTTP URL reference to retrieve the full artifact document."
108
- },
109
- "data": {
110
- "type": "object",
111
- "description": "Embedded JSON object containing the complete artifact specification inline."
112
- },
113
- "description": {
114
- "type": "string",
115
- "description": "Brief natural-language description of the capability."
116
- },
117
- "tags": {
118
- "type": "array",
119
- "items": {
120
- "type": "string"
121
- },
122
- "description": "Tags or keywords for basic categorizing and filtering."
123
- },
124
- "capabilities": {
125
- "type": "array",
126
- "items": {
127
- "type": "string"
128
- },
129
- "description": "Explicit high-performance indexing tags representing skills, tools, or functions (e.g. ['WeatherTool', 'ForecastTool'])."
130
- },
131
- "representativeQueries": {
132
- "type": "array",
133
- "minItems": 2,
134
- "maxItems": 5,
135
- "items": {
136
- "type": "string"
137
- },
138
- "description": "Representative natural-language search queries used for indexing and vector embedding generation."
139
- },
140
- "version": {
141
- "type": "string",
142
- "description": "Semantic version of the capability."
143
- },
144
- "updatedAt": {
145
- "type": "string",
146
- "format": "date-time",
147
- "description": "ISO 8601 timestamp of the last modification."
148
- },
149
- "metadata": {
150
- "type": "object",
151
- "description": "Arbitrary key-value pairs for custom extensions.",
152
- "additionalProperties": {
153
- "type": [
154
- "string",
155
- "number",
156
- "boolean",
157
- "null"
158
- ]
159
- }
160
- },
161
- "trustManifest": {
162
- "$ref": "#/$defs/trustManifest"
163
- }
164
- }
165
- },
166
- "trustManifest": {
167
- "type": "object",
168
- "description": "Zero-trust security, identity, and compliance envelope metadata.",
169
- "required": [
170
- "identity"
171
- ],
172
- "properties": {
173
- "identity": {
174
- "type": "string",
175
- "description": "Globally unique cryptographic workload identifier principal (e.g. SPIFFE ID or DID URI)."
176
- },
177
- "identityType": {
178
- "type": "string",
179
- "enum": [
180
- "spiffe",
181
- "did",
182
- "https",
183
- "other"
184
- ],
185
- "description": "Hint representing the cryptographic format of the identity."
186
- },
187
- "trustSchema": {
188
- "$ref": "#/$defs/trustSchema"
189
- },
190
- "attestations": {
191
- "type": "array",
192
- "description": "List of verifiable claims (SOC 2 audits, compliance statements, HIPAA checks).",
193
- "items": {
194
- "type": "object",
195
- "required": [
196
- "type",
197
- "uri",
198
- "mediaType"
199
- ],
200
- "properties": {
201
- "type": {
202
- "type": "string",
203
- "description": "Attestation standard type (e.g., SOC2-Type2, HIPAA)."
204
- },
205
- "uri": {
206
- "type": "string",
207
- "format": "uri",
208
- "description": "Location of the attestation certificate or document."
209
- },
210
- "mediaType": {
211
- "type": "string",
212
- "description": "Format of the attestation document (e.g. application/pdf, text/html)."
213
- },
214
- "digest": {
215
- "type": "string",
216
- "description": "Cryptographic sha256 digest for document integrity verification."
217
- }
218
- },
219
- "additionalProperties": false
220
- }
221
- },
222
- "provenance": {
223
- "type": "array",
224
- "description": "Cryptographic lineage trail of the artifact.",
225
- "items": {
226
- "type": "object",
227
- "required": [
228
- "relation",
229
- "sourceId"
230
- ],
231
- "properties": {
232
- "relation": {
233
- "type": "string",
234
- "enum": [
235
- "derivedFrom",
236
- "publishedFrom",
237
- "copiedFrom"
238
- ],
239
- "description": "Lineage relation."
240
- },
241
- "sourceId": {
242
- "type": "string",
243
- "description": "Identifier of the source artifact."
244
- },
245
- "sourceDigest": {
246
- "type": "string",
247
- "description": "Optional sha256 digest for safety."
248
- }
249
- },
250
- "additionalProperties": false
251
- }
252
- },
253
- "signature": {
254
- "type": "string",
255
- "description": "Detached JWS signature generated over the fields of the trustManifest."
256
- }
257
- },
258
- "additionalProperties": false
259
- },
260
- "trustSchema": {
261
- "type": "object",
262
- "description": "Describes the trust framework applied to the artifact.",
263
- "required": [
264
- "identifier",
265
- "version"
266
- ],
267
- "properties": {
268
- "identifier": {
269
- "type": "string",
270
- "description": "Unique identifier of the trust schema/framework (e.g. URN)."
271
- },
272
- "version": {
273
- "type": "string",
274
- "description": "Version of the trust schema/framework."
275
- },
276
- "governanceUri": {
277
- "type": "string",
278
- "format": "uri",
279
- "description": "URI pointing to the governance policy document."
280
- },
281
- "verificationMethods": {
282
- "type": "array",
283
- "items": {
284
- "type": "string"
285
- },
286
- "description": "Verification methods supported by the schema (e.g., ['did', 'x509', 'dns-01'])."
287
- }
288
- },
289
- "additionalProperties": false
290
- }
291
- }
292
- }