@openwop/openwop-conformance 2.35.1 → 2.36.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/CHANGELOG.md +20 -0
- package/README.md +3 -3
- package/coverage.md +13 -1
- package/dist/spec-artifacts.lock.json +2 -2
- package/fixtures/a2ui-v09/negative-event-name-deleteall.json +139 -0
- package/fixtures/a2ui-v09/negative-extra-property.json +140 -0
- package/fixtures/a2ui-v09/negative-foreign-catalog.json +139 -0
- package/fixtures/a2ui-v09/negative-formatstring-label.json +145 -0
- package/fixtures/a2ui-v09/negative-functioncall-openurl.json +129 -0
- package/fixtures/a2ui-v09/negative-image-component.json +145 -0
- package/fixtures/a2ui-v09/negative-textfield-obscured.json +140 -0
- package/fixtures/a2ui-v09/negative-theme-iconurl.json +142 -0
- package/fixtures/a2ui-v09/positive-approve-brief.json +139 -0
- package/fixtures/conformance-artifact-emit.json +28 -0
- package/fixtures/conformance-clarification-nested.json +53 -0
- package/fixtures/conformance-clarification-sensitive.json +49 -0
- package/fixtures/conformance-credential.json +25 -0
- package/fixtures/conformance-mcp-client.json +28 -0
- package/fixtures/interrupt-payloads/interrupt-payload-approval.json +1 -0
- package/fixtures/interrupt-payloads/interrupt-payload-clarification.json +1 -0
- package/fixtures/interrupt-payloads/interrupt-payload-conversation-close.json +1 -0
- package/fixtures/interrupt-payloads/interrupt-payload-conversation-exchange.json +1 -0
- package/fixtures/interrupt-payloads/interrupt-payload-conversation-start.json +1 -0
- package/fixtures/interrupt-payloads/interrupt-payload-custom.json +1 -0
- package/fixtures/interrupt-payloads/interrupt-payload-external-event.json +1 -0
- package/fixtures/interrupt-payloads/interrupt-payload-low-confidence.json +1 -0
- package/fixtures/interrupt-payloads/negative-approval-with-clarification-data.json +1 -0
- package/fixtures/interrupt-payloads/negative-conversation-close-with-conversation-start-data.json +1 -0
- package/fixtures/interrupt-payloads/negative-conversation-start-with-conversation-exchange-data.json +1 -0
- package/fixtures/interrupt-payloads/negative-custom-with-conversation-start-data.json +1 -0
- package/fixtures/interrupt-payloads/negative-low-confidence-with-custom-data.json +1 -0
- package/fixtures/node-pack-runtime/negative-entry-mismatch.json +31 -0
- package/fixtures/node-pack-runtime/negative-headers.json +37 -0
- package/fixtures/node-pack-runtime/negative-http.json +31 -0
- package/fixtures/node-pack-runtime/negative-icons.json +37 -0
- package/fixtures/node-pack-runtime/negative-meta.json +36 -0
- package/fixtures/node-pack-runtime/negative-non-remote-language.json +31 -0
- package/fixtures/node-pack-runtime/negative-packages.json +41 -0
- package/fixtures/node-pack-runtime/negative-sse.json +31 -0
- package/fixtures/node-pack-runtime/negative-templated-url.json +31 -0
- package/fixtures/node-pack-runtime/negative-two-remotes.json +35 -0
- package/fixtures/node-pack-runtime/negative-variables.json +38 -0
- package/fixtures/node-pack-runtime/negative-version-range.json +31 -0
- package/fixtures/node-pack-runtime/positive-every-optional-member.json +40 -0
- package/fixtures/node-pack-runtime/positive-rfc-example.json +31 -0
- package/fixtures/node-pack-runtime/upstream/mcp-registry-server-2025-12-11.schema.json +574 -0
- package/fixtures/oauth-providers/synthetic.json +36 -4
- package/fixtures/upstream/a2a-v1.0.1/README.md +24 -0
- package/fixtures/upstream/a2a-v1.0.1/a2a.proto +811 -0
- package/fixtures/upstream/a2ui-v0.9/README.md +33 -0
- package/fixtures/upstream/a2ui-v0.9/catalog.json +1383 -0
- package/fixtures/upstream/a2ui-v0.9/common_types.json +305 -0
- package/fixtures/upstream/a2ui-v0.9/server_to_client.json +132 -0
- package/fixtures.md +139 -0
- package/package.json +2 -2
- package/requirements.json +4480 -97
- package/scenario-majors.json +93 -6
- package/schemas/CORPUS-STAMP.json +103 -89
- package/src/lib/localized-content.ts +53 -0
- package/src/lib/mcp-fake-server.ts +105 -4
- package/src/lib/node-pack-runtime.ts +41 -0
- package/src/lib/oauth-as-double.ts +316 -0
- package/src/lib/protected-resource.ts +88 -0
- package/src/lib/standard-webhooks.ts +120 -0
- package/src/lib/toolCatalog.ts +54 -4
- package/src/lib/trace-context.ts +98 -0
- package/src/lib/v2.ts +6 -0
- package/src/lib/webhook-receiver.ts +201 -1
- package/src/scenarios/artifact-type-pack-manifest-validation.test.ts +10 -1
- package/src/scenarios/auth-challenge-no-oracle.test.ts +122 -0
- package/src/scenarios/auth-oauth2-client-credentials.test.ts +46 -5
- package/src/scenarios/cross-host-traceparent-propagation.test.ts +92 -58
- package/src/scenarios/debugBundle.test.ts +41 -0
- package/src/scenarios/fixtures-valid.test.ts +72 -0
- package/src/scenarios/inbound-credential-no-passthrough.test.ts +115 -0
- package/src/scenarios/interrupt-approver-routing.test.ts +3 -0
- package/src/scenarios/localized-content-delivery.test.ts +26 -15
- package/src/scenarios/mcp-current-auth-boundary.test.ts +38 -0
- package/src/scenarios/mcp-tool-roundtrip.test.ts +29 -0
- package/src/scenarios/otel-mcp-semconv-projection.test.ts +85 -0
- package/src/scenarios/tool-catalog-compact-projection.test.ts +28 -14
- package/src/scenarios/tool-catalog-projection.test.ts +48 -12
- package/src/scenarios/tool-descriptor-shape.test.ts +34 -13
- package/src/scenarios/v2-a2a-agent-cards.test.ts +305 -0
- package/src/scenarios/v2-a2a-operation-map.test.ts +310 -0
- package/src/scenarios/v2-a2ui-v09-surface.test.ts +283 -0
- package/src/scenarios/v2-advertised-fixtures-exist.test.ts +2 -2
- package/src/scenarios/v2-artifact-a2a-shape.test.ts +122 -0
- package/src/scenarios/v2-auth-challenge.test.ts +119 -0
- package/src/scenarios/v2-bound-id-kinds.test.ts +1 -1
- package/src/scenarios/v2-callback-url-guarded.test.ts +2 -2
- package/src/scenarios/v2-capability-maturity-bounded.test.ts +108 -0
- package/src/scenarios/v2-configurable-closed.test.ts +1 -1
- package/src/scenarios/v2-content-locale-keys.test.ts +92 -0
- package/src/scenarios/v2-conversation-turn-parts.test.ts +74 -0
- package/src/scenarios/v2-credential-interrupt.test.ts +253 -0
- package/src/scenarios/v2-effect-identity-business-key.test.ts +2 -2
- package/src/scenarios/v2-fork-a-v1-run.test.ts +1 -1
- package/src/scenarios/v2-implementation-informational.test.ts +33 -0
- package/src/scenarios/v2-interop-trace-context.test.ts +351 -0
- package/src/scenarios/v2-lane-exp-only-bound.test.ts +236 -0
- package/src/scenarios/v2-lane-issuer-advertised.test.ts +52 -3
- package/src/scenarios/v2-mcp-client-results.test.ts +202 -0
- package/src/scenarios/v2-mcp-mount-map.test.ts +308 -0
- package/src/scenarios/v2-mcp-tasks.test.ts +503 -0
- package/src/scenarios/v2-oauth-client-pkce-state-iss.test.ts +203 -0
- package/src/scenarios/v2-oauth-mcp-reach-discovery.test.ts +186 -0
- package/src/scenarios/v2-oidc-id-token-audience.test.ts +108 -0
- package/src/scenarios/v2-protected-resource-metadata.test.ts +145 -0
- package/src/scenarios/v2-run-cancel.test.ts +1 -1
- package/src/scenarios/v2-run-fork-prefix.test.ts +4 -4
- package/src/scenarios/v2-run-pause-resume.test.ts +1 -1
- package/src/scenarios/v2-tool-catalog-annotations.test.ts +100 -0
- package/src/scenarios/v2-unmapped-type-refused.test.ts +1 -1
- package/src/scenarios/v2-v1-events-translated.test.ts +1 -1
- package/src/scenarios/v2-webhook-egress-refusal.test.ts +5 -5
- package/src/scenarios/v2-webhook-endpoint-verification.test.ts +124 -0
- package/src/scenarios/v2-webhook-message-id-stable.test.ts +124 -0
- package/src/scenarios/v2-webhook-secret-rotation.test.ts +132 -0
- package/src/scenarios/v2-webhook-standard-webhooks-delivery.test.ts +195 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "v0.9",
|
|
3
|
+
"catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json",
|
|
4
|
+
"surfaceId": "approve-brief",
|
|
5
|
+
"messages": [
|
|
6
|
+
{
|
|
7
|
+
"version": "v0.9",
|
|
8
|
+
"createSurface": {
|
|
9
|
+
"surfaceId": "approve-brief",
|
|
10
|
+
"catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"version": "v0.9",
|
|
15
|
+
"updateComponents": {
|
|
16
|
+
"surfaceId": "approve-brief",
|
|
17
|
+
"components": [
|
|
18
|
+
{
|
|
19
|
+
"id": "root",
|
|
20
|
+
"component": "Column",
|
|
21
|
+
"children": [
|
|
22
|
+
"h",
|
|
23
|
+
"name",
|
|
24
|
+
"when",
|
|
25
|
+
"region",
|
|
26
|
+
"agree",
|
|
27
|
+
"submit"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "h",
|
|
32
|
+
"component": "Text",
|
|
33
|
+
"text": "Launch brief",
|
|
34
|
+
"variant": "h2"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "name",
|
|
38
|
+
"component": "TextField",
|
|
39
|
+
"label": "Product name",
|
|
40
|
+
"value": {
|
|
41
|
+
"path": "/name"
|
|
42
|
+
},
|
|
43
|
+
"checks": [
|
|
44
|
+
{
|
|
45
|
+
"condition": {
|
|
46
|
+
"call": "required",
|
|
47
|
+
"args": {
|
|
48
|
+
"value": {
|
|
49
|
+
"path": "/name"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"message": "Required"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "when",
|
|
59
|
+
"component": "DateTimeInput",
|
|
60
|
+
"label": "Launch date",
|
|
61
|
+
"value": {
|
|
62
|
+
"path": "/when"
|
|
63
|
+
},
|
|
64
|
+
"enableDate": true
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"id": "region",
|
|
68
|
+
"component": "ChoicePicker",
|
|
69
|
+
"label": "Region",
|
|
70
|
+
"options": [
|
|
71
|
+
{
|
|
72
|
+
"label": "EU",
|
|
73
|
+
"value": "eu"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"label": "US",
|
|
77
|
+
"value": "us"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"value": {
|
|
81
|
+
"path": "/region"
|
|
82
|
+
},
|
|
83
|
+
"variant": "mutuallyExclusive"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "agree",
|
|
87
|
+
"component": "CheckBox",
|
|
88
|
+
"label": "I agree",
|
|
89
|
+
"value": {
|
|
90
|
+
"path": "/agree"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "submit_label",
|
|
95
|
+
"component": "Text",
|
|
96
|
+
"text": "Submit"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "submit",
|
|
100
|
+
"component": "Button",
|
|
101
|
+
"child": "submit_label",
|
|
102
|
+
"variant": "primary",
|
|
103
|
+
"action": {
|
|
104
|
+
"event": {
|
|
105
|
+
"name": "resume",
|
|
106
|
+
"context": {
|
|
107
|
+
"name": {
|
|
108
|
+
"path": "/name"
|
|
109
|
+
},
|
|
110
|
+
"when": {
|
|
111
|
+
"path": "/when"
|
|
112
|
+
},
|
|
113
|
+
"region": {
|
|
114
|
+
"path": "/region"
|
|
115
|
+
},
|
|
116
|
+
"agree": {
|
|
117
|
+
"path": "/agree"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"version": "v0.9",
|
|
128
|
+
"updateDataModel": {
|
|
129
|
+
"surfaceId": "approve-brief",
|
|
130
|
+
"value": {
|
|
131
|
+
"name": "",
|
|
132
|
+
"when": "",
|
|
133
|
+
"region": [],
|
|
134
|
+
"agree": false
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
]
|
|
139
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "conformance-artifact-emit",
|
|
3
|
+
"name": "Conformance: Artifact Emit",
|
|
4
|
+
"version": "1.0",
|
|
5
|
+
"description": "RFC 0205 (register G2). One conformance.artifact.emit node produces one artifact and emits artifact.created naming it, so the suite can read it back through getArtifact (GET /runs/{runId}/artifacts/{artifactId}). Opt-in: a host advertises this fixture only when it implements getArtifact. See conformance/fixtures.md and v2-artifact-a2a-shape.test.ts.",
|
|
6
|
+
"nodes": [
|
|
7
|
+
{
|
|
8
|
+
"id": "emit",
|
|
9
|
+
"typeId": "conformance.artifact.emit",
|
|
10
|
+
"name": "Emit artifact",
|
|
11
|
+
"position": { "x": 0, "y": 0 },
|
|
12
|
+
"config": {
|
|
13
|
+
"artifactType": "conformance.artifact.brief",
|
|
14
|
+
"name": "Conformance brief",
|
|
15
|
+
"summary": "The one artifact RFC 0205's read legs name.",
|
|
16
|
+
"data": { "title": "Conformance brief", "items": ["one", "two"] }
|
|
17
|
+
},
|
|
18
|
+
"inputs": {}
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"edges": [],
|
|
22
|
+
"triggers": [
|
|
23
|
+
{ "id": "manual", "type": "manual", "enabled": true }
|
|
24
|
+
],
|
|
25
|
+
"variables": [],
|
|
26
|
+
"metadata": { "tags": ["conformance", "artifacts", "rfc-0205"] },
|
|
27
|
+
"settings": { "timeout": 10000 }
|
|
28
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "conformance-clarification-nested",
|
|
3
|
+
"name": "Conformance: Clarification (nested schema)",
|
|
4
|
+
"version": "1.0",
|
|
5
|
+
"description": "RFC 0199 \u00a7D.2(d) probe. Suspends on a clarification whose one answer is an OBJECT. Bridged as MCP requestedSchema { q1: { type: object, \u2026 } } it is not a flat object of primitive properties, so an MCP mount MUST NOT bridge it in form mode (URL mode when the client declared it, else CallToolResult isError). See v2-mcp-mount-map.test.ts.",
|
|
6
|
+
"nodes": [
|
|
7
|
+
{
|
|
8
|
+
"id": "ask",
|
|
9
|
+
"typeId": "core.clarificationGate",
|
|
10
|
+
"name": "Clarification Gate (nested)",
|
|
11
|
+
"position": {
|
|
12
|
+
"x": 0,
|
|
13
|
+
"y": 0
|
|
14
|
+
},
|
|
15
|
+
"config": {
|
|
16
|
+
"questions": [
|
|
17
|
+
{
|
|
18
|
+
"id": "q1",
|
|
19
|
+
"question": "Where should the parcel go?",
|
|
20
|
+
"schema": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {
|
|
23
|
+
"street": {
|
|
24
|
+
"type": "string"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"inputs": {}
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"edges": [],
|
|
35
|
+
"triggers": [
|
|
36
|
+
{
|
|
37
|
+
"id": "manual",
|
|
38
|
+
"type": "manual",
|
|
39
|
+
"enabled": true
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"variables": [],
|
|
43
|
+
"metadata": {
|
|
44
|
+
"tags": [
|
|
45
|
+
"conformance",
|
|
46
|
+
"hitl",
|
|
47
|
+
"rfc-0199"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"settings": {
|
|
51
|
+
"timeout": 0
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "conformance-clarification-sensitive",
|
|
3
|
+
"name": "Conformance: Clarification (sensitive field)",
|
|
4
|
+
"version": "1.0",
|
|
5
|
+
"description": "RFC 0199 \u00a7D.2(d) probe. Suspends on a clarification whose one answer is a string marked format: password. Bridged as MCP requestedSchema { q1: { type: string, format: password } } it is flat but sensitive, so an MCP mount MUST NOT bridge it in form mode (URL mode when the client declared it, else CallToolResult isError). This fixture exists to be REFUSED by the bridge: authoring such a clarification is itself forbidden by RFC 0199 \u00a7C.6, and it ships only as the machine-checkable probe. See v2-mcp-mount-map.test.ts.",
|
|
6
|
+
"nodes": [
|
|
7
|
+
{
|
|
8
|
+
"id": "ask",
|
|
9
|
+
"typeId": "core.clarificationGate",
|
|
10
|
+
"name": "Clarification Gate (sensitive)",
|
|
11
|
+
"position": {
|
|
12
|
+
"x": 0,
|
|
13
|
+
"y": 0
|
|
14
|
+
},
|
|
15
|
+
"config": {
|
|
16
|
+
"questions": [
|
|
17
|
+
{
|
|
18
|
+
"id": "q1",
|
|
19
|
+
"question": "Probe only \u2014 never answered with a real value.",
|
|
20
|
+
"schema": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"format": "password"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"inputs": {}
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"edges": [],
|
|
31
|
+
"triggers": [
|
|
32
|
+
{
|
|
33
|
+
"id": "manual",
|
|
34
|
+
"type": "manual",
|
|
35
|
+
"enabled": true
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"variables": [],
|
|
39
|
+
"metadata": {
|
|
40
|
+
"tags": [
|
|
41
|
+
"conformance",
|
|
42
|
+
"hitl",
|
|
43
|
+
"rfc-0199"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"settings": {
|
|
47
|
+
"timeout": 0
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "conformance-credential",
|
|
3
|
+
"name": "Conformance: Credential",
|
|
4
|
+
"version": "1.0",
|
|
5
|
+
"description": "RFC 0199 §C. One conformance.oauth.use node declaring auth { type: oauth2, provider: synthetic, scopes: [openwop.read] }. Run by a Subject with no credential for synthetic: under oauth.credentialInterrupt the node suspends on a credential interrupt (waiting-input); without the facet the host fails the node (RFC 0047 §C.3). Opt-in: a host advertises it only when it advertises oauth with the synthetic provider. See conformance/fixtures.md and v2-credential-interrupt.test.ts.",
|
|
6
|
+
"nodes": [
|
|
7
|
+
{
|
|
8
|
+
"id": "use-credential",
|
|
9
|
+
"typeId": "conformance.oauth.use",
|
|
10
|
+
"name": "Use a synthetic OAuth credential",
|
|
11
|
+
"position": { "x": 0, "y": 0 },
|
|
12
|
+
"config": {
|
|
13
|
+
"auth": { "type": "oauth2", "provider": "synthetic", "scopes": ["openwop.read"] }
|
|
14
|
+
},
|
|
15
|
+
"inputs": {}
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"edges": [],
|
|
19
|
+
"triggers": [
|
|
20
|
+
{ "id": "manual", "type": "manual", "enabled": true }
|
|
21
|
+
],
|
|
22
|
+
"variables": [],
|
|
23
|
+
"metadata": { "tags": ["conformance", "oauth", "hitl", "rfc-0199"] },
|
|
24
|
+
"settings": { "timeout": 0 }
|
|
25
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "conformance-mcp-client",
|
|
3
|
+
"name": "Conformance: v2 ctx.mcp client",
|
|
4
|
+
"version": "1.0",
|
|
5
|
+
"description": "RFC 0204 fixture for `v2-mcp-client-results.test.ts`. One node, `core.conformance.mcp-client` (conformance-RESERVED, like `core.conformance.mcp-invoke`): a host that advertises `mcp.client` maps it to a node that calls its own `ctx.mcp.<method>` with the run's inputs (`method` ∈ callTool | listTools | readResource | serverHealth; `serverId`; `name`, `arguments` for callTool; `cursor` for listTools; `uri` for readResource) and completes with `outputs.result` equal to the resolved value VERBATIM, recorded on its `node.completed` event. A rejection fails the node with the rejection's code (`not_found` for an unknown `serverId`). Operator contract: the host binds `serverId: \"conformance\"` to the suite's fake MCP server and `\"conformance.down\"` to an address nothing answers. A host that does not advertise `mcp.client` MUST NOT advertise this fixture.",
|
|
6
|
+
"nodes": [
|
|
7
|
+
{
|
|
8
|
+
"id": "mcp-client",
|
|
9
|
+
"typeId": "core.conformance.mcp-client",
|
|
10
|
+
"name": "Call ctx.mcp",
|
|
11
|
+
"position": { "x": 0, "y": 0 },
|
|
12
|
+
"config": {},
|
|
13
|
+
"inputs": {}
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"edges": [],
|
|
17
|
+
"triggers": [{ "id": "manual", "type": "manual", "enabled": true }],
|
|
18
|
+
"variables": [
|
|
19
|
+
{ "name": "method", "type": "string", "defaultValue": "serverHealth" },
|
|
20
|
+
{ "name": "serverId", "type": "string", "defaultValue": "conformance" },
|
|
21
|
+
{ "name": "name", "type": "string" },
|
|
22
|
+
{ "name": "arguments", "type": "object" },
|
|
23
|
+
{ "name": "cursor", "type": "string" },
|
|
24
|
+
{ "name": "uri", "type": "string" }
|
|
25
|
+
],
|
|
26
|
+
"metadata": { "tags": ["conformance", "mcp", "rfc-0204"] },
|
|
27
|
+
"settings": { "timeout": 0 }
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "approval", "key": "run-1:gate:0", "data": { "artifactId": "art-1", "artifactType": "document", "title": "Review the draft", "actions": ["accept", "reject"] } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "clarification", "key": "run-1:clarify:0", "data": { "questions": [{ "id": "q1", "question": "Which region?" }] } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "conversation.close", "key": "run-1:conv:2", "data": { "conversationId": "conv-1" } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "conversation.exchange", "key": "run-1:conv:1", "data": { "conversationId": "conv-1", "prompt": "What should the headline say?" } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "conversation.start", "key": "run-1:conv:0", "data": { "conversationId": "conv-1" } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "custom", "key": "run-1:custom:0", "data": { "customKind": "vendor.example.signature" } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "external-event", "key": "run-1:wait:0", "data": { "eventType": "stripe.checkout.completed", "correlation": { "sessionId": "cs_1" } } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "low-confidence", "key": "run-1:supervisor:0", "data": { "agentId": "core.orchestrator.supervisor", "threshold": 0.7, "observed": 0.42 } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "approval", "key": "run-1:gate:0", "data": { "questions": [{ "id": "q1", "question": "Which region?" }] } }
|
package/fixtures/interrupt-payloads/negative-conversation-close-with-conversation-start-data.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "conversation.close", "key": "run-1:conv:2", "data": { "conversationId": "conv-1", "title": "Headline review" } }
|
package/fixtures/interrupt-payloads/negative-conversation-start-with-conversation-exchange-data.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "conversation.start", "key": "run-1:conv:0", "data": { "conversationId": "conv-1", "prompt": "What should the headline say?" } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "custom", "key": "run-1:custom:0", "data": { "conversationId": "conv-1" } }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "kind": "low-confidence", "key": "run-1:supervisor:0", "data": { "customKind": "vendor.example.signature" } }
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "remote",
|
|
18
|
+
"entry": "https://other.acme.example/mcp",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "streamable-http",
|
|
26
|
+
"url": "https://mcp.acme.example/salesforce"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "remote",
|
|
18
|
+
"entry": "https://mcp.acme.example/salesforce",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "streamable-http",
|
|
26
|
+
"url": "https://mcp.acme.example/salesforce",
|
|
27
|
+
"headers": [
|
|
28
|
+
{
|
|
29
|
+
"name": "Authorization",
|
|
30
|
+
"value": "Bearer sk-live-example"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "remote",
|
|
18
|
+
"entry": "http://mcp.acme.example/salesforce",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "streamable-http",
|
|
26
|
+
"url": "http://mcp.acme.example/salesforce"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "remote",
|
|
18
|
+
"entry": "https://mcp.acme.example/salesforce",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "streamable-http",
|
|
26
|
+
"url": "https://mcp.acme.example/salesforce"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"icons": [
|
|
30
|
+
{
|
|
31
|
+
"src": "https://acme.example/icon.png",
|
|
32
|
+
"mimeType": "image/png"
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "remote",
|
|
18
|
+
"entry": "https://mcp.acme.example/salesforce",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "streamable-http",
|
|
26
|
+
"url": "https://mcp.acme.example/salesforce"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"_meta": {
|
|
30
|
+
"io.modelcontextprotocol.registry/publisher-provided": {
|
|
31
|
+
"tool": "publisher-cli"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "wasm",
|
|
18
|
+
"entry": "dist/salesforce.wasm",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "streamable-http",
|
|
26
|
+
"url": "https://mcp.acme.example/salesforce"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "remote",
|
|
18
|
+
"entry": "https://mcp.acme.example/salesforce",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "streamable-http",
|
|
26
|
+
"url": "https://mcp.acme.example/salesforce"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"packages": [
|
|
30
|
+
{
|
|
31
|
+
"registryType": "npm",
|
|
32
|
+
"identifier": "@acme/salesforce-mcp",
|
|
33
|
+
"version": "1.4.2",
|
|
34
|
+
"transport": {
|
|
35
|
+
"type": "stdio"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "node",
|
|
3
|
+
"name": "vendor.acme.salesforce-tools",
|
|
4
|
+
"version": "1.4.2",
|
|
5
|
+
"engines": {
|
|
6
|
+
"openwop": ">=2.0 <3.0.0"
|
|
7
|
+
},
|
|
8
|
+
"nodes": [
|
|
9
|
+
{
|
|
10
|
+
"typeId": "vendor.acme.salesforce.upsert",
|
|
11
|
+
"version": "1.4.2",
|
|
12
|
+
"category": "integration",
|
|
13
|
+
"role": "side-effect"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"runtime": {
|
|
17
|
+
"language": "remote",
|
|
18
|
+
"entry": "https://mcp.acme.example/salesforce",
|
|
19
|
+
"mcpServer": {
|
|
20
|
+
"name": "io.github.acme/salesforce",
|
|
21
|
+
"description": "Salesforce objects as MCP tools",
|
|
22
|
+
"version": "1.4.2",
|
|
23
|
+
"remotes": [
|
|
24
|
+
{
|
|
25
|
+
"type": "sse",
|
|
26
|
+
"url": "https://mcp.acme.example/salesforce"
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|