@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,370 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v2/suspend-request.schema.json",
|
|
4
|
+
"title": "InterruptPayload",
|
|
5
|
+
"description": "Wire format for ctx.interrupt(payload) — the canonical HITL primitive. See spec/v1/interrupt.md for semantics. Discriminated by `kind`. The persisted `interrupt.requested` event carries this payload verbatim plus engine-assigned identity fields.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"kind",
|
|
9
|
+
"key",
|
|
10
|
+
"data"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"kind": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"enum": [
|
|
16
|
+
"approval",
|
|
17
|
+
"clarification",
|
|
18
|
+
"external-event",
|
|
19
|
+
"custom",
|
|
20
|
+
"conversation.start",
|
|
21
|
+
"conversation.exchange",
|
|
22
|
+
"conversation.close",
|
|
23
|
+
"low-confidence"
|
|
24
|
+
],
|
|
25
|
+
"description": "Discriminator for resume-time routing + UI rendering + observability. Multi-Agent Shift Phase 4 adds `conversation.start` / `conversation.exchange` / `conversation.close` for multi-turn user interjections (see ConversationStartData / ConversationExchangeData / ConversationCloseData below). Phase 1 adds `low-confidence` for the confidence-escalation contract (orchestrator-supervisor suspends below threshold; see LowConfidenceData)."
|
|
26
|
+
},
|
|
27
|
+
"key": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Deterministic key used to short-circuit on re-entry after process death. If two interrupt() calls in the same run emit the same key, the second returns the cached result of the first. Recommended: ${runId}:${nodeId}:${interruptCount}.",
|
|
30
|
+
"minLength": 1,
|
|
31
|
+
"maxLength": 256
|
|
32
|
+
},
|
|
33
|
+
"resumeSchema": {
|
|
34
|
+
"description": "Optional JSON Schema for resume value. Servers SHOULD validate before returning to the suspended executor.",
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": true
|
|
37
|
+
},
|
|
38
|
+
"timeoutMs": {
|
|
39
|
+
"type": "integer",
|
|
40
|
+
"minimum": 0,
|
|
41
|
+
"description": "Optional auto-reject after this duration. Engine throws InterruptTimeoutError when exceeded."
|
|
42
|
+
},
|
|
43
|
+
"data": {
|
|
44
|
+
"oneOf": [
|
|
45
|
+
{
|
|
46
|
+
"$ref": "#/$defs/ApprovalData"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"$ref": "#/$defs/ClarificationData"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"$ref": "#/$defs/ExternalEventData"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"$ref": "#/$defs/CustomData"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"$ref": "#/$defs/ConversationStartData"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"$ref": "#/$defs/ConversationExchangeData"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"$ref": "#/$defs/ConversationCloseData"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"$ref": "#/$defs/LowConfidenceData"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"additionalProperties": false,
|
|
73
|
+
"$defs": {
|
|
74
|
+
"ApprovalData": {
|
|
75
|
+
"type": "object",
|
|
76
|
+
"description": "Payload for kind='approval'. Uses the canonical 5-action OpenWOP approval vocabulary.",
|
|
77
|
+
"required": [
|
|
78
|
+
"artifactId",
|
|
79
|
+
"artifactType",
|
|
80
|
+
"title",
|
|
81
|
+
"actions"
|
|
82
|
+
],
|
|
83
|
+
"properties": {
|
|
84
|
+
"artifactId": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"minLength": 1
|
|
87
|
+
},
|
|
88
|
+
"artifactType": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"minLength": 1
|
|
91
|
+
},
|
|
92
|
+
"title": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"minLength": 1
|
|
95
|
+
},
|
|
96
|
+
"description": {
|
|
97
|
+
"type": "string"
|
|
98
|
+
},
|
|
99
|
+
"artifactData": {},
|
|
100
|
+
"actions": {
|
|
101
|
+
"type": "array",
|
|
102
|
+
"items": {
|
|
103
|
+
"type": "string",
|
|
104
|
+
"enum": [
|
|
105
|
+
"accept",
|
|
106
|
+
"reject",
|
|
107
|
+
"refine",
|
|
108
|
+
"edit-accept",
|
|
109
|
+
"ask"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
"minItems": 1,
|
|
113
|
+
"uniqueItems": true,
|
|
114
|
+
"description": "Allowed actions. Server MUST enforce on resolve. The 'ask' action does NOT exit the suspend — Q&A exchanges accumulate via askService until accept/reject/refine/edit-accept fires. See `interrupt.md` §`ApprovalResume` for the action vocabulary + per-action required fields."
|
|
115
|
+
},
|
|
116
|
+
"requiredApprovals": {
|
|
117
|
+
"type": "integer",
|
|
118
|
+
"minimum": 1,
|
|
119
|
+
"default": 1,
|
|
120
|
+
"description": "Multi-approver quorum."
|
|
121
|
+
},
|
|
122
|
+
"approversList": {
|
|
123
|
+
"type": "array",
|
|
124
|
+
"items": {
|
|
125
|
+
"type": "string"
|
|
126
|
+
},
|
|
127
|
+
"description": "Restrict resolution to these user IDs. Empty/unset = any user with approvals:respond scope."
|
|
128
|
+
},
|
|
129
|
+
"rejectionPolicy": {
|
|
130
|
+
"type": "string",
|
|
131
|
+
"enum": [
|
|
132
|
+
"single-veto",
|
|
133
|
+
"majority"
|
|
134
|
+
],
|
|
135
|
+
"default": "single-veto"
|
|
136
|
+
},
|
|
137
|
+
"overrideBypassesQuorum": {
|
|
138
|
+
"type": "boolean",
|
|
139
|
+
"default": false,
|
|
140
|
+
"description": "RFC 0093 §D2 (pins RFC 0051 UQ 2). When `true`, a configured override principal (per `interrupt-profiles.md` §approval-gate `override.requiredRole`) MAY bypass the quorum (`requiredApprovals`) and release the gate alone. Default `false`: an override principal's approval counts as ONE quorum vote; quorum still applies. Optional, additive."
|
|
141
|
+
},
|
|
142
|
+
"approverGroupRefs": {
|
|
143
|
+
"type": "array",
|
|
144
|
+
"items": {
|
|
145
|
+
"type": "string"
|
|
146
|
+
},
|
|
147
|
+
"description": "RFC 0104 — OPTIONAL, ADVISORY. Opaque group refs whose resolved members are eligible to approve. Like `approversList`, advisory: the host resolves refs against its own identity/RBAC and ENFORCES eligibility at resolve time; the engine treats refs as opaque (no membership resolution in the engine). Capability-gated via `interrupt.approverRouting` (`refKinds` MUST include `group`). Hosts that don't advertise it ignore this field. Membership is resolved at decision time and snapshotted for deterministic replay."
|
|
148
|
+
},
|
|
149
|
+
"approverRoleRefs": {
|
|
150
|
+
"type": "array",
|
|
151
|
+
"items": {
|
|
152
|
+
"type": "string"
|
|
153
|
+
},
|
|
154
|
+
"description": "RFC 0104 — OPTIONAL, ADVISORY. Opaque role refs whose holders are eligible to approve. Same advisory + host-resolved + opaque-to-engine + decision-time-snapshot semantics as `approverGroupRefs`. Capability-gated via `interrupt.approverRouting` (`refKinds` MUST include `role`)."
|
|
155
|
+
},
|
|
156
|
+
"audience": {
|
|
157
|
+
"type": "object",
|
|
158
|
+
"additionalProperties": false,
|
|
159
|
+
"description": "RFC 0104 — OPTIONAL, ADVISORY notification-targeting hint: who should be TOLD about this gate, distinct from who MAY approve (the eligibility refs). When OMITTED, the host SHOULD notify the resolved union of the eligibility refs (`approversList` ∪ `approverGroupRefs` ∪ `approverRoleRefs`). When PRESENT, it OVERRIDES that default. Advisory; the host remains the routing authority. Capability-gated via `interrupt.approverRouting.audience`.",
|
|
160
|
+
"properties": {
|
|
161
|
+
"subjects": {
|
|
162
|
+
"type": "array",
|
|
163
|
+
"items": {
|
|
164
|
+
"type": "string"
|
|
165
|
+
},
|
|
166
|
+
"description": "Opaque subject refs to notify."
|
|
167
|
+
},
|
|
168
|
+
"groups": {
|
|
169
|
+
"type": "array",
|
|
170
|
+
"items": {
|
|
171
|
+
"type": "string"
|
|
172
|
+
},
|
|
173
|
+
"description": "Opaque group refs to notify."
|
|
174
|
+
},
|
|
175
|
+
"roles": {
|
|
176
|
+
"type": "array",
|
|
177
|
+
"items": {
|
|
178
|
+
"type": "string"
|
|
179
|
+
},
|
|
180
|
+
"description": "Opaque role refs to notify."
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
"additionalProperties": false
|
|
186
|
+
},
|
|
187
|
+
"ClarificationData": {
|
|
188
|
+
"type": "object",
|
|
189
|
+
"description": "Payload for kind='clarification'. AI/system asks the user for missing context before continuing.",
|
|
190
|
+
"required": [
|
|
191
|
+
"questions"
|
|
192
|
+
],
|
|
193
|
+
"properties": {
|
|
194
|
+
"questions": {
|
|
195
|
+
"type": "array",
|
|
196
|
+
"items": {
|
|
197
|
+
"type": "object",
|
|
198
|
+
"required": [
|
|
199
|
+
"id",
|
|
200
|
+
"question"
|
|
201
|
+
],
|
|
202
|
+
"properties": {
|
|
203
|
+
"id": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"minLength": 1
|
|
206
|
+
},
|
|
207
|
+
"question": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"minLength": 1
|
|
210
|
+
},
|
|
211
|
+
"schema": {
|
|
212
|
+
"type": "object",
|
|
213
|
+
"description": "Optional JSON Schema for the answer.",
|
|
214
|
+
"additionalProperties": true
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"additionalProperties": false
|
|
218
|
+
},
|
|
219
|
+
"minItems": 1
|
|
220
|
+
},
|
|
221
|
+
"contextType": {
|
|
222
|
+
"type": "string"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"additionalProperties": false
|
|
226
|
+
},
|
|
227
|
+
"ExternalEventData": {
|
|
228
|
+
"type": "object",
|
|
229
|
+
"description": "Payload for kind='external-event'. Engine waits for an external system to POST to /v1/interrupts/{token}.",
|
|
230
|
+
"required": [
|
|
231
|
+
"eventType",
|
|
232
|
+
"correlation"
|
|
233
|
+
],
|
|
234
|
+
"properties": {
|
|
235
|
+
"eventType": {
|
|
236
|
+
"type": "string",
|
|
237
|
+
"description": "Stable description of what's awaited. Surfaced in admin panels. Examples: 'stripe.checkout.completed', 'calendar.event.confirmed'."
|
|
238
|
+
},
|
|
239
|
+
"correlation": {
|
|
240
|
+
"type": "object",
|
|
241
|
+
"description": "Opaque correlation payload — whatever the external system needs to match the interrupt back to its source event.",
|
|
242
|
+
"additionalProperties": true
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
"additionalProperties": false
|
|
246
|
+
},
|
|
247
|
+
"CustomData": {
|
|
248
|
+
"type": "object",
|
|
249
|
+
"description": "Escape hatch for kinds not yet spec'd. Servers MUST accept and persist; UI rendering and admin tooling are best-effort.",
|
|
250
|
+
"required": [
|
|
251
|
+
"customKind"
|
|
252
|
+
],
|
|
253
|
+
"properties": {
|
|
254
|
+
"customKind": {
|
|
255
|
+
"type": "string",
|
|
256
|
+
"minLength": 1
|
|
257
|
+
},
|
|
258
|
+
"payload": {}
|
|
259
|
+
},
|
|
260
|
+
"additionalProperties": false
|
|
261
|
+
},
|
|
262
|
+
"ConversationStartData": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"description": "Payload for kind='conversation.start' (Multi-Agent Shift Phase 4). Opens a new multi-turn conversation context. The host mints a `conversationId` and emits `conversation.opened`; subsequent `conversation.exchange` calls reuse the same id.",
|
|
265
|
+
"required": [
|
|
266
|
+
"conversationId"
|
|
267
|
+
],
|
|
268
|
+
"properties": {
|
|
269
|
+
"conversationId": {
|
|
270
|
+
"type": "string",
|
|
271
|
+
"minLength": 1,
|
|
272
|
+
"maxLength": 256,
|
|
273
|
+
"description": "Opaque conversation identifier. Tenant-unique invariant: hosts MUST ensure no two distinct conversations in the same tenant share an id. Cross-host portability is not normative — `conversationId`s minted by one host MUST NOT be assumed resolvable by another."
|
|
274
|
+
},
|
|
275
|
+
"title": {
|
|
276
|
+
"type": "string",
|
|
277
|
+
"description": "Optional human-readable conversation title surfaced in host UIs."
|
|
278
|
+
},
|
|
279
|
+
"initialPrompt": {
|
|
280
|
+
"type": "string",
|
|
281
|
+
"description": "Optional system / agent message that opens the conversation. Folds into the `message` reducer as the first turn."
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
"additionalProperties": false
|
|
285
|
+
},
|
|
286
|
+
"ConversationExchangeData": {
|
|
287
|
+
"type": "object",
|
|
288
|
+
"description": "Payload for kind='conversation.exchange' (Multi-Agent Shift Phase 4). Single-turn suspend within an open conversation; resume value MUST validate against the per-turn `outcomeSchema`.",
|
|
289
|
+
"required": [
|
|
290
|
+
"conversationId",
|
|
291
|
+
"prompt"
|
|
292
|
+
],
|
|
293
|
+
"properties": {
|
|
294
|
+
"conversationId": {
|
|
295
|
+
"type": "string",
|
|
296
|
+
"minLength": 1,
|
|
297
|
+
"maxLength": 256,
|
|
298
|
+
"description": "Active conversation identifier — MUST equal the id minted by a preceding `conversation.start`."
|
|
299
|
+
},
|
|
300
|
+
"prompt": {
|
|
301
|
+
"type": "string",
|
|
302
|
+
"minLength": 1,
|
|
303
|
+
"description": "Human-targeted question for this turn."
|
|
304
|
+
},
|
|
305
|
+
"outcomeSchema": {
|
|
306
|
+
"type": "object",
|
|
307
|
+
"description": "Optional JSON Schema for the resume value (the user's response). Hosts SHOULD validate before resuming the suspended executor — replay determinism + idempotency require validated outcomes per the Phase-4 H4 disposition.",
|
|
308
|
+
"additionalProperties": true
|
|
309
|
+
},
|
|
310
|
+
"turnIndex": {
|
|
311
|
+
"type": "integer",
|
|
312
|
+
"minimum": 0,
|
|
313
|
+
"description": "Optional 0-indexed turn within this conversation. Strictly monotonic when populated; absent values are derived host-side from event-log fold."
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
"additionalProperties": false
|
|
317
|
+
},
|
|
318
|
+
"ConversationCloseData": {
|
|
319
|
+
"type": "object",
|
|
320
|
+
"description": "Payload for kind='conversation.close' (Multi-Agent Shift Phase 4). Terminates an open conversation context. Final event in the conversation lifecycle; no further `conversation.exchanged` events MAY follow for this `conversationId` in this run.",
|
|
321
|
+
"required": [
|
|
322
|
+
"conversationId"
|
|
323
|
+
],
|
|
324
|
+
"properties": {
|
|
325
|
+
"conversationId": {
|
|
326
|
+
"type": "string",
|
|
327
|
+
"minLength": 1,
|
|
328
|
+
"maxLength": 256
|
|
329
|
+
},
|
|
330
|
+
"reason": {
|
|
331
|
+
"type": "string",
|
|
332
|
+
"description": "Optional close rationale (e.g., 'goal-reached', 'max-turns', 'user-cancelled')."
|
|
333
|
+
}
|
|
334
|
+
},
|
|
335
|
+
"additionalProperties": false
|
|
336
|
+
},
|
|
337
|
+
"LowConfidenceData": {
|
|
338
|
+
"type": "object",
|
|
339
|
+
"description": "Payload for kind='low-confidence' (Multi-Agent Shift Phase 1 — confidence-escalation contract). Emitted by an agent (typically `core.orchestrator.supervisor`) when its `agent.decided.confidence` falls below the run's resolved escalation threshold. Run transitions to `'waiting-approval'`; an operator ratifies the decision via the resume path.",
|
|
340
|
+
"required": [
|
|
341
|
+
"agentId",
|
|
342
|
+
"threshold",
|
|
343
|
+
"observed"
|
|
344
|
+
],
|
|
345
|
+
"properties": {
|
|
346
|
+
"agentId": {
|
|
347
|
+
"$ref": "ids.schema.json#/$defs/agentId",
|
|
348
|
+
"description": "AgentRef.agentId of the agent that suspended."
|
|
349
|
+
},
|
|
350
|
+
"threshold": {
|
|
351
|
+
"type": "number",
|
|
352
|
+
"minimum": 0,
|
|
353
|
+
"maximum": 1,
|
|
354
|
+
"description": "Resolved escalation threshold for this run (default 0.7 per Phase-1 disposition; per-run override via `RunOptions.configurable.escalationThreshold`)."
|
|
355
|
+
},
|
|
356
|
+
"observed": {
|
|
357
|
+
"type": "number",
|
|
358
|
+
"minimum": 0,
|
|
359
|
+
"maximum": 1,
|
|
360
|
+
"description": "The agent's reported confidence value that triggered the escalation."
|
|
361
|
+
},
|
|
362
|
+
"decision": {
|
|
363
|
+
"description": "Optional sketch of the decision the agent WOULD have emitted at threshold-or-above. Lets operators see the un-ratified choice. Shape mirrors `OrchestratorDecision` or the agent's domain-specific decision type."
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
"additionalProperties": false
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
"x-openwop-seeded-from": "v1"
|
|
370
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://openwop.dev/spec/v2/tool-descriptor.schema.json",
|
|
4
|
+
"title": "ToolDescriptor",
|
|
5
|
+
"description": "RFC 0078. A portable, read-only description of one tool, unifying the five openwop tool surfaces (node-pack / workflow / MCP / connector / host-extension) behind one stable shape. Returned by `GET /v1/tools` + `GET /v1/tools/{toolId}` when the host advertises `capabilities.toolCatalog.supported: true`. The descriptor DESCRIBES a tool; it never carries credential material (SR-1) and is not an invocation path (tools are invoked on their existing surfaces).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"toolId",
|
|
10
|
+
"source",
|
|
11
|
+
"safetyTier"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"toolId": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"minLength": 1,
|
|
17
|
+
"description": "Stable, host-unique tool identifier in the `<scope>:<tool-id>` form RFC 0077 `toolAllowlist` references (`openwop:` core, `mcp:` MCP-namespaced, `connector:` connector, `<vendor>.<host>` / `x-host-<vendor>-*` host-extension). The keyspace SPANS sources so a single allowlist entry resolves to exactly one descriptor; the `<scope>` prefix disambiguates by construction (RFC 0078 §UQ1). MUST be stable across catalog reads for a given host version so an agent's `toolAllowlist` keeps resolving."
|
|
18
|
+
},
|
|
19
|
+
"source": {
|
|
20
|
+
"type": "string",
|
|
21
|
+
"enum": [
|
|
22
|
+
"node-pack",
|
|
23
|
+
"workflow",
|
|
24
|
+
"mcp",
|
|
25
|
+
"connector",
|
|
26
|
+
"host-extension"
|
|
27
|
+
],
|
|
28
|
+
"description": "Which surface backs the tool. `node-pack`: a pack typeId (RFC 0003); `workflow`: a workflow-as-tool (`core.subWorkflow` / RFC 0013); `mcp`: an MCP server tool (`host.mcp`); `connector`: an RFC 0045 connector action; `host-extension`: an `x-host-<vendor>-*` scope (RFC 0069)."
|
|
29
|
+
},
|
|
30
|
+
"title": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "MAY — human-readable name for UI."
|
|
33
|
+
},
|
|
34
|
+
"description": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"description": "MAY — one-line summary for a tool picker."
|
|
37
|
+
},
|
|
38
|
+
"inputSchema": {
|
|
39
|
+
"type": "object",
|
|
40
|
+
"description": "MAY — JSON Schema (2020-12) for the tool's arguments. Absent ⇒ opaque/host-interpreted args. RECOMMENDED (not required) to be the RFC 0030 Tier-1 universal subset for tools that feed an LLM tool-call (RFC 0078 §UQ2).",
|
|
41
|
+
"additionalProperties": true
|
|
42
|
+
},
|
|
43
|
+
"outputSchema": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"description": "MAY — JSON Schema for the tool's result.",
|
|
46
|
+
"additionalProperties": true
|
|
47
|
+
},
|
|
48
|
+
"auth": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"additionalProperties": false,
|
|
51
|
+
"description": "MAY — what the caller must supply/hold to invoke. Composes RFC 0049 (scopes) + RFC 0046 (credentials).",
|
|
52
|
+
"properties": {
|
|
53
|
+
"scopes": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"items": {
|
|
56
|
+
"type": "string"
|
|
57
|
+
},
|
|
58
|
+
"uniqueItems": true,
|
|
59
|
+
"description": "RFC 0049 scopes the principal MUST hold; per-tool authorization fails closed (RFC 0064 §C)."
|
|
60
|
+
},
|
|
61
|
+
"credentialRef": {
|
|
62
|
+
"type": "boolean",
|
|
63
|
+
"description": "true ⇒ the tool needs a host-stored credential reference (RFC 0046); the catalog NEVER carries credential material (SR-1)."
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"egress": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"enum": [
|
|
70
|
+
"none",
|
|
71
|
+
"safe-fetch",
|
|
72
|
+
"host-mediated",
|
|
73
|
+
"host-owned"
|
|
74
|
+
],
|
|
75
|
+
"description": "MAY — outbound-network posture. `none`: no egress; `safe-fetch`: via the host's RFC 0076 §B `ctx.http.safeFetch` (SSRF-guarded); `host-mediated`: host-proxied non-safeFetch; `host-owned`: the host owns the egress story (e.g. a host-extension)."
|
|
76
|
+
},
|
|
77
|
+
"approval": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"enum": [
|
|
80
|
+
"never",
|
|
81
|
+
"conditional",
|
|
82
|
+
"always"
|
|
83
|
+
],
|
|
84
|
+
"description": "MAY — whether invocation requires an RFC 0051 approval interrupt. `conditional` ⇒ host-policy (e.g. over a cost/scope threshold)."
|
|
85
|
+
},
|
|
86
|
+
"replayPolicy": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"enum": [
|
|
89
|
+
"deterministic",
|
|
90
|
+
"idempotent",
|
|
91
|
+
"non-deterministic"
|
|
92
|
+
],
|
|
93
|
+
"description": "MAY — replay posture (`replay.md`). `deterministic`: pure/replay-safe; `idempotent`: safe under the Layer-2 idempotency key (`idempotency.md`); `non-deterministic`: the host MUST cache the observable result (RFC 0041 §C) so replay reproduces the sequence."
|
|
94
|
+
},
|
|
95
|
+
"safetyTier": {
|
|
96
|
+
"type": "string",
|
|
97
|
+
"enum": [
|
|
98
|
+
"pure",
|
|
99
|
+
"read",
|
|
100
|
+
"write",
|
|
101
|
+
"exec"
|
|
102
|
+
],
|
|
103
|
+
"description": "REQUIRED. The tool's DATA-EFFECT classification: `pure`: no external side effects; `read`: reads external state; `write`: mutates external state; `exec`: arbitrary-command/`exec`-class — per RFC 0069 this MUST have `source: \"host-extension\"` (exec is never protocol-tier). A consumer uses this to gate/warn. The host MUST ASSIGN `safetyTier` explicitly as per-tool metadata; it is NOT derivable from a permission / approval / risk tier — those are an ORTHOGONAL authorization axis (a read-only tool can be high-approval/restricted while being `safetyTier:\"read\"`). A host that mechanically maps its risk tier onto `safetyTier` mis-advertises."
|
|
104
|
+
},
|
|
105
|
+
"costHint": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"enum": [
|
|
108
|
+
"low",
|
|
109
|
+
"medium",
|
|
110
|
+
"high"
|
|
111
|
+
],
|
|
112
|
+
"description": "MAY — advisory cost magnitude for planning UX. Non-normative."
|
|
113
|
+
},
|
|
114
|
+
"latencyHint": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"enum": [
|
|
117
|
+
"low",
|
|
118
|
+
"medium",
|
|
119
|
+
"high"
|
|
120
|
+
],
|
|
121
|
+
"description": "MAY — advisory latency magnitude. Non-normative."
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"allOf": [
|
|
125
|
+
{
|
|
126
|
+
"$comment": "RFC 0078 §C-1 / §F-4: an exec-tier tool MUST be host-extension-sourced (RFC 0069 — exec is never protocol-tier).",
|
|
127
|
+
"if": {
|
|
128
|
+
"properties": {
|
|
129
|
+
"safetyTier": {
|
|
130
|
+
"const": "exec"
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"required": [
|
|
134
|
+
"safetyTier"
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
"then": {
|
|
138
|
+
"properties": {
|
|
139
|
+
"source": {
|
|
140
|
+
"const": "host-extension"
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"required": [
|
|
144
|
+
"source"
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"x-openwop-seeded-from": "v1"
|
|
150
|
+
}
|