@skenora/tooling 0.1.2
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/README.md +32 -0
- package/bin/skenora-mcp-http.mjs +131 -0
- package/bin/skenora-mcp.mjs +50 -0
- package/bin/skenora.mjs +388 -0
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +109 -0
- package/dist/doctor.js.map +1 -0
- package/dist/examples.d.ts +26 -0
- package/dist/examples.d.ts.map +1 -0
- package/dist/examples.js +207 -0
- package/dist/examples.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-http.d.ts +16 -0
- package/dist/mcp-http.d.ts.map +1 -0
- package/dist/mcp-http.js +279 -0
- package/dist/mcp-http.js.map +1 -0
- package/dist/mcp.d.ts +79 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +817 -0
- package/dist/mcp.js.map +1 -0
- package/dist/resources.d.ts +24 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +141 -0
- package/dist/resources.js.map +1 -0
- package/dist/wgsl.d.ts +42 -0
- package/dist/wgsl.d.ts.map +1 -0
- package/dist/wgsl.js +133 -0
- package/dist/wgsl.js.map +1 -0
- package/package.json +53 -0
- package/resources/docs/diagnostics.md +16 -0
- package/resources/docs/overview.md +26 -0
- package/resources/docs/runtime-probe.md +17 -0
- package/resources/examples/gallery.json +1818 -0
- package/resources/examples/invalid-scene.json +9 -0
- package/resources/examples/valid-scene.json +69 -0
- package/resources/llms-full.txt +52 -0
- package/resources/llms.txt +19 -0
- package/resources/manifest.json +97 -0
- package/resources/schemas/example-manifest.schema.json +454 -0
- package/resources/schemas/scene-check-report.schema.json +36 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "skenora.scene",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"id": "tooling-example",
|
|
5
|
+
"name": "Tooling example",
|
|
6
|
+
"assets": {},
|
|
7
|
+
"entities": {},
|
|
8
|
+
"rootEntityIds": [],
|
|
9
|
+
"materials": {},
|
|
10
|
+
"materialBindings": {},
|
|
11
|
+
"textureAnimations": {},
|
|
12
|
+
"camera": {
|
|
13
|
+
"mode": "orbit",
|
|
14
|
+
"position": { "x": 0, "y": 2, "z": -6 },
|
|
15
|
+
"target": { "x": 0, "y": 0, "z": 0 },
|
|
16
|
+
"minZ": 0.01,
|
|
17
|
+
"maxZ": 10000,
|
|
18
|
+
"fov": 0.8,
|
|
19
|
+
"speed": 1
|
|
20
|
+
},
|
|
21
|
+
"cameraPaths": {},
|
|
22
|
+
"environment": {
|
|
23
|
+
"enabled": true,
|
|
24
|
+
"intensity": 1,
|
|
25
|
+
"rotationY": 0,
|
|
26
|
+
"background": { "mode": "color", "color": "#202124", "blur": 0 }
|
|
27
|
+
},
|
|
28
|
+
"ground": {
|
|
29
|
+
"enabled": false,
|
|
30
|
+
"mode": "solid",
|
|
31
|
+
"size": 20,
|
|
32
|
+
"fitToScene": false,
|
|
33
|
+
"padding": 1.5,
|
|
34
|
+
"color": "#808080",
|
|
35
|
+
"opacity": 1,
|
|
36
|
+
"shadowOpacity": 0.55
|
|
37
|
+
},
|
|
38
|
+
"fog": {
|
|
39
|
+
"enabled": false,
|
|
40
|
+
"mode": "linear",
|
|
41
|
+
"color": "#ffffff",
|
|
42
|
+
"density": 0.01,
|
|
43
|
+
"start": 10,
|
|
44
|
+
"end": 100
|
|
45
|
+
},
|
|
46
|
+
"weather": {
|
|
47
|
+
"enabled": false,
|
|
48
|
+
"type": "rain",
|
|
49
|
+
"intensity": 0.5,
|
|
50
|
+
"wind": { "x": 0, "y": 0, "z": 0 },
|
|
51
|
+
"particleSize": 0.1
|
|
52
|
+
},
|
|
53
|
+
"lights": [],
|
|
54
|
+
"postProcess": {
|
|
55
|
+
"enabled": false,
|
|
56
|
+
"samples": 1,
|
|
57
|
+
"bloom": false,
|
|
58
|
+
"glow": false,
|
|
59
|
+
"sharpen": false,
|
|
60
|
+
"grain": false,
|
|
61
|
+
"chromaticAberration": false,
|
|
62
|
+
"depthOfField": false,
|
|
63
|
+
"vignetteEnabled": false,
|
|
64
|
+
"ssao": { "enabled": false }
|
|
65
|
+
},
|
|
66
|
+
"flows": {},
|
|
67
|
+
"variables": {},
|
|
68
|
+
"extensions": {}
|
|
69
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Skenora agent reference
|
|
2
|
+
|
|
3
|
+
## Ownership
|
|
4
|
+
|
|
5
|
+
`SceneDocumentData` is persistent authored truth. EditorSession owns commands,
|
|
6
|
+
revision, undo, and selection. RuntimeSession owns Babylon Engine, Scene,
|
|
7
|
+
materials, GPU resources, render loop, and disposal. ResourceResolver is the
|
|
8
|
+
only path from logical asset references to bytes. ScenePlan compiles declarative
|
|
9
|
+
Blueprints and Patches without executing arbitrary code.
|
|
10
|
+
|
|
11
|
+
## Safe workflow
|
|
12
|
+
|
|
13
|
+
1. Discover schemas/capabilities from installed Skenora resources.
|
|
14
|
+
2. Produce a native SceneDocument, SceneBlueprint, or ScenePatch version 1.
|
|
15
|
+
3. Run pure `checkSceneInput()` and repair diagnostic codes.
|
|
16
|
+
4. Supply explicit resource bindings for Blueprint compilation.
|
|
17
|
+
5. Let the host commit through Editor/ScenePlan APIs.
|
|
18
|
+
6. Let Runtime project the accepted document.
|
|
19
|
+
7. Use `getBackendSnapshot()` for device facts and `probe()` for real health.
|
|
20
|
+
|
|
21
|
+
Never serialize Babylon objects or infer authored state from GPU resources.
|
|
22
|
+
Never put URLs, credentials, callbacks, JavaScript, GLSL, or WGSL in scene data.
|
|
23
|
+
MaterialProgram and ProceduralGeometryProgram are bounded declarative ceilings.
|
|
24
|
+
|
|
25
|
+
## Diagnostics
|
|
26
|
+
|
|
27
|
+
Every shared diagnostic is JSON-safe and includes version, code, severity,
|
|
28
|
+
stage, and message. Optional path and entity/asset/material/animation/binding/
|
|
29
|
+
capability identities locate the issue. `repair` is public guidance. Error
|
|
30
|
+
messages are explanatory but not stable identifiers.
|
|
31
|
+
|
|
32
|
+
## Runtime evidence
|
|
33
|
+
|
|
34
|
+
Backend snapshots report observed WebGL/WebGPU facts and host policy separately.
|
|
35
|
+
They do not prove rendering. `healthy` is permitted only when an active browser
|
|
36
|
+
Runtime rendered and successfully read pixels. Plain Node doctor runs are
|
|
37
|
+
`unverified`, not healthy.
|
|
38
|
+
|
|
39
|
+
## Tooling and MCP
|
|
40
|
+
|
|
41
|
+
The `skenora` CLI provides check, doctor, docs, examples, resource verification,
|
|
42
|
+
and a read-only stdio or loopback-HTTP MCP server. The default MCP exposes
|
|
43
|
+
resource discovery/read/search, schema lookup, pure scene check, and doctor
|
|
44
|
+
report generation. It exposes no filesystem writes, Editor commands, arbitrary
|
|
45
|
+
URL fetch, credentials, or Runtime objects.
|
|
46
|
+
|
|
47
|
+
A protected host may inject ScenePlan tools for an active Editor. Every such
|
|
48
|
+
call includes an opaque `editorHandle`; writes also require the revision token
|
|
49
|
+
returned by inspect and an idempotency key. Inspect returns a revision-bound
|
|
50
|
+
paginated safe outline. The host owns authentication, content-bound approval,
|
|
51
|
+
handle resolution, resource policy, audit, and persistence. Apply uses strict
|
|
52
|
+
projection and returns document and projection outcomes separately.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Skenora
|
|
2
|
+
|
|
3
|
+
Skenora is a local-first 3D scene foundation. Authored truth is a serializable
|
|
4
|
+
SceneDocument; Babylon.js objects are disposable runtime projections.
|
|
5
|
+
|
|
6
|
+
Use SceneBlueprint and ScenePatch for declarative input. Run `skenora check`
|
|
7
|
+
before execution. Diagnostics are versioned JSON objects; branch on code.
|
|
8
|
+
|
|
9
|
+
Use only bounded MaterialProgram and ProceduralGeometryProgram contracts. Never
|
|
10
|
+
emit raw shaders, arbitrary URLs, JavaScript, credentials, or runtime handles.
|
|
11
|
+
|
|
12
|
+
Static validity is not GPU health. A healthy Runtime report requires a real
|
|
13
|
+
browser render and pixel readback from `renderer.probe()`.
|
|
14
|
+
|
|
15
|
+
Offline resources: `skenora docs list`, `skenora examples list`, or the
|
|
16
|
+
read-only `skenora mcp` stdio/HTTP server. Protected host composition may add
|
|
17
|
+
handle-scoped ScenePlan inspect, resource search, validation, strict apply, and
|
|
18
|
+
operation-wait tools. Inspect pages model-safe scene IDs and relationships;
|
|
19
|
+
never invent an editor handle, revision token, or write approval.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "skenora.tooling-manifest",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"packageVersion": "0.1.2",
|
|
5
|
+
"resources": [
|
|
6
|
+
{
|
|
7
|
+
"id": "docs.overview",
|
|
8
|
+
"version": "1",
|
|
9
|
+
"kind": "documentation",
|
|
10
|
+
"title": "Skenora offline tooling",
|
|
11
|
+
"path": "docs/overview.md",
|
|
12
|
+
"mediaType": "text/markdown",
|
|
13
|
+
"sha256": "6a9e659a453670e79697da0a0074efcc7ef00c4faaf2a5f94277a156fcd002ab"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "docs.diagnostics",
|
|
17
|
+
"version": "1",
|
|
18
|
+
"kind": "documentation",
|
|
19
|
+
"title": "Diagnostics and repair",
|
|
20
|
+
"path": "docs/diagnostics.md",
|
|
21
|
+
"mediaType": "text/markdown",
|
|
22
|
+
"sha256": "93afbe844fb38dd6e5204eaefa476f3ab04f230ef2439c74f9802f82852d4a92"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "docs.runtime-probe",
|
|
26
|
+
"version": "1",
|
|
27
|
+
"kind": "documentation",
|
|
28
|
+
"title": "Runtime backend snapshot and probe",
|
|
29
|
+
"path": "docs/runtime-probe.md",
|
|
30
|
+
"mediaType": "text/markdown",
|
|
31
|
+
"sha256": "ca6e52e7dc19bca849107dcfa98cb7f08ad70e4824607e2c2005479e2b144c0d"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "examples.valid-scene",
|
|
35
|
+
"version": "1",
|
|
36
|
+
"kind": "example",
|
|
37
|
+
"title": "Valid minimal native scene",
|
|
38
|
+
"path": "examples/valid-scene.json",
|
|
39
|
+
"mediaType": "application/json",
|
|
40
|
+
"sha256": "df44ea351e95badcbd388547f6a6d8152332f5a6b0d27c577f16242c7a5c58a0"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"id": "examples.invalid-scene",
|
|
44
|
+
"version": "1",
|
|
45
|
+
"kind": "example",
|
|
46
|
+
"title": "Invalid scene with repairable diagnostics",
|
|
47
|
+
"path": "examples/invalid-scene.json",
|
|
48
|
+
"mediaType": "application/json",
|
|
49
|
+
"sha256": "7f53cbd52b9aba890c84fecc4e52ed5e8a42ad86edc28eb1ec65c0e1c572e5af"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "examples.gallery",
|
|
53
|
+
"version": "1",
|
|
54
|
+
"kind": "example",
|
|
55
|
+
"title": "Skenora immutable example gallery",
|
|
56
|
+
"path": "examples/gallery.json",
|
|
57
|
+
"mediaType": "application/json",
|
|
58
|
+
"sha256": "4a7ea71fa8097cf4ab569fde4aac544608362125ad352a04d8961ed30cae7a9d"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"id": "schemas.scene-check-report",
|
|
62
|
+
"version": "1",
|
|
63
|
+
"kind": "schema",
|
|
64
|
+
"title": "Scene check report JSON Schema",
|
|
65
|
+
"path": "schemas/scene-check-report.schema.json",
|
|
66
|
+
"mediaType": "application/schema+json",
|
|
67
|
+
"sha256": "16138ec754757e162fee6bf03438e07f00fd7e1bb9c1a2fcf85c13b149718218"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "schemas.example-manifest",
|
|
71
|
+
"version": "1",
|
|
72
|
+
"kind": "schema",
|
|
73
|
+
"title": "Skenora example manifest JSON Schema",
|
|
74
|
+
"path": "schemas/example-manifest.schema.json",
|
|
75
|
+
"mediaType": "application/schema+json",
|
|
76
|
+
"sha256": "644a98a2a97aeffa69d58fa5745195919569b2511bdce476042d578e7b02e85e"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "llms.summary",
|
|
80
|
+
"version": "1",
|
|
81
|
+
"kind": "llms",
|
|
82
|
+
"title": "Skenora concise agent reference",
|
|
83
|
+
"path": "llms.txt",
|
|
84
|
+
"mediaType": "text/plain",
|
|
85
|
+
"sha256": "2411b26761b665453dc00995d8f101edffe9d73313551076fbd71176bc2afe84"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "llms.full",
|
|
89
|
+
"version": "1",
|
|
90
|
+
"kind": "llms",
|
|
91
|
+
"title": "Skenora complete agent reference",
|
|
92
|
+
"path": "llms-full.txt",
|
|
93
|
+
"mediaType": "text/plain",
|
|
94
|
+
"sha256": "e43b62d9bd877128146810c4d438dfe32949637e77eac590fe021a5272fa123c"
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
}
|
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "urn:skenora:example-manifest:1",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"additionalProperties": false,
|
|
6
|
+
"required": [
|
|
7
|
+
"schema",
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"id",
|
|
10
|
+
"title",
|
|
11
|
+
"description",
|
|
12
|
+
"tags",
|
|
13
|
+
"mode",
|
|
14
|
+
"tier",
|
|
15
|
+
"requiredCapabilities",
|
|
16
|
+
"optionalCapabilities",
|
|
17
|
+
"assets",
|
|
18
|
+
"controls",
|
|
19
|
+
"evidence",
|
|
20
|
+
"files",
|
|
21
|
+
"license",
|
|
22
|
+
"aggregateSha256"
|
|
23
|
+
],
|
|
24
|
+
"properties": {
|
|
25
|
+
"schema": {
|
|
26
|
+
"const": "skenora.example-manifest"
|
|
27
|
+
},
|
|
28
|
+
"schemaVersion": {
|
|
29
|
+
"const": 1
|
|
30
|
+
},
|
|
31
|
+
"id": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
34
|
+
},
|
|
35
|
+
"title": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"minLength": 1
|
|
38
|
+
},
|
|
39
|
+
"description": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"minLength": 1
|
|
42
|
+
},
|
|
43
|
+
"tags": {
|
|
44
|
+
"type": "array",
|
|
45
|
+
"uniqueItems": true,
|
|
46
|
+
"items": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"mode": {
|
|
52
|
+
"enum": [
|
|
53
|
+
"blueprint",
|
|
54
|
+
"recipe",
|
|
55
|
+
"renderer-lab"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"tier": {
|
|
59
|
+
"enum": [
|
|
60
|
+
"foundation",
|
|
61
|
+
"bounded-effects",
|
|
62
|
+
"materials",
|
|
63
|
+
"render-graph",
|
|
64
|
+
"compute",
|
|
65
|
+
"advanced-simulation"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"requiredCapabilities": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"items": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"additionalProperties": false,
|
|
73
|
+
"required": [
|
|
74
|
+
"id",
|
|
75
|
+
"version",
|
|
76
|
+
"reason"
|
|
77
|
+
],
|
|
78
|
+
"properties": {
|
|
79
|
+
"id": {
|
|
80
|
+
"type": "string",
|
|
81
|
+
"pattern": "^[a-z][a-z0-9.-]+$"
|
|
82
|
+
},
|
|
83
|
+
"version": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"minLength": 1
|
|
86
|
+
},
|
|
87
|
+
"reason": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"minLength": 1
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
"optionalCapabilities": {
|
|
95
|
+
"type": "array",
|
|
96
|
+
"items": {
|
|
97
|
+
"type": "object",
|
|
98
|
+
"additionalProperties": false,
|
|
99
|
+
"required": [
|
|
100
|
+
"id",
|
|
101
|
+
"version",
|
|
102
|
+
"reason"
|
|
103
|
+
],
|
|
104
|
+
"properties": {
|
|
105
|
+
"id": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"pattern": "^[a-z][a-z0-9.-]+$"
|
|
108
|
+
},
|
|
109
|
+
"version": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"minLength": 1
|
|
112
|
+
},
|
|
113
|
+
"reason": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"minLength": 1
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"assets": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"items": {
|
|
123
|
+
"$ref": "#/$defs/asset"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"controls": {
|
|
127
|
+
"$ref": "#/$defs/fieldRule"
|
|
128
|
+
},
|
|
129
|
+
"evidence": {
|
|
130
|
+
"type": "array",
|
|
131
|
+
"items": {
|
|
132
|
+
"$ref": "#/$defs/evidence"
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"fallback": {
|
|
136
|
+
"$ref": "#/$defs/fallback"
|
|
137
|
+
},
|
|
138
|
+
"files": {
|
|
139
|
+
"type": "array",
|
|
140
|
+
"minItems": 1,
|
|
141
|
+
"items": {
|
|
142
|
+
"$ref": "#/$defs/file"
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"license": {
|
|
146
|
+
"$ref": "#/$defs/license"
|
|
147
|
+
},
|
|
148
|
+
"aggregateSha256": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"$defs": {
|
|
154
|
+
"asset": {
|
|
155
|
+
"type": "object",
|
|
156
|
+
"additionalProperties": false,
|
|
157
|
+
"required": [
|
|
158
|
+
"id",
|
|
159
|
+
"kind",
|
|
160
|
+
"required",
|
|
161
|
+
"provenance",
|
|
162
|
+
"description"
|
|
163
|
+
],
|
|
164
|
+
"properties": {
|
|
165
|
+
"id": {
|
|
166
|
+
"type": "string",
|
|
167
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
168
|
+
},
|
|
169
|
+
"kind": {
|
|
170
|
+
"enum": [
|
|
171
|
+
"texture",
|
|
172
|
+
"model",
|
|
173
|
+
"environment",
|
|
174
|
+
"data"
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
"required": {
|
|
178
|
+
"type": "boolean"
|
|
179
|
+
},
|
|
180
|
+
"provenance": {
|
|
181
|
+
"enum": [
|
|
182
|
+
"generated",
|
|
183
|
+
"repository",
|
|
184
|
+
"host-supplied"
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
"description": {
|
|
188
|
+
"type": "string",
|
|
189
|
+
"minLength": 1
|
|
190
|
+
},
|
|
191
|
+
"mediaType": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"minLength": 1
|
|
194
|
+
},
|
|
195
|
+
"integrity": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"minLength": 1
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
"evidence": {
|
|
202
|
+
"type": "object",
|
|
203
|
+
"additionalProperties": false,
|
|
204
|
+
"required": [
|
|
205
|
+
"kind",
|
|
206
|
+
"required",
|
|
207
|
+
"status",
|
|
208
|
+
"note"
|
|
209
|
+
],
|
|
210
|
+
"properties": {
|
|
211
|
+
"kind": {
|
|
212
|
+
"enum": [
|
|
213
|
+
"parse",
|
|
214
|
+
"compile",
|
|
215
|
+
"capability",
|
|
216
|
+
"preparation",
|
|
217
|
+
"runtime",
|
|
218
|
+
"pixels",
|
|
219
|
+
"visual",
|
|
220
|
+
"performance",
|
|
221
|
+
"package-consumption",
|
|
222
|
+
"cross-device"
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
"required": {
|
|
226
|
+
"type": "boolean"
|
|
227
|
+
},
|
|
228
|
+
"status": {
|
|
229
|
+
"enum": [
|
|
230
|
+
"unverified",
|
|
231
|
+
"passed",
|
|
232
|
+
"failed",
|
|
233
|
+
"not-applicable"
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
"note": {
|
|
237
|
+
"type": "string",
|
|
238
|
+
"minLength": 1
|
|
239
|
+
},
|
|
240
|
+
"report": {
|
|
241
|
+
"type": "string",
|
|
242
|
+
"minLength": 1
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
"fallback": {
|
|
247
|
+
"type": "object",
|
|
248
|
+
"additionalProperties": false,
|
|
249
|
+
"required": [
|
|
250
|
+
"strategy",
|
|
251
|
+
"description"
|
|
252
|
+
],
|
|
253
|
+
"properties": {
|
|
254
|
+
"strategy": {
|
|
255
|
+
"enum": [
|
|
256
|
+
"degrade",
|
|
257
|
+
"substitute-example",
|
|
258
|
+
"unsupported"
|
|
259
|
+
]
|
|
260
|
+
},
|
|
261
|
+
"description": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"minLength": 1
|
|
264
|
+
},
|
|
265
|
+
"exampleId": {
|
|
266
|
+
"type": "string",
|
|
267
|
+
"pattern": "^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
"file": {
|
|
272
|
+
"type": "object",
|
|
273
|
+
"additionalProperties": false,
|
|
274
|
+
"required": [
|
|
275
|
+
"path",
|
|
276
|
+
"role",
|
|
277
|
+
"mediaType",
|
|
278
|
+
"bytes",
|
|
279
|
+
"sha256"
|
|
280
|
+
],
|
|
281
|
+
"properties": {
|
|
282
|
+
"path": {
|
|
283
|
+
"type": "string",
|
|
284
|
+
"minLength": 1,
|
|
285
|
+
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)(?!.*\\\\).+$"
|
|
286
|
+
},
|
|
287
|
+
"role": {
|
|
288
|
+
"enum": [
|
|
289
|
+
"readme",
|
|
290
|
+
"blueprint",
|
|
291
|
+
"source",
|
|
292
|
+
"fixture",
|
|
293
|
+
"evidence"
|
|
294
|
+
]
|
|
295
|
+
},
|
|
296
|
+
"mediaType": {
|
|
297
|
+
"type": "string",
|
|
298
|
+
"minLength": 1
|
|
299
|
+
},
|
|
300
|
+
"bytes": {
|
|
301
|
+
"type": "integer",
|
|
302
|
+
"minimum": 0
|
|
303
|
+
},
|
|
304
|
+
"sha256": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"pattern": "^[a-f0-9]{64}$"
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"license": {
|
|
311
|
+
"type": "object",
|
|
312
|
+
"additionalProperties": false,
|
|
313
|
+
"required": [
|
|
314
|
+
"spdx",
|
|
315
|
+
"attribution"
|
|
316
|
+
],
|
|
317
|
+
"properties": {
|
|
318
|
+
"spdx": {
|
|
319
|
+
"type": "string",
|
|
320
|
+
"minLength": 1
|
|
321
|
+
},
|
|
322
|
+
"attribution": {
|
|
323
|
+
"type": "string",
|
|
324
|
+
"minLength": 1
|
|
325
|
+
},
|
|
326
|
+
"source": {
|
|
327
|
+
"type": "string",
|
|
328
|
+
"minLength": 1
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"fieldRule": {
|
|
333
|
+
"type": "object",
|
|
334
|
+
"additionalProperties": false,
|
|
335
|
+
"required": [
|
|
336
|
+
"description"
|
|
337
|
+
],
|
|
338
|
+
"anyOf": [
|
|
339
|
+
{
|
|
340
|
+
"required": [
|
|
341
|
+
"type"
|
|
342
|
+
]
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"required": [
|
|
346
|
+
"oneOf"
|
|
347
|
+
]
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
"properties": {
|
|
351
|
+
"type": {
|
|
352
|
+
"enum": [
|
|
353
|
+
"object",
|
|
354
|
+
"array",
|
|
355
|
+
"string",
|
|
356
|
+
"number",
|
|
357
|
+
"integer",
|
|
358
|
+
"boolean"
|
|
359
|
+
]
|
|
360
|
+
},
|
|
361
|
+
"oneOf": {
|
|
362
|
+
"type": "array",
|
|
363
|
+
"minItems": 1,
|
|
364
|
+
"items": {
|
|
365
|
+
"$ref": "#/$defs/fieldRule"
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
"nullable": {
|
|
369
|
+
"type": "boolean"
|
|
370
|
+
},
|
|
371
|
+
"description": {
|
|
372
|
+
"type": "string",
|
|
373
|
+
"minLength": 1
|
|
374
|
+
},
|
|
375
|
+
"enum": {
|
|
376
|
+
"type": "array",
|
|
377
|
+
"items": {
|
|
378
|
+
"type": [
|
|
379
|
+
"string",
|
|
380
|
+
"number",
|
|
381
|
+
"boolean"
|
|
382
|
+
]
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
"minimum": {
|
|
386
|
+
"type": "number"
|
|
387
|
+
},
|
|
388
|
+
"exclusiveMinimum": {
|
|
389
|
+
"type": "number"
|
|
390
|
+
},
|
|
391
|
+
"maximum": {
|
|
392
|
+
"type": "number"
|
|
393
|
+
},
|
|
394
|
+
"minLength": {
|
|
395
|
+
"type": "integer",
|
|
396
|
+
"minimum": 0
|
|
397
|
+
},
|
|
398
|
+
"minItems": {
|
|
399
|
+
"type": "integer",
|
|
400
|
+
"minimum": 0
|
|
401
|
+
},
|
|
402
|
+
"maxItems": {
|
|
403
|
+
"type": "integer",
|
|
404
|
+
"minimum": 0
|
|
405
|
+
},
|
|
406
|
+
"properties": {
|
|
407
|
+
"type": "object",
|
|
408
|
+
"additionalProperties": {
|
|
409
|
+
"$ref": "#/$defs/fieldRule"
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
"required": {
|
|
413
|
+
"type": "array",
|
|
414
|
+
"uniqueItems": true,
|
|
415
|
+
"items": {
|
|
416
|
+
"type": "string",
|
|
417
|
+
"minLength": 1
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
"additionalProperties": {
|
|
421
|
+
"oneOf": [
|
|
422
|
+
{
|
|
423
|
+
"type": "boolean"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"$ref": "#/$defs/fieldRule"
|
|
427
|
+
}
|
|
428
|
+
]
|
|
429
|
+
},
|
|
430
|
+
"items": {
|
|
431
|
+
"$ref": "#/$defs/fieldRule"
|
|
432
|
+
},
|
|
433
|
+
"default": {},
|
|
434
|
+
"unit": {
|
|
435
|
+
"type": "string",
|
|
436
|
+
"minLength": 1
|
|
437
|
+
},
|
|
438
|
+
"update": {
|
|
439
|
+
"enum": [
|
|
440
|
+
"parameter",
|
|
441
|
+
"rebuild"
|
|
442
|
+
]
|
|
443
|
+
},
|
|
444
|
+
"reference": {
|
|
445
|
+
"enum": [
|
|
446
|
+
"asset",
|
|
447
|
+
"entity",
|
|
448
|
+
"material"
|
|
449
|
+
]
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|