@openwop/spec-artifacts 2.0.0-rc.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/CORPUS-STAMP.json +234 -0
- package/LICENSE +201 -0
- package/README.md +7 -0
- package/api/.redocly.lint-ignore.yaml +22 -0
- package/api/asyncapi.yaml +834 -0
- package/api/grpc/openwop.proto +251 -0
- package/api/openapi.yaml +2693 -0
- package/api/redocly.yaml +23 -0
- package/api/seams-v2.yaml +680 -0
- package/api/v2/asyncapi.yaml +528 -0
- package/api/v2/openapi.yaml +3139 -0
- package/api/v2/redocly.yaml +16 -0
- package/package.json +10 -0
- package/schemas/README.md +144 -0
- package/schemas/a2a-task-state.schema.json +78 -0
- package/schemas/a2ui-surface-delta-frame.schema.json +48 -0
- package/schemas/agent-deployment-transition.schema.json +49 -0
- package/schemas/agent-deployment.schema.json +54 -0
- package/schemas/agent-eval-suite.schema.json +140 -0
- package/schemas/agent-inventory-response.schema.json +115 -0
- package/schemas/agent-manifest.schema.json +156 -0
- package/schemas/agent-org-chart.schema.json +82 -0
- package/schemas/agent-ref.schema.json +63 -0
- package/schemas/agent-roster-entry.schema.json +81 -0
- package/schemas/agent-roster-response.schema.json +21 -0
- package/schemas/ai-envelope.schema.json +134 -0
- package/schemas/annotation-create.schema.json +37 -0
- package/schemas/annotation.schema.json +56 -0
- package/schemas/artifact-type-pack-manifest.schema.json +244 -0
- package/schemas/audit-verify-result.schema.json +90 -0
- package/schemas/budget-policy.schema.json +18 -0
- package/schemas/capabilities.schema.json +4160 -0
- package/schemas/certification-bundle-v2.schema.json +118 -0
- package/schemas/channel-presence-payload.schema.json +41 -0
- package/schemas/channel-written-payload.schema.json +55 -0
- package/schemas/chat-card-pack-manifest.schema.json +253 -0
- package/schemas/compact-tool-descriptor.schema.json +51 -0
- package/schemas/compensation-policy.schema.json +64 -0
- package/schemas/conformance-certification-bundle.schema.json +86 -0
- package/schemas/connection-pack-manifest.schema.json +353 -0
- package/schemas/conversation-event.schema.json +168 -0
- package/schemas/conversation-turn.schema.json +117 -0
- package/schemas/core-conformance-mock-agent-config.schema.json +152 -0
- package/schemas/credential-provenance.schema.json +18 -0
- package/schemas/credential-reference.schema.json +21 -0
- package/schemas/debug-bundle.schema.json +196 -0
- package/schemas/dispatch-config.schema.json +112 -0
- package/schemas/envelopes/clarification.request.schema.json +52 -0
- package/schemas/envelopes/error.schema.json +30 -0
- package/schemas/envelopes/media.audio.schema.json +38 -0
- package/schemas/envelopes/media.file.schema.json +37 -0
- package/schemas/envelopes/media.image.schema.json +33 -0
- package/schemas/envelopes/schema.request.schema.json +26 -0
- package/schemas/envelopes/schema.response.schema.json +22 -0
- package/schemas/envelopes/ui.a2ui-surface.schema.json +154 -0
- package/schemas/error-envelope.schema.json +25 -0
- package/schemas/eval-summary.schema.json +92 -0
- package/schemas/export-bundle.schema.json +66 -0
- package/schemas/form-content-pack-manifest.schema.json +243 -0
- package/schemas/frontend-plugin-manifest.schema.json +109 -0
- package/schemas/goal.schema.json +104 -0
- package/schemas/heartbeat-evaluated.schema.json +14 -0
- package/schemas/heartbeat-state-changed.schema.json +14 -0
- package/schemas/localized-content-language-settings.schema.json +26 -0
- package/schemas/localized-content-page-response.schema.json +60 -0
- package/schemas/localized-content-page.schema.json +62 -0
- package/schemas/localized-content-section.schema.json +51 -0
- package/schemas/memory-entry.schema.json +36 -0
- package/schemas/memory-list-options.schema.json +37 -0
- package/schemas/node-pack-manifest.schema.json +654 -0
- package/schemas/orchestrator-decision.schema.json +90 -0
- package/schemas/org-chart-responsibility-view.schema.json +26 -0
- package/schemas/pack-lockfile.schema.json +108 -0
- package/schemas/prompt-kind.schema.json +8 -0
- package/schemas/prompt-pack-manifest.schema.json +117 -0
- package/schemas/prompt-ref.schema.json +40 -0
- package/schemas/prompt-template.schema.json +149 -0
- package/schemas/proposal.schema.json +84 -0
- package/schemas/registry-version-manifest.schema.json +208 -0
- package/schemas/residency.schema.json +16 -0
- package/schemas/run-ancestry-response.schema.json +54 -0
- package/schemas/run-diff-response.schema.json +64 -0
- package/schemas/run-event-payloads.schema.json +4452 -0
- package/schemas/run-event.schema.json +211 -0
- package/schemas/run-options.schema.json +80 -0
- package/schemas/run-orchestrator-decided-event.schema.json +20 -0
- package/schemas/run-snapshot.schema.json +148 -0
- package/schemas/security-advisory.schema.json +109 -0
- package/schemas/self-hosted-runner-dispatch-frame.schema.json +79 -0
- package/schemas/self-hosted-runner-registration.schema.json +53 -0
- package/schemas/self-hosted-runner-result-frame.schema.json +38 -0
- package/schemas/subject.schema.json +56 -0
- package/schemas/suspend-request.schema.json +207 -0
- package/schemas/tool-descriptor.schema.json +63 -0
- package/schemas/trigger-event.schema.json +222 -0
- package/schemas/trigger-subscription-registration.schema.json +67 -0
- package/schemas/trigger-subscription.schema.json +26 -0
- package/schemas/ui-plugin-message.schema.json +90 -0
- package/schemas/v2/a2a-task-state.schema.json +102 -0
- package/schemas/v2/a2ui-surface-delta-frame.schema.json +62 -0
- package/schemas/v2/agent-deployment-transition.schema.json +67 -0
- package/schemas/v2/agent-deployment.schema.json +68 -0
- package/schemas/v2/agent-eval-suite.schema.json +214 -0
- package/schemas/v2/agent-inventory-response.schema.json +172 -0
- package/schemas/v2/agent-manifest.schema.json +218 -0
- package/schemas/v2/agent-org-chart.schema.json +149 -0
- package/schemas/v2/agent-ref.schema.json +67 -0
- package/schemas/v2/agent-roster-entry.schema.json +104 -0
- package/schemas/v2/agent-roster-response.schema.json +27 -0
- package/schemas/v2/ai-envelope.schema.json +167 -0
- package/schemas/v2/annotation-create.schema.json +109 -0
- package/schemas/v2/annotation.schema.json +142 -0
- package/schemas/v2/artifact-type-pack-manifest.schema.json +245 -0
- package/schemas/v2/audit-verify-result.schema.json +110 -0
- package/schemas/v2/budget-policy.schema.json +61 -0
- package/schemas/v2/capabilities.schema.json +7644 -0
- package/schemas/v2/certification-bundle.schema.json +401 -0
- package/schemas/v2/channel-presence-payload.schema.json +60 -0
- package/schemas/v2/channel-written-payload.schema.json +64 -0
- package/schemas/v2/chat-card-pack-manifest.schema.json +254 -0
- package/schemas/v2/compact-tool-descriptor.schema.json +108 -0
- package/schemas/v2/compensation-policy.schema.json +91 -0
- package/schemas/v2/compensation-projection.schema.json +95 -0
- package/schemas/v2/configurable.schema.json +110 -0
- package/schemas/v2/connection-pack-manifest.schema.json +354 -0
- package/schemas/v2/conversation-event.schema.json +281 -0
- package/schemas/v2/conversation-turn.schema.json +165 -0
- package/schemas/v2/credential-provenance.schema.json +62 -0
- package/schemas/v2/credential-reference.schema.json +28 -0
- package/schemas/v2/debug-bundle.schema.json +312 -0
- package/schemas/v2/dispatch-config.schema.json +147 -0
- package/schemas/v2/effect-ledger-projection.schema.json +71 -0
- package/schemas/v2/effect-seam-manifest.schema.json +98 -0
- package/schemas/v2/envelopes/clarification.request.schema.json +59 -0
- package/schemas/v2/envelopes/error.schema.json +35 -0
- package/schemas/v2/envelopes/media.audio.schema.json +41 -0
- package/schemas/v2/envelopes/media.file.schema.json +40 -0
- package/schemas/v2/envelopes/media.image.schema.json +36 -0
- package/schemas/v2/envelopes/schema.request.schema.json +29 -0
- package/schemas/v2/envelopes/schema.response.schema.json +26 -0
- package/schemas/v2/envelopes/ui.a2ui-surface.schema.json +292 -0
- package/schemas/v2/error-envelope.schema.json +229 -0
- package/schemas/v2/eval-summary.schema.json +166 -0
- package/schemas/v2/export-bundle.schema.json +94 -0
- package/schemas/v2/form-content-pack-manifest.schema.json +241 -0
- package/schemas/v2/frontend-plugin-manifest.schema.json +152 -0
- package/schemas/v2/goal.schema.json +188 -0
- package/schemas/v2/heartbeat-evaluated.schema.json +34 -0
- package/schemas/v2/heartbeat-state-changed.schema.json +31 -0
- package/schemas/v2/ids.schema.json +31 -0
- package/schemas/v2/localized-content-language-settings.schema.json +34 -0
- package/schemas/v2/localized-content-page-response.schema.json +94 -0
- package/schemas/v2/localized-content-page.schema.json +87 -0
- package/schemas/v2/localized-content-section.schema.json +63 -0
- package/schemas/v2/memory-entry.schema.json +45 -0
- package/schemas/v2/memory-list-options.schema.json +41 -0
- package/schemas/v2/node-pack-manifest.schema.json +657 -0
- package/schemas/v2/orchestrator-decision.schema.json +120 -0
- package/schemas/v2/org-chart-responsibility-view.schema.json +36 -0
- package/schemas/v2/pack-lockfile.schema.json +139 -0
- package/schemas/v2/prompt-kind.schema.json +14 -0
- package/schemas/v2/prompt-pack-manifest.schema.json +118 -0
- package/schemas/v2/prompt-ref.schema.json +42 -0
- package/schemas/v2/prompt-template.schema.json +209 -0
- package/schemas/v2/proposal.schema.json +145 -0
- package/schemas/v2/registry-version-manifest.schema.json +292 -0
- package/schemas/v2/residency.schema.json +19 -0
- package/schemas/v2/run-ancestry-response.schema.json +68 -0
- package/schemas/v2/run-diff-response.schema.json +80 -0
- package/schemas/v2/run-event-payloads.schema.json +4588 -0
- package/schemas/v2/run-event.schema.json +324 -0
- package/schemas/v2/run-options.schema.json +90 -0
- package/schemas/v2/run-orchestrator-decided-event.schema.json +22 -0
- package/schemas/v2/run-snapshot.schema.json +207 -0
- package/schemas/v2/security-advisory.schema.json +138 -0
- package/schemas/v2/self-hosted-runner-dispatch-frame.schema.json +119 -0
- package/schemas/v2/self-hosted-runner-registration.schema.json +74 -0
- package/schemas/v2/self-hosted-runner-result-frame.schema.json +47 -0
- package/schemas/v2/subject-link.schema.json +69 -0
- package/schemas/v2/subject.schema.json +597 -0
- package/schemas/v2/suspend-request.schema.json +370 -0
- package/schemas/v2/tool-descriptor.schema.json +150 -0
- package/schemas/v2/trigger-event.schema.json +508 -0
- package/schemas/v2/trigger-subscription-registration.schema.json +99 -0
- package/schemas/v2/trigger-subscription.schema.json +79 -0
- package/schemas/v2/ui-plugin-message.schema.json +149 -0
- package/schemas/v2/workflow-chain-pack-manifest.schema.json +610 -0
- package/schemas/v2/workflow-definition.schema.json +864 -0
- package/schemas/v2/workload-identity.schema.json +115 -0
- package/schemas/v2/workspace-file-create.schema.json +23 -0
- package/schemas/v2/workspace-file.schema.json +45 -0
- package/schemas/workflow-chain-pack-manifest.schema.json +615 -0
- package/schemas/workflow-definition.schema.json +850 -0
- package/schemas/workload-identity.schema.json +79 -0
- package/schemas/workspace-file-create.schema.json +20 -0
- package/schemas/workspace-file.schema.json +39 -0
- package/spec/v1/alias-detectors.json +283 -0
- package/spec/v1/capability-declaration-classes.json +176 -0
- package/spec/v1/core-standard-manifest.json +423 -0
- package/spec/v1/deprecations.json +854 -0
- package/spec/v1/deprecations.schema.json +187 -0
- package/spec/v1/event-codemap.json +1089 -0
- package/spec/v1/event-codemap.schema.json +41 -0
- package/spec/v1/extensions.json +1273 -0
- package/spec/v1/gaps.json +14581 -0
- package/spec/v1/gaps.schema.json +55 -0
- package/spec/v1/migrations.json +1822 -0
- package/spec/v1/migrations.schema.json +44 -0
- package/spec/v1/operation-path-manifest.json +462 -0
- package/spec/v1/spec-gaps.json +4823 -0
- package/spec/v2/declaration.json +1862 -0
- package/spec/v2/declaration.schema.json +305 -0
- package/spec/v2/errors.json +837 -0
- package/spec/v2/event-codemap.json +1099 -0
- package/spec/v2/event-codemap.schema.json +114 -0
- package/spec/v2/ext/provider-idempotency/registry.json +6 -0
- package/spec/v2/facets/a2a.schema.json +51 -0
- package/spec/v2/facets/aiProviders.schema.json +56 -0
- package/spec/v2/facets/auth.schema.json +91 -0
- package/spec/v2/facets/heartbeat.schema.json +20 -0
- package/spec/v2/facets/interrupt.schema.json +29 -0
- package/spec/v2/facets/mcp.schema.json +81 -0
- package/spec/v2/facets/replay.schema.json +34 -0
- package/spec/v2/facets/sandbox.schema.json +31 -0
- package/spec/v2/facets/webhooks.schema.json +18 -0
- package/spec/v2/path-manifest.json +279 -0
- package/spec/v2/peer-dependency-aliases.json +165 -0
- package/spec/v2/profiles.json +45 -0
- package/spec/v2/release.json +6 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v1/registry-version-manifest.schema.json",
|
|
4
|
+
"title": "RegistryVersionManifest",
|
|
5
|
+
"description": "Registry-augmented version manifest served at `/v1/packs/{name}/-/{version}.json`. Extends the bare pack manifest (`node-pack-manifest.schema.json`) with registry-side metadata (integrity hash, publishedAt timestamp, signed-blob URLs, lifecycle flags). This is the shape clients receive when they GET a specific pack version; the bare manifest is what publishers commit inside the tarball.\n\n**Why two schemas?** The bare manifest is the authoring contract — what a vendor writes in their pack source tree. The registry-augmented version is the SERVING contract — what `packs.openwop.dev` produces after `build-index.mjs` computes integrity hashes + adds URL templates. Validating both surfaces independently catches drift between authored content and served metadata.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["name", "version", "engines", "integrity"],
|
|
8
|
+
"anyOf": [
|
|
9
|
+
{ "properties": { "nodes": { "type": "array", "minItems": 1 } }, "required": ["nodes"] },
|
|
10
|
+
{ "properties": { "agents": { "type": "array", "minItems": 1 } }, "required": ["agents"] },
|
|
11
|
+
{ "properties": { "artifactTypes": { "type": "array", "minItems": 1 } }, "required": ["artifactTypes"] },
|
|
12
|
+
{ "required": ["provider"] },
|
|
13
|
+
{ "properties": { "chains": { "type": "array", "minItems": 1 } }, "required": ["chains"] },
|
|
14
|
+
{ "properties": { "prompts": { "type": "array", "minItems": 1 } }, "required": ["prompts"] },
|
|
15
|
+
{ "properties": { "cards": { "type": "array", "minItems": 1 } }, "required": ["cards"] },
|
|
16
|
+
{ "properties": { "templates": { "type": "array", "minItems": 1 } }, "required": ["templates"] }
|
|
17
|
+
],
|
|
18
|
+
"allOf": [
|
|
19
|
+
{
|
|
20
|
+
"$comment": "RFC 0107 — runtime is required for EXECUTABLE kinds (node, or kind absent) and MUST be absent for DECLARATIVE kinds (artifact-type, connection, workflow-chain, prompt, card, form-content). NOTE: the chat-card-pack kind string is `card` per RFC 0071 (corrected 2026-06-23; an earlier RFC 0107 draft said `chat-card`). `form-content` added by RFC 0137.",
|
|
21
|
+
"if": {
|
|
22
|
+
"properties": { "kind": { "enum": ["artifact-type", "connection", "workflow-chain", "prompt", "card", "form-content"] } },
|
|
23
|
+
"required": ["kind"]
|
|
24
|
+
},
|
|
25
|
+
"then": { "not": { "required": ["runtime"] } },
|
|
26
|
+
"else": { "required": ["runtime"] }
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"properties": {
|
|
30
|
+
"name": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "Reverse-DNS pack name. Mirrors `node-pack-manifest.schema.json` §name.",
|
|
33
|
+
"pattern": "^(core|vendor|community|private)\\.[a-z][a-z0-9_-]*(\\.[a-z][a-zA-Z0-9_-]*)+$",
|
|
34
|
+
"minLength": 1,
|
|
35
|
+
"maxLength": 256
|
|
36
|
+
},
|
|
37
|
+
"version": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "Pack version per SemVer 2.0.0. Must match the URL path the manifest is served at.",
|
|
40
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"
|
|
41
|
+
},
|
|
42
|
+
"description": { "type": "string", "maxLength": 1024 },
|
|
43
|
+
"author": { "type": "string" },
|
|
44
|
+
"license": { "type": "string" },
|
|
45
|
+
"homepage": { "type": "string", "format": "uri" },
|
|
46
|
+
"repository": { "type": "string", "format": "uri" },
|
|
47
|
+
"keywords": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"items": { "type": "string", "maxLength": 64 },
|
|
50
|
+
"maxItems": 50
|
|
51
|
+
},
|
|
52
|
+
"engines": {
|
|
53
|
+
"type": "object",
|
|
54
|
+
"required": ["openwop"],
|
|
55
|
+
"properties": {
|
|
56
|
+
"openwop": { "type": "string", "minLength": 1 }
|
|
57
|
+
},
|
|
58
|
+
"additionalProperties": { "type": "string" }
|
|
59
|
+
},
|
|
60
|
+
"kind": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"enum": ["node", "artifact-type", "connection", "workflow-chain", "prompt", "card", "form-content"],
|
|
63
|
+
"default": "node",
|
|
64
|
+
"description": "Pack-kind discriminator (RFC 0107). ABSENT ≡ `node` (the original, executable kind — backward compatible). Executable kinds (`node`) carry `runtime` + `nodes[]`/`agents[]`. DECLARATIVE kinds carry their own payload and NO `runtime`: `artifact-type` → `artifactTypes[]` (RFC 0075); `connection` → `provider` (RFC 0095); `workflow-chain` → `chains[]` (RFC 0013); `prompt` → `prompts[]`; `card` → `cards[]` (the chat-card pack, RFC 0071 — kind string is `card`, NOT `chat-card`; an earlier RFC 0107 draft used `chat-card`, corrected 2026-06-23); `form-content` → `templates[]` (RFC 0137). The registry's runtime-support check (registry-operations.md §Validation flow #7) is skipped for declarative kinds."
|
|
65
|
+
},
|
|
66
|
+
"artifactTypes": {
|
|
67
|
+
"type": "array",
|
|
68
|
+
"description": "Present iff `kind == \"artifact-type\"` (RFC 0075). Mirrors `artifact-type-pack-manifest.schema.json` `artifactTypes[]` (each: `artifactTypeId`, `title`, `schema`, `export[]`). Carried loosely here (the source schema is authoritative); the registry denormalizes `artifactTypes[].artifactTypeId` into the per-pack index for discovery.",
|
|
69
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
70
|
+
},
|
|
71
|
+
"provider": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"description": "Present iff `kind == \"connection\"` (RFC 0095). Mirrors `connection-pack-manifest.schema.json` `provider` (id, category, auth, reach, …). MUST NOT carry credential material (RFC 0095 §B.2 — enforced at source; a registry SHOULD re-scan). The registry denormalizes `provider.id` into the per-pack index.",
|
|
74
|
+
"additionalProperties": true
|
|
75
|
+
},
|
|
76
|
+
"chains": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"description": "Present iff `kind == \"workflow-chain\"` (RFC 0013). Carried loosely (the source schema is authoritative); the registry denormalizes `chains[].chainId` into the per-pack index.",
|
|
79
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
80
|
+
},
|
|
81
|
+
"prompts": {
|
|
82
|
+
"type": "array",
|
|
83
|
+
"description": "Present iff `kind == \"prompt\"`. Carried loosely; source schema authoritative.",
|
|
84
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
85
|
+
},
|
|
86
|
+
"cards": {
|
|
87
|
+
"type": "array",
|
|
88
|
+
"description": "Present iff `kind == \"card\"` (the chat-card pack, RFC 0071; the registry denormalizes `cards[].cardTypeId` into the per-pack index). Carried loosely; source schema authoritative.",
|
|
89
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
90
|
+
},
|
|
91
|
+
"templates": {
|
|
92
|
+
"type": "array",
|
|
93
|
+
"description": "Present iff `kind == \"form-content\"` (RFC 0137). Form templates the pack contributes (each: `templateId`, `version`, `label`, `title`, `fields[]`). Carried loosely here per the RFC 0107 G1 pattern — `form-content-pack-manifest.schema.json` is the authoritative source contract, and the registry denormalizes `templates[].templateId` into the per-pack index for discovery (`registry-operations.md` §\"Type-ID indexing\").",
|
|
94
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
95
|
+
},
|
|
96
|
+
"runtime": {
|
|
97
|
+
"type": "object",
|
|
98
|
+
"required": ["language"],
|
|
99
|
+
"properties": {
|
|
100
|
+
"language": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"enum": ["javascript", "typescript", "wasm", "remote"],
|
|
103
|
+
"description": "Pack runtime. `javascript`/`typescript` for in-process Node executors; `wasm` for sandboxed WASM (RFC 0008 ABI); `remote` for agent-only packs that dispatch via remote LLM providers + don't ship local executor bytecode."
|
|
104
|
+
},
|
|
105
|
+
"entry": { "type": "string" },
|
|
106
|
+
"abiVersion": { "type": "string" }
|
|
107
|
+
},
|
|
108
|
+
"additionalProperties": true
|
|
109
|
+
},
|
|
110
|
+
"peerDependencies": {
|
|
111
|
+
"type": "object",
|
|
112
|
+
"description": "Host capabilities the pack consumes. Each key is a host-capability identifier (e.g., `host.canvas`); each value declares the support level the pack expects.",
|
|
113
|
+
"additionalProperties": { "type": "string" }
|
|
114
|
+
},
|
|
115
|
+
"dependencies": {
|
|
116
|
+
"type": "object",
|
|
117
|
+
"description": "Pack dependencies (other packs). Wire-locked at install time per `pack-lockfile.schema.json`.",
|
|
118
|
+
"additionalProperties": { "type": "string" }
|
|
119
|
+
},
|
|
120
|
+
"signing": {
|
|
121
|
+
"type": "object",
|
|
122
|
+
"description": "Embedded signing metadata. The pack's signing key MUST be one of the keys registered in `.well-known/openwop-registry.json` `signingKeys[]` AND MUST be authorized for the pack's namespace via `permittedNamespaces`.\n\nTwo identifier forms in the wild:\n - `keyId`: canonical (newer packs). Matches an entry in registry's `signingKeys[].keyId`.\n - `publicKeyRef`: legacy alias of `keyId` (used by `build-pack-tarball.mjs --key-id <id>`). Equivalent semantics.\n\nAt least one of `keyId` / `publicKeyRef` MUST be present; if both, they MUST be equal. The schema's `oneOf` block enforces this.",
|
|
123
|
+
"required": ["method"],
|
|
124
|
+
"oneOf": [
|
|
125
|
+
{ "required": ["keyId"] },
|
|
126
|
+
{ "required": ["publicKeyRef"] }
|
|
127
|
+
],
|
|
128
|
+
"properties": {
|
|
129
|
+
"method": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"enum": ["manual", "ed25519", "sigstore"],
|
|
132
|
+
"description": "Signing method. `manual` and `ed25519` both denote a detached Ed25519 signature over canonical-JSON pack.json (synonymous in practice; both forms appear in published packs). `sigstore` reserved for the SLSA-friendly OIDC path."
|
|
133
|
+
},
|
|
134
|
+
"keyId": { "type": "string", "minLength": 1 },
|
|
135
|
+
"publicKeyRef": { "type": "string", "minLength": 1 },
|
|
136
|
+
"publicKeyUrl": { "type": "string", "format": "uri-reference" },
|
|
137
|
+
"signatureRef": { "type": "string" }
|
|
138
|
+
},
|
|
139
|
+
"additionalProperties": true
|
|
140
|
+
},
|
|
141
|
+
"nodes": {
|
|
142
|
+
"type": "array",
|
|
143
|
+
"items": {
|
|
144
|
+
"type": "object",
|
|
145
|
+
"required": ["typeId", "version", "category", "role"],
|
|
146
|
+
"additionalProperties": true
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"agents": {
|
|
150
|
+
"type": "array",
|
|
151
|
+
"items": { "type": "object", "additionalProperties": true }
|
|
152
|
+
},
|
|
153
|
+
"integrity": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"description": "SRI-style integrity hash of the SIGNED tarball (`sha256-<base64(sha256)>`). Computed by `registry/scripts/build-index.mjs` from the on-disk `.tgz`. Consumers MUST verify the fetched tarball's hash matches this field before unpacking.",
|
|
156
|
+
"pattern": "^sha256-[A-Za-z0-9+/=]+$"
|
|
157
|
+
},
|
|
158
|
+
"publishedAt": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"description": "ISO-8601 UTC timestamp of first publish. Immutable per spec — set at first publish, never re-issued on subsequent index rebuilds.",
|
|
161
|
+
"format": "date-time"
|
|
162
|
+
},
|
|
163
|
+
"tarballUrl": {
|
|
164
|
+
"type": "string",
|
|
165
|
+
"description": "Registry-relative URL for the signed tarball. Always `/v1/packs/{name}/-/{version}.tgz`.",
|
|
166
|
+
"pattern": "^/v1/packs/[^/]+/-/[^/]+\\.tgz$"
|
|
167
|
+
},
|
|
168
|
+
"signatureUrl": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"description": "Registry-relative URL for the detached Ed25519 signature. Always `/v1/packs/{name}/-/{version}.sig`.",
|
|
171
|
+
"pattern": "^/v1/packs/[^/]+/-/[^/]+\\.sig$"
|
|
172
|
+
},
|
|
173
|
+
"deprecated": {
|
|
174
|
+
"type": "boolean",
|
|
175
|
+
"description": "Advisory: this version is deprecated. Consumers MAY refuse to install but registry continues to serve."
|
|
176
|
+
},
|
|
177
|
+
"yanked": {
|
|
178
|
+
"type": "boolean",
|
|
179
|
+
"description": "Hard refusal: this version was published in error. Registry MUST refuse to serve the tarball; consumers MUST refuse to dispatch nodes from yanked versions."
|
|
180
|
+
},
|
|
181
|
+
"yankedReason": {
|
|
182
|
+
"type": "string",
|
|
183
|
+
"maxLength": 512,
|
|
184
|
+
"description": "Optional one-line rationale shown by clients when a yanked install is attempted. Conventionally references the advisory id (`OPENWOP-YYYY-NNNN`) when one was issued."
|
|
185
|
+
},
|
|
186
|
+
"deprecationReason": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"maxLength": 512,
|
|
189
|
+
"description": "Optional one-line rationale shown by clients when an install of a deprecated version is attempted. Typically names the replacement version + migration link."
|
|
190
|
+
},
|
|
191
|
+
"supersededBy": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"maxLength": 256,
|
|
194
|
+
"description": "Optional pointer to the version (or `<name>@<version>`) that replaces this one. Per spec/v1/registry-operations.md, engine consumers in `open` / `verified` mode MUST surface this value in any deprecation warning when set."
|
|
195
|
+
},
|
|
196
|
+
"advisoryUrl": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"format": "uri",
|
|
199
|
+
"description": "Optional URL with deprecation / yank rationale + remediation."
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
"patternProperties": {
|
|
203
|
+
"^(x-|vendor\\.)": {
|
|
204
|
+
"description": "Vendor / host extension escape hatch (RFC 0138). A property matching `^(x-|vendor\\.)` is a HOST EXTENSION: its semantics are unspecified by this protocol, and a consumer that does not recognize one MUST ignore it rather than reject the pack. Resolves the contradiction in `host-extensions.md` \u00a7\"Vendor-prefixed namespaces\", which requires a client receiving an unknown vendor-prefixed field to treat it as opaque \u2014 a field that `additionalProperties: false` previously made impossible to carry. SECURITY: an extension value is PACK-AUTHORED, therefore untrusted; \"ignore\" means ignore. This is the PUBLICATION contract: without the hatch here a pack carrying a root-level extension would validate against its source manifest and then be rejected at registry `PUT` \u2014 the same split-brain RFC 0138 exists to close. Per-item entry objects are already carried loosely (RFC 0107 G1), so this covers the root. See `node-packs.md` \u00a7\"Vendor extensions on pack manifests\" and the `pack-manifest-extension-opaque` invariant."
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"additionalProperties": false
|
|
208
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v1/residency.schema.json",
|
|
4
|
+
"title": "Residency",
|
|
5
|
+
"description": "RFC 0129 — an OPTIONAL data-residency constraint on a run-creation request (`POST /v1/runs`). A host advertising `capabilities.dataResidency` MUST honor-or-reject: accept iff `region` is in the advertised `dataResidency.regions[]`, else reject `residency_unavailable` (HTTP one-of 400/404/422) and create no run — it MUST NOT silently accept-and-ignore. Absent ⇒ no constraint (host default region). Physical byte-confinement of the accepted run is a declared operator SHOULD (RFC 0129 §4), not a wire guarantee.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["region"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"region": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"minLength": 1,
|
|
13
|
+
"description": "Requested processing region — an opaque operator code from the host's own vocabulary (e.g. `\"eu\"`, `\"us\"`, `\"eu-west-1\"`). Honored only if present in the host's advertised `capabilities.dataResidency.regions[]`; otherwise the run is rejected `residency_unavailable`."
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v1/run-ancestry-response.schema.json",
|
|
4
|
+
"title": "RunAncestryResponse",
|
|
5
|
+
"description": "RFC 0040 §C — response shape for `GET /v1/runs/{runId}/ancestry`. Returns the cross-host parent chain for a run. When the parent is on the same host, `parent.wellKnownUrl` is absent (existing single-host case). When the parent is on a different host, `parent.wellKnownUrl` MUST be set so a client can resolve the chain by walking the URLs. `parent: null` means the current run is a top-level run (not dispatched from another host). Hosts advertising `capabilities.multiAgent.executionModel.crossHostCausation.ancestryEndpointSupported: true` MUST serve this shape on a 200 response.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["runId", "hostId", "parent"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"runId": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"minLength": 1,
|
|
13
|
+
"description": "The runId from the request path."
|
|
14
|
+
},
|
|
15
|
+
"hostId": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"minLength": 1,
|
|
18
|
+
"description": "The host's own `crossHostCausation.hostId` advertisement. Identifies which host this run belongs to."
|
|
19
|
+
},
|
|
20
|
+
"parent": {
|
|
21
|
+
"oneOf": [
|
|
22
|
+
{ "type": "null" },
|
|
23
|
+
{
|
|
24
|
+
"type": "object",
|
|
25
|
+
"additionalProperties": false,
|
|
26
|
+
"required": ["runId", "hostId", "cause"],
|
|
27
|
+
"properties": {
|
|
28
|
+
"runId": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"description": "The parent run's runId."
|
|
32
|
+
},
|
|
33
|
+
"hostId": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"minLength": 1,
|
|
36
|
+
"description": "The parent run's hostId. MAY equal the current host's hostId (same-host parent) or differ (cross-host parent)."
|
|
37
|
+
},
|
|
38
|
+
"wellKnownUrl": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"format": "uri",
|
|
41
|
+
"description": "When the parent is on a different host, the parent's `/.well-known/openwop` URL so a client can walk the chain. ABSENT when the parent is on the same host as this run (existing single-host case)."
|
|
42
|
+
},
|
|
43
|
+
"cause": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"enum": ["mcp-tool-call", "a2a-message", "core.subWorkflow", "core.dispatch"],
|
|
46
|
+
"description": "What composition mechanism the parent used to dispatch this run. `core.dispatch` + `core.subWorkflow` are same-host (existing primitives); `mcp-tool-call` + `a2a-message` are cross-host (RFC 0040)."
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"description": "The run's immediate parent — `null` for top-level runs (not dispatched from any other run); otherwise the parent's identifiers + composition mechanism."
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v1/run-diff-response.schema.json",
|
|
4
|
+
"title": "RunDiffResponse",
|
|
5
|
+
"description": "RFC 0054 — deterministic, replay-aware structured diff of two runs' event sequences and terminal states, returned by GET /v1/runs/{runId}:diff?against={otherRunId}. The diff is a pure function of the two event logs (see spec/v1/replay.md determinism contract).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["a", "b", "eventDiffs", "stateDiff"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"a": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "The {runId} run (the path resource)."
|
|
12
|
+
},
|
|
13
|
+
"b": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "The {against} run (the query parameter)."
|
|
16
|
+
},
|
|
17
|
+
"divergedAtSeq": {
|
|
18
|
+
"type": ["integer", "null"],
|
|
19
|
+
"minimum": 0,
|
|
20
|
+
"description": "Event sequence number at which the two logs first diverge; null if identical. Aligns with replay.diverged.divergencePoint in spec/v1/replay.md."
|
|
21
|
+
},
|
|
22
|
+
"eventDiffs": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"description": "Ordered per-sequence differences. Empty when the logs are identical.",
|
|
25
|
+
"items": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": ["seq", "op"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"seq": {
|
|
30
|
+
"type": "integer",
|
|
31
|
+
"minimum": 0,
|
|
32
|
+
"description": "Event sequence number this diff entry applies to."
|
|
33
|
+
},
|
|
34
|
+
"op": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": ["added", "removed", "changed"],
|
|
37
|
+
"description": "added = present in b only; removed = present in a only; changed = present in both at this seq but differ by canonical comparison."
|
|
38
|
+
},
|
|
39
|
+
"aEvent": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"additionalProperties": true,
|
|
42
|
+
"description": "The run-a event at this seq (omitted when op = added). Shape per run-event.schema.json."
|
|
43
|
+
},
|
|
44
|
+
"bEvent": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": true,
|
|
47
|
+
"description": "The run-b event at this seq (omitted when op = removed). Shape per run-event.schema.json."
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"additionalProperties": false
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"stateDiff": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": true,
|
|
56
|
+
"description": "Diff of terminal RunSnapshot states (status, variables, channels) — redaction-safe (never carries credential material)."
|
|
57
|
+
},
|
|
58
|
+
"truncated": {
|
|
59
|
+
"type": "boolean",
|
|
60
|
+
"description": "True if either run was in-flight and only a prefix was compared."
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"additionalProperties": false
|
|
64
|
+
}
|