@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,834 @@
|
|
|
1
|
+
asyncapi: 3.1.0
|
|
2
|
+
|
|
3
|
+
info:
|
|
4
|
+
title: Workflow Orchestration Protocol (openwop) SSE Event Stream
|
|
5
|
+
version: "1.1.0"
|
|
6
|
+
externalDocs:
|
|
7
|
+
description: openwop spec v1 corpus
|
|
8
|
+
url: https://openwop.dev/spec/v1/
|
|
9
|
+
description: |
|
|
10
|
+
Canonical AsyncAPI 3.1.0 specification for the openwop server's
|
|
11
|
+
Server-Sent Events surface. Formalizes `stream-modes.md`
|
|
12
|
+
and references the run-event JSON Schema via `$ref` so external SDK
|
|
13
|
+
authors can codegen typed consumers without re-reading the prose.
|
|
14
|
+
|
|
15
|
+
Four canonical stream modes are exposed via the `streamMode` query
|
|
16
|
+
parameter on a single endpoint (`GET /v1/runs/{runId}/events`):
|
|
17
|
+
|
|
18
|
+
- `updates` — minimal state-change deltas (default; lowest bandwidth)
|
|
19
|
+
- `values` — full `state.snapshot` after every transition
|
|
20
|
+
- `messages` — LLM token chunks for chat-style UIs
|
|
21
|
+
- `debug` — full event firehose including internal events
|
|
22
|
+
|
|
23
|
+
Each mode is modeled as a separate AsyncAPI channel because the
|
|
24
|
+
payload union differs per mode. The underlying transport (HTTPS SSE)
|
|
25
|
+
is shared; only the filter + synthesis layer differs.
|
|
26
|
+
|
|
27
|
+
See `stream-modes.md` for the complete event-to-mode mapping table.
|
|
28
|
+
contact:
|
|
29
|
+
name: openwop spec working group
|
|
30
|
+
url: https://openwop.dev/spec/v1/
|
|
31
|
+
license:
|
|
32
|
+
name: Apache-2.0
|
|
33
|
+
|
|
34
|
+
defaultContentType: text/event-stream
|
|
35
|
+
|
|
36
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
37
|
+
# SERVERS
|
|
38
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
39
|
+
servers:
|
|
40
|
+
production:
|
|
41
|
+
host: '{host}'
|
|
42
|
+
pathname: /v1
|
|
43
|
+
protocol: https
|
|
44
|
+
description: openwop-compliant server
|
|
45
|
+
variables:
|
|
46
|
+
host:
|
|
47
|
+
default: api.example.com
|
|
48
|
+
description: Replace with your server's hostname.
|
|
49
|
+
security:
|
|
50
|
+
- $ref: '#/components/securitySchemes/ApiKeyAuth'
|
|
51
|
+
|
|
52
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
53
|
+
# CHANNELS — one per streamMode (filter contract differs)
|
|
54
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
55
|
+
channels:
|
|
56
|
+
|
|
57
|
+
heartbeatEvents:
|
|
58
|
+
# Logical channel — `address: null` per AsyncAPI 3.x ("address not
|
|
59
|
+
# applicable / host-defined"). RFC 0094 §I: host-capabilities.md
|
|
60
|
+
# §host.heartbeat defines the two heartbeat events but documents NO
|
|
61
|
+
# HTTP delivery path for them (they are heartbeat-scoped, NOT
|
|
62
|
+
# run-event-log entries, so they do not ride /runs/{runId}/events
|
|
63
|
+
# either). The previous `/heartbeats/{heartbeatId}/events` address
|
|
64
|
+
# implied an undocumented REST surface; the delivery transport is a
|
|
65
|
+
# host concern until an RFC specifies one.
|
|
66
|
+
address: null
|
|
67
|
+
title: Heartbeat evaluation events (RFC 0060)
|
|
68
|
+
summary: Per-tick heartbeat evaluation + state-change notifications (logical channel).
|
|
69
|
+
description: |
|
|
70
|
+
RFC 0060 `host.heartbeat`. Heartbeat-scoped (NOT a run-event
|
|
71
|
+
stream): a host advertising `capabilities.heartbeat.supported: true`
|
|
72
|
+
emits `heartbeat.evaluated` every tick and `heartbeat.stateChanged`
|
|
73
|
+
only on a predicate-state transition. Both are observability-only;
|
|
74
|
+
consumers MAY ignore them.
|
|
75
|
+
|
|
76
|
+
LOGICAL channel: `host-capabilities.md` §host.heartbeat documents
|
|
77
|
+
the event shapes but no HTTP address; how a host delivers them
|
|
78
|
+
(webhook, host-internal bus, vendor stream) is host-defined.
|
|
79
|
+
messages:
|
|
80
|
+
heartbeatEvaluated: { $ref: '#/components/messages/HeartbeatEvaluated' }
|
|
81
|
+
heartbeatStateChanged: { $ref: '#/components/messages/HeartbeatStateChanged' }
|
|
82
|
+
|
|
83
|
+
runEventsUpdates:
|
|
84
|
+
address: /runs/{runId}/events
|
|
85
|
+
title: SSE — updates mode (default)
|
|
86
|
+
summary: Minimal state-change deltas for UI/CLI consumers.
|
|
87
|
+
description: |
|
|
88
|
+
Default consumption mode. Emits an SSE event for each terminal
|
|
89
|
+
node transition, suspension transition, run transition, and
|
|
90
|
+
artifact production. Payloads are deltas (the change since the
|
|
91
|
+
last event), NOT full snapshots.
|
|
92
|
+
|
|
93
|
+
Termination: server closes the connection on a terminal run
|
|
94
|
+
event (`run.completed`, `run.failed`, `run.cancelled`).
|
|
95
|
+
|
|
96
|
+
Selected via `?streamMode=updates` (or by omitting the query
|
|
97
|
+
parameter — `updates` is the default per `stream-modes.md`).
|
|
98
|
+
parameters:
|
|
99
|
+
runId:
|
|
100
|
+
$ref: '#/components/parameters/RunId'
|
|
101
|
+
messages:
|
|
102
|
+
runStarted: { $ref: '#/components/messages/RunStarted' }
|
|
103
|
+
runCompleted: { $ref: '#/components/messages/RunCompleted' }
|
|
104
|
+
runFailed: { $ref: '#/components/messages/RunFailed' }
|
|
105
|
+
runCancelled: { $ref: '#/components/messages/RunCancelled' }
|
|
106
|
+
runPaused: { $ref: '#/components/messages/RunPaused' }
|
|
107
|
+
runResumed: { $ref: '#/components/messages/RunResumed' }
|
|
108
|
+
runAnnotated: { $ref: '#/components/messages/RunAnnotated' }
|
|
109
|
+
workspaceUpdated: { $ref: '#/components/messages/WorkspaceUpdated' }
|
|
110
|
+
nodeCompleted: { $ref: '#/components/messages/NodeCompleted' }
|
|
111
|
+
nodeFailed: { $ref: '#/components/messages/NodeFailed' }
|
|
112
|
+
nodeSkipped: { $ref: '#/components/messages/NodeSkipped' }
|
|
113
|
+
nodeSuspended: { $ref: '#/components/messages/NodeSuspended' }
|
|
114
|
+
nodeDispatched: { $ref: '#/components/messages/NodeDispatched' }
|
|
115
|
+
dispatchFanOut: { $ref: '#/components/messages/DispatchFanOut' }
|
|
116
|
+
dispatchJoin: { $ref: '#/components/messages/DispatchJoin' }
|
|
117
|
+
approvalRequested: { $ref: '#/components/messages/ApprovalRequested' }
|
|
118
|
+
approvalReceived: { $ref: '#/components/messages/ApprovalReceived' }
|
|
119
|
+
clarificationRequested: { $ref: '#/components/messages/ClarificationRequested' }
|
|
120
|
+
clarificationResolved: { $ref: '#/components/messages/ClarificationResolved' }
|
|
121
|
+
interruptRequested: { $ref: '#/components/messages/InterruptRequested' }
|
|
122
|
+
interruptResolved: { $ref: '#/components/messages/InterruptResolved' }
|
|
123
|
+
artifactCreated: { $ref: '#/components/messages/ArtifactCreated' }
|
|
124
|
+
evalStarted: { $ref: '#/components/messages/EvalStarted' }
|
|
125
|
+
evalScored: { $ref: '#/components/messages/EvalScored' }
|
|
126
|
+
evalCompleted: { $ref: '#/components/messages/EvalCompleted' }
|
|
127
|
+
deploymentPromoted: { $ref: '#/components/messages/DeploymentPromoted' }
|
|
128
|
+
deploymentRolledBack: { $ref: '#/components/messages/DeploymentRolledBack' }
|
|
129
|
+
deploymentCanaryAdjusted: { $ref: '#/components/messages/DeploymentCanaryAdjusted' }
|
|
130
|
+
deploymentStateChanged: { $ref: '#/components/messages/DeploymentStateChanged' }
|
|
131
|
+
proposalCreated: { $ref: '#/components/messages/ProposalCreated' }
|
|
132
|
+
proposalActivated: { $ref: '#/components/messages/ProposalActivated' }
|
|
133
|
+
goalEvaluated: { $ref: '#/components/messages/GoalEvaluated' }
|
|
134
|
+
goalClosed: { $ref: '#/components/messages/GoalClosed' }
|
|
135
|
+
importApplied: { $ref: '#/components/messages/ImportApplied' }
|
|
136
|
+
|
|
137
|
+
runEventsValues:
|
|
138
|
+
address: /runs/{runId}/events
|
|
139
|
+
title: SSE — values mode
|
|
140
|
+
summary: Full state snapshots after every transition.
|
|
141
|
+
description: |
|
|
142
|
+
Higher-bandwidth mode for consumers that don't maintain their
|
|
143
|
+
own state machine. Emits a synthesized `state.snapshot` event
|
|
144
|
+
after each `updates`-tier transition. Payload is the complete
|
|
145
|
+
`ProjectedRunState` (status, nodeStates, variables,
|
|
146
|
+
currentNodeId, channels).
|
|
147
|
+
|
|
148
|
+
On resumption (`Last-Event-ID` header), the server MUST emit a
|
|
149
|
+
fresh `state.snapshot` first so the resuming client gets a
|
|
150
|
+
baseline before continuing with subsequent snapshots.
|
|
151
|
+
|
|
152
|
+
Selected via `?streamMode=values`.
|
|
153
|
+
parameters:
|
|
154
|
+
runId:
|
|
155
|
+
$ref: '#/components/parameters/RunId'
|
|
156
|
+
messages:
|
|
157
|
+
stateSnapshot: { $ref: '#/components/messages/StateSnapshot' }
|
|
158
|
+
|
|
159
|
+
runEventsMessages:
|
|
160
|
+
address: /runs/{runId}/events
|
|
161
|
+
title: SSE — messages mode
|
|
162
|
+
summary: LLM token chunks for chat-style UIs.
|
|
163
|
+
description: |
|
|
164
|
+
Per-token chunks from any AI node currently streaming
|
|
165
|
+
(`core.ai.callPrompt`, `core.ai.generateFromPrompt`, etc).
|
|
166
|
+
Other event types are filtered out — consumers wanting state
|
|
167
|
+
transitions should pair this with a separate `updates` stream.
|
|
168
|
+
|
|
169
|
+
If no AI nodes execute during the run, the stream is empty
|
|
170
|
+
until termination.
|
|
171
|
+
|
|
172
|
+
Selected via `?streamMode=messages`.
|
|
173
|
+
parameters:
|
|
174
|
+
runId:
|
|
175
|
+
$ref: '#/components/parameters/RunId'
|
|
176
|
+
messages:
|
|
177
|
+
aiMessageChunk: { $ref: '#/components/messages/AiMessageChunk' }
|
|
178
|
+
|
|
179
|
+
runEventsDebug:
|
|
180
|
+
address: /runs/{runId}/events
|
|
181
|
+
title: SSE — debug mode
|
|
182
|
+
summary: Full event firehose including internal events.
|
|
183
|
+
description: |
|
|
184
|
+
Every `RunEventDoc` from the durable event log, including
|
|
185
|
+
events filtered out of `updates`: `log.appended`,
|
|
186
|
+
`variable.changed`, `version.pinned`, `lease.*`,
|
|
187
|
+
`node.retried`, internal projection writes, and any
|
|
188
|
+
vendor-extension events.
|
|
189
|
+
|
|
190
|
+
Highest bandwidth. Used by replay tools, debuggers, and
|
|
191
|
+
conformance tests.
|
|
192
|
+
|
|
193
|
+
Selected via `?streamMode=debug`.
|
|
194
|
+
parameters:
|
|
195
|
+
runId:
|
|
196
|
+
$ref: '#/components/parameters/RunId'
|
|
197
|
+
messages:
|
|
198
|
+
anyRunEvent: { $ref: '#/components/messages/AnyRunEvent' }
|
|
199
|
+
runAnnotated: { $ref: '#/components/messages/RunAnnotated' }
|
|
200
|
+
workspaceUpdated: { $ref: '#/components/messages/WorkspaceUpdated' }
|
|
201
|
+
|
|
202
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
203
|
+
# OPERATIONS — consumer-side (receive)
|
|
204
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
205
|
+
operations:
|
|
206
|
+
|
|
207
|
+
subscribeUpdates:
|
|
208
|
+
action: receive
|
|
209
|
+
channel:
|
|
210
|
+
$ref: '#/channels/runEventsUpdates'
|
|
211
|
+
title: Subscribe to updates stream
|
|
212
|
+
summary: Receive minimal state-change events for a run.
|
|
213
|
+
description: |
|
|
214
|
+
Long-lived SSE subscription. Connection auto-closes on
|
|
215
|
+
terminal run event. Honor the `Last-Event-ID` request header
|
|
216
|
+
for resumption — server begins streaming from the sequence
|
|
217
|
+
AFTER the supplied ID and MUST NOT re-emit the resumption
|
|
218
|
+
point itself.
|
|
219
|
+
|
|
220
|
+
Mixed mode (RFC 0094 §I note): the binding's single-value
|
|
221
|
+
`streamMode` enum below describes THIS mode's pure subscription;
|
|
222
|
+
`streamMode` additionally accepts comma-separated combinations
|
|
223
|
+
(e.g. `updates,messages`) per `stream-modes.md` §"Mixed mode" —
|
|
224
|
+
union-of-filters semantics, per-event `event:` labels.
|
|
225
|
+
`values` MUST NOT combine with other modes.
|
|
226
|
+
bindings:
|
|
227
|
+
http:
|
|
228
|
+
method: GET
|
|
229
|
+
query:
|
|
230
|
+
type: object
|
|
231
|
+
properties:
|
|
232
|
+
streamMode:
|
|
233
|
+
type: string
|
|
234
|
+
enum: [updates]
|
|
235
|
+
default: updates
|
|
236
|
+
|
|
237
|
+
subscribeValues:
|
|
238
|
+
action: receive
|
|
239
|
+
channel:
|
|
240
|
+
$ref: '#/channels/runEventsValues'
|
|
241
|
+
title: Subscribe to values stream
|
|
242
|
+
summary: Receive full state snapshots after every transition.
|
|
243
|
+
description: |
|
|
244
|
+
Mixed mode (RFC 0094 §I note): `values` is EXCLUSIVE — it MUST NOT
|
|
245
|
+
be combined in a comma-separated `streamMode` list
|
|
246
|
+
(`stream-modes.md` §"Mixed mode": state.snapshot semantics need
|
|
247
|
+
exclusive ownership). The binding's single-value enum is exact here.
|
|
248
|
+
bindings:
|
|
249
|
+
http:
|
|
250
|
+
method: GET
|
|
251
|
+
query:
|
|
252
|
+
type: object
|
|
253
|
+
required: [streamMode]
|
|
254
|
+
properties:
|
|
255
|
+
streamMode:
|
|
256
|
+
type: string
|
|
257
|
+
enum: [values]
|
|
258
|
+
|
|
259
|
+
subscribeMessages:
|
|
260
|
+
action: receive
|
|
261
|
+
channel:
|
|
262
|
+
$ref: '#/channels/runEventsMessages'
|
|
263
|
+
title: Subscribe to messages stream
|
|
264
|
+
summary: Receive per-token AI chunks.
|
|
265
|
+
description: |
|
|
266
|
+
Mixed mode (RFC 0094 §I note): the binding's single-value
|
|
267
|
+
`streamMode` enum below describes the pure `messages` subscription;
|
|
268
|
+
`streamMode` additionally accepts comma-separated combinations
|
|
269
|
+
(e.g. `updates,messages`) per `stream-modes.md` §"Mixed mode".
|
|
270
|
+
`values` MUST NOT combine with other modes.
|
|
271
|
+
bindings:
|
|
272
|
+
http:
|
|
273
|
+
method: GET
|
|
274
|
+
query:
|
|
275
|
+
type: object
|
|
276
|
+
required: [streamMode]
|
|
277
|
+
properties:
|
|
278
|
+
streamMode:
|
|
279
|
+
type: string
|
|
280
|
+
enum: [messages]
|
|
281
|
+
|
|
282
|
+
subscribeDebug:
|
|
283
|
+
action: receive
|
|
284
|
+
channel:
|
|
285
|
+
$ref: '#/channels/runEventsDebug'
|
|
286
|
+
title: Subscribe to debug stream
|
|
287
|
+
summary: Receive every engine event including internal/log/lease.
|
|
288
|
+
description: |
|
|
289
|
+
Mixed mode (RFC 0094 §I note): the binding's single-value
|
|
290
|
+
`streamMode` enum below describes the pure `debug` subscription;
|
|
291
|
+
`streamMode` additionally accepts comma-separated combinations
|
|
292
|
+
(e.g. `updates,debug`) per `stream-modes.md` §"Mixed mode".
|
|
293
|
+
`values` MUST NOT combine with other modes.
|
|
294
|
+
bindings:
|
|
295
|
+
http:
|
|
296
|
+
method: GET
|
|
297
|
+
query:
|
|
298
|
+
type: object
|
|
299
|
+
required: [streamMode]
|
|
300
|
+
properties:
|
|
301
|
+
streamMode:
|
|
302
|
+
type: string
|
|
303
|
+
enum: [debug]
|
|
304
|
+
|
|
305
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
306
|
+
# COMPONENTS
|
|
307
|
+
# ─────────────────────────────────────────────────────────────────────────────
|
|
308
|
+
components:
|
|
309
|
+
|
|
310
|
+
securitySchemes:
|
|
311
|
+
ApiKeyAuth:
|
|
312
|
+
type: httpApiKey
|
|
313
|
+
in: header
|
|
314
|
+
name: Authorization
|
|
315
|
+
description: |
|
|
316
|
+
Bearer-style API key. Format implementation-defined; reference
|
|
317
|
+
impl uses `hk_`/`hk_test_` prefixes. Required scopes:
|
|
318
|
+
`runs:read` to subscribe. See `auth.md`.
|
|
319
|
+
|
|
320
|
+
parameters:
|
|
321
|
+
RunId:
|
|
322
|
+
description: The run to subscribe to. Format opaque; clients MUST treat as a string.
|
|
323
|
+
|
|
324
|
+
# ── Messages ─────────────────────────────────────────────────────────────
|
|
325
|
+
# All `updates`/`debug`-mode messages share the canonical RunEventDoc shape
|
|
326
|
+
# (run-event.schema.json). Each named message below pins the `type` field
|
|
327
|
+
# to a specific RunEventType discriminator so codegens can emit narrowed
|
|
328
|
+
# consumer handlers.
|
|
329
|
+
|
|
330
|
+
messages:
|
|
331
|
+
|
|
332
|
+
# ── Agent evaluation (RFC 0081) — content-free recorded-fact events ───
|
|
333
|
+
EvalStarted:
|
|
334
|
+
name: eval.started
|
|
335
|
+
title: Eval run started (RFC 0081)
|
|
336
|
+
summary: An eval run began. Content-free — suite provenance + counts only. Gated on capabilities.agents.evalSuite.supported.
|
|
337
|
+
contentType: application/json
|
|
338
|
+
payload:
|
|
339
|
+
$ref: '#/components/schemas/EvalStartedPayload'
|
|
340
|
+
EvalScored:
|
|
341
|
+
name: eval.scored
|
|
342
|
+
title: Eval task scored (RFC 0081)
|
|
343
|
+
summary: One eval task was scored (emitted per task, after its terminal agent.decided). Content-free — taskId + score + scalars only, never task output (eval-summary-no-content-leak).
|
|
344
|
+
contentType: application/json
|
|
345
|
+
payload:
|
|
346
|
+
$ref: '#/components/schemas/EvalScoredPayload'
|
|
347
|
+
EvalCompleted:
|
|
348
|
+
name: eval.completed
|
|
349
|
+
title: Eval run completed (RFC 0081)
|
|
350
|
+
summary: An eval run finished. Content-free aggregate scalars; the full scorecard is the run output, read via GET /v1/runs/{runId}/eval-summary.
|
|
351
|
+
contentType: application/json
|
|
352
|
+
payload:
|
|
353
|
+
$ref: '#/components/schemas/EvalCompletedPayload'
|
|
354
|
+
|
|
355
|
+
# ── Agent deployment lifecycle (RFC 0082) — content-free audit events ─
|
|
356
|
+
DeploymentPromoted:
|
|
357
|
+
name: deployment.promoted
|
|
358
|
+
title: Deployment promoted (RFC 0082)
|
|
359
|
+
summary: A version was promoted into a new lifecycle state (gated by RFC 0049 deploy:* + RFC 0051 approvalGate + RFC 0081 requiredEval). Content-free (deployment-event-no-content-leak). Principal-stamped + audit-logged.
|
|
360
|
+
contentType: application/json
|
|
361
|
+
payload:
|
|
362
|
+
$ref: '#/components/schemas/DeploymentPromotedPayload'
|
|
363
|
+
DeploymentRolledBack:
|
|
364
|
+
name: deployment.rolled-back
|
|
365
|
+
title: Deployment rolled back (RFC 0082)
|
|
366
|
+
summary: An active version was rolled back and a prior version restored. Content-free; recorded-fact; audit-logged.
|
|
367
|
+
contentType: application/json
|
|
368
|
+
payload:
|
|
369
|
+
$ref: '#/components/schemas/DeploymentRolledBackPayload'
|
|
370
|
+
DeploymentCanaryAdjusted:
|
|
371
|
+
name: deployment.canary.adjusted
|
|
372
|
+
title: Deployment canary adjusted (RFC 0082)
|
|
373
|
+
summary: An active version's canary traffic share changed. Content-free; recorded-fact; audit-logged.
|
|
374
|
+
contentType: application/json
|
|
375
|
+
payload:
|
|
376
|
+
$ref: '#/components/schemas/DeploymentCanaryAdjustedPayload'
|
|
377
|
+
DeploymentStateChanged:
|
|
378
|
+
name: deployment.state.changed
|
|
379
|
+
title: Deployment state changed (RFC 0082)
|
|
380
|
+
summary: A non-promotion lifecycle transition (pause / resume / deprecate). Content-free; recorded-fact; audit-logged.
|
|
381
|
+
contentType: application/json
|
|
382
|
+
payload:
|
|
383
|
+
$ref: '#/components/schemas/DeploymentStateChangedPayload'
|
|
384
|
+
|
|
385
|
+
# ── Reviewable learning (RFC 0096) — content-free proposal lifecycle ──
|
|
386
|
+
ProposalCreated:
|
|
387
|
+
name: proposal.created
|
|
388
|
+
title: Proposal created (RFC 0096)
|
|
389
|
+
summary: The host synthesized a reviewable-learning draft. Content-free — ids/kind/refs only, never the artifact body or rationale (proposal-inert-until-applied). Emitted only when capabilities.agents.proposals is advertised.
|
|
390
|
+
contentType: application/json
|
|
391
|
+
payload:
|
|
392
|
+
$ref: '#/components/schemas/ProposalCreatedPayload'
|
|
393
|
+
ProposalActivated:
|
|
394
|
+
name: proposal.activated
|
|
395
|
+
title: Proposal activated (RFC 0096)
|
|
396
|
+
summary: A proposal was applied (RFC 0051/0049-gated). Content-free; the installed artifact byte-matches the last-persisted draft (proposal-no-resynthesis).
|
|
397
|
+
contentType: application/json
|
|
398
|
+
payload:
|
|
399
|
+
$ref: '#/components/schemas/ProposalActivatedPayload'
|
|
400
|
+
|
|
401
|
+
# ── Standing goals (RFC 0097) — content-free judge/continuation events ─
|
|
402
|
+
GoalEvaluated:
|
|
403
|
+
name: goal.evaluated
|
|
404
|
+
title: Goal evaluated (RFC 0097)
|
|
405
|
+
summary: A judge check ran against a standing goal. Content-free — no objective text; the verdict is recorded (not recomputed on replay).
|
|
406
|
+
contentType: application/json
|
|
407
|
+
payload:
|
|
408
|
+
$ref: '#/components/schemas/GoalEvaluatedPayload'
|
|
409
|
+
GoalClosed:
|
|
410
|
+
name: goal.closed
|
|
411
|
+
title: Goal closed (RFC 0097)
|
|
412
|
+
summary: A standing goal stopped continuation (satisfied / escalated / abandoned / bound-exceeded). Content-free.
|
|
413
|
+
contentType: application/json
|
|
414
|
+
payload:
|
|
415
|
+
$ref: '#/components/schemas/GoalClosedPayload'
|
|
416
|
+
|
|
417
|
+
# ── Portability (RFC 0098) — content-free import event ───────────────
|
|
418
|
+
ImportApplied:
|
|
419
|
+
name: import.applied
|
|
420
|
+
title: Import applied (RFC 0098)
|
|
421
|
+
summary: An estate import was applied. Content-free — counts + refs only, never item payloads or secret values (export-bundle-no-credential-material).
|
|
422
|
+
contentType: application/json
|
|
423
|
+
payload:
|
|
424
|
+
$ref: '#/components/schemas/ImportAppliedPayload'
|
|
425
|
+
|
|
426
|
+
# ── Run-lifecycle ────────────────────────────────────────────────────
|
|
427
|
+
RunStarted:
|
|
428
|
+
name: run.started
|
|
429
|
+
title: Run started
|
|
430
|
+
summary: A new run was registered and execution began.
|
|
431
|
+
contentType: application/json
|
|
432
|
+
payload:
|
|
433
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
434
|
+
|
|
435
|
+
RunCompleted:
|
|
436
|
+
name: run.completed
|
|
437
|
+
title: Run completed (terminal)
|
|
438
|
+
summary: Run reached terminal success state. SSE connection closes after this event.
|
|
439
|
+
contentType: application/json
|
|
440
|
+
payload:
|
|
441
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
442
|
+
|
|
443
|
+
RunFailed:
|
|
444
|
+
name: run.failed
|
|
445
|
+
title: Run failed (terminal)
|
|
446
|
+
summary: Run reached terminal failure state. SSE connection closes after this event.
|
|
447
|
+
contentType: application/json
|
|
448
|
+
payload:
|
|
449
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
450
|
+
|
|
451
|
+
RunCancelled:
|
|
452
|
+
name: run.cancelled
|
|
453
|
+
title: Run cancelled (terminal)
|
|
454
|
+
summary: Run was cancelled by user or admin. SSE connection closes after this event.
|
|
455
|
+
contentType: application/json
|
|
456
|
+
payload:
|
|
457
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
458
|
+
|
|
459
|
+
CompensationRequested:
|
|
460
|
+
name: compensation.requested
|
|
461
|
+
title: Compensation plan persisted (RFC 0151 §C/§D)
|
|
462
|
+
summary: >-
|
|
463
|
+
The unwind plan is durable. §C requires this BEFORE the first inverse
|
|
464
|
+
action executes — a host that starts unwinding first cannot resume after
|
|
465
|
+
a crash, and the crash is when resumption matters.
|
|
466
|
+
contentType: application/json
|
|
467
|
+
payload:
|
|
468
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
469
|
+
|
|
470
|
+
CompensationStarted:
|
|
471
|
+
name: compensation.started
|
|
472
|
+
title: First inverse action started (RFC 0151 §D)
|
|
473
|
+
summary: Compensation began executing. MUST follow compensation.requested.
|
|
474
|
+
contentType: application/json
|
|
475
|
+
payload:
|
|
476
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
477
|
+
|
|
478
|
+
CompensationCompleted:
|
|
479
|
+
name: compensation.completed
|
|
480
|
+
title: Compensation completed (RFC 0151 §D)
|
|
481
|
+
summary: Every inverse action in the plan succeeded.
|
|
482
|
+
contentType: application/json
|
|
483
|
+
payload:
|
|
484
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
485
|
+
|
|
486
|
+
CompensationFailed:
|
|
487
|
+
name: compensation.failed
|
|
488
|
+
title: Compensation failed (RFC 0151 §D)
|
|
489
|
+
summary: >-
|
|
490
|
+
An inverse action exhausted its retries. Compensation is a second effect,
|
|
491
|
+
not an undo — it can fail, and the run's compensationStatus records that
|
|
492
|
+
rather than the run silently reporting success.
|
|
493
|
+
contentType: application/json
|
|
494
|
+
payload:
|
|
495
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
496
|
+
|
|
497
|
+
CompensationPaused:
|
|
498
|
+
name: compensation.paused
|
|
499
|
+
title: Compensation paused for authorized intervention (RFC 0151 §C)
|
|
500
|
+
summary: >-
|
|
501
|
+
Cancelling the parent MUST NOT silently abandon an active compensation.
|
|
502
|
+
It continues, pauses here, or records manual intervention required.
|
|
503
|
+
contentType: application/json
|
|
504
|
+
payload:
|
|
505
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
506
|
+
|
|
507
|
+
CompensationManualInterventionRequired:
|
|
508
|
+
name: compensation.manual_intervention_required
|
|
509
|
+
title: Compensation needs an operator (RFC 0151 §C/§E)
|
|
510
|
+
summary: >-
|
|
511
|
+
The host cannot proceed unaided. Recorded explicitly because an unwind
|
|
512
|
+
that stops without saying so is indistinguishable from one that finished.
|
|
513
|
+
contentType: application/json
|
|
514
|
+
payload:
|
|
515
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
516
|
+
|
|
517
|
+
RunPaused:
|
|
518
|
+
name: run.paused
|
|
519
|
+
title: Run paused
|
|
520
|
+
summary: Run paused (e.g., capability limit reached, manual pause).
|
|
521
|
+
contentType: application/json
|
|
522
|
+
payload:
|
|
523
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
524
|
+
|
|
525
|
+
RunResumed:
|
|
526
|
+
name: run.resumed
|
|
527
|
+
title: Run resumed
|
|
528
|
+
summary: Run resumed from pause/suspend.
|
|
529
|
+
contentType: application/json
|
|
530
|
+
payload:
|
|
531
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
532
|
+
|
|
533
|
+
RunAnnotated:
|
|
534
|
+
name: run.annotated
|
|
535
|
+
title: Run annotated (RFC 0056)
|
|
536
|
+
summary: A non-blocking quality annotation was recorded for the run. Live notification ONLY — NOT a replayable run-event-log entry; its payload is an Annotation (not a RunEventDoc), so it is excluded from fork/replay (RFC 0056 §B/§D).
|
|
537
|
+
contentType: application/json
|
|
538
|
+
payload:
|
|
539
|
+
$ref: '#/components/schemas/Annotation'
|
|
540
|
+
|
|
541
|
+
WorkspaceUpdated:
|
|
542
|
+
name: workspace.updated
|
|
543
|
+
title: Workspace file updated (RFC 0059)
|
|
544
|
+
summary: A workspace file was created, replaced, or deleted via the host.workspace store. Content-free — carries the file path + resulting version only (the body is served by the read-side, SR-1-redacted). A replayable run-event-log entry (re-read from the log on replay, never regenerated); gated on capabilities.workspace.supported.
|
|
545
|
+
contentType: application/json
|
|
546
|
+
payload:
|
|
547
|
+
$ref: '#/components/schemas/WorkspaceUpdatedPayload'
|
|
548
|
+
|
|
549
|
+
# RFC 0060. Heartbeat-scoped observability events — NOT RunEventDocs,
|
|
550
|
+
# NOT replayable run-event-log entries. Emitted on the heartbeat channel.
|
|
551
|
+
HeartbeatEvaluated:
|
|
552
|
+
name: heartbeat.evaluated
|
|
553
|
+
title: Heartbeat evaluated (RFC 0060)
|
|
554
|
+
summary: A heartbeat predicate was evaluated this tick (status + changed flag). Heartbeat-scoped observability.
|
|
555
|
+
contentType: application/json
|
|
556
|
+
payload:
|
|
557
|
+
$ref: '#/components/schemas/HeartbeatEvaluated'
|
|
558
|
+
|
|
559
|
+
HeartbeatStateChanged:
|
|
560
|
+
name: heartbeat.stateChanged
|
|
561
|
+
title: Heartbeat state changed (RFC 0060)
|
|
562
|
+
summary: A heartbeat predicate's state transitioned; emitted ONLY on change (never on an unchanged tick). Heartbeat-scoped.
|
|
563
|
+
contentType: application/json
|
|
564
|
+
payload:
|
|
565
|
+
$ref: '#/components/schemas/HeartbeatStateChanged'
|
|
566
|
+
|
|
567
|
+
# ── Node-lifecycle ───────────────────────────────────────────────────
|
|
568
|
+
NodeCompleted:
|
|
569
|
+
name: node.completed
|
|
570
|
+
title: Node completed successfully
|
|
571
|
+
contentType: application/json
|
|
572
|
+
payload:
|
|
573
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
574
|
+
|
|
575
|
+
NodeFailed:
|
|
576
|
+
name: node.failed
|
|
577
|
+
title: Node failed
|
|
578
|
+
contentType: application/json
|
|
579
|
+
payload:
|
|
580
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
581
|
+
|
|
582
|
+
NodeSkipped:
|
|
583
|
+
name: node.skipped
|
|
584
|
+
title: Node skipped due to edge condition
|
|
585
|
+
contentType: application/json
|
|
586
|
+
payload:
|
|
587
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
588
|
+
|
|
589
|
+
NodeSuspended:
|
|
590
|
+
name: node.suspended
|
|
591
|
+
title: Node suspended (HITL or external-event wait)
|
|
592
|
+
contentType: application/json
|
|
593
|
+
payload:
|
|
594
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
595
|
+
|
|
596
|
+
NodeDispatched:
|
|
597
|
+
name: node.dispatched
|
|
598
|
+
title: core.dispatch spawned a child workflow (RFC 0007 §D + RFC 0022 §A)
|
|
599
|
+
contentType: application/json
|
|
600
|
+
payload:
|
|
601
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
602
|
+
DispatchFanOut:
|
|
603
|
+
name: core.dispatch.fanOut
|
|
604
|
+
title: core.dispatch began a parallel fan-out wave (RFC 0118)
|
|
605
|
+
summary: Emitted when a fanOutPolicy=parallel wave begins; payload $defs.dispatchFanOut carries childCount/maxConcurrency/joinMode. Parallel path only.
|
|
606
|
+
contentType: application/json
|
|
607
|
+
payload:
|
|
608
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
609
|
+
DispatchJoin:
|
|
610
|
+
name: core.dispatch.join
|
|
611
|
+
title: core.dispatch parallel join satisfied (RFC 0118)
|
|
612
|
+
summary: Emitted when a fanOutPolicy=parallel join is satisfied/failed; payload $defs.dispatchJoin carries joinOutcome + the replay-deterministic mergeOrder.
|
|
613
|
+
contentType: application/json
|
|
614
|
+
payload:
|
|
615
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
616
|
+
|
|
617
|
+
# ── HITL ─────────────────────────────────────────────────────────────
|
|
618
|
+
ApprovalRequested:
|
|
619
|
+
name: approval.requested
|
|
620
|
+
title: Approval requested
|
|
621
|
+
summary: Engine emitted an approval interrupt awaiting user resolution.
|
|
622
|
+
contentType: application/json
|
|
623
|
+
payload:
|
|
624
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
625
|
+
|
|
626
|
+
ApprovalReceived:
|
|
627
|
+
name: approval.received
|
|
628
|
+
title: Approval received
|
|
629
|
+
summary: User resolved an approval interrupt (accept/reject/refine/edit).
|
|
630
|
+
contentType: application/json
|
|
631
|
+
payload:
|
|
632
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
633
|
+
|
|
634
|
+
ClarificationRequested:
|
|
635
|
+
name: clarification.requested
|
|
636
|
+
title: Clarification requested
|
|
637
|
+
contentType: application/json
|
|
638
|
+
payload:
|
|
639
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
640
|
+
|
|
641
|
+
ClarificationResolved:
|
|
642
|
+
name: clarification.resolved
|
|
643
|
+
title: Clarification resolved
|
|
644
|
+
contentType: application/json
|
|
645
|
+
payload:
|
|
646
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
647
|
+
|
|
648
|
+
InterruptRequested:
|
|
649
|
+
name: interrupt.requested
|
|
650
|
+
title: Interrupt requested (canonical HITL primitive)
|
|
651
|
+
summary: |
|
|
652
|
+
The discriminated-union form of the full `interrupt.md` kind union
|
|
653
|
+
(RFC 0094 §E): approval / clarification / external-event / custom /
|
|
654
|
+
conversation.start / conversation.exchange / conversation.close /
|
|
655
|
+
low-confidence.
|
|
656
|
+
Servers emitting `interrupt.requested` SHOULD also emit the legacy
|
|
657
|
+
kind-specific event (`approval.requested` etc) for backward compat
|
|
658
|
+
until consumers migrate.
|
|
659
|
+
contentType: application/json
|
|
660
|
+
payload:
|
|
661
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
662
|
+
|
|
663
|
+
InterruptResolved:
|
|
664
|
+
name: interrupt.resolved
|
|
665
|
+
title: Interrupt resolved
|
|
666
|
+
contentType: application/json
|
|
667
|
+
payload:
|
|
668
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
669
|
+
|
|
670
|
+
# ── Artifacts ────────────────────────────────────────────────────────
|
|
671
|
+
ArtifactCreated:
|
|
672
|
+
name: artifact.created
|
|
673
|
+
title: Artifact produced by a node
|
|
674
|
+
summary: A typed artifact (PRD, plan, theme, etc) was created and registered.
|
|
675
|
+
contentType: application/json
|
|
676
|
+
payload:
|
|
677
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
678
|
+
|
|
679
|
+
# ── Synthesized for `values` mode ────────────────────────────────────
|
|
680
|
+
StateSnapshot:
|
|
681
|
+
name: state.snapshot
|
|
682
|
+
title: Full projected run state
|
|
683
|
+
summary: |
|
|
684
|
+
Synthesized event emitted by the server in `values` mode after
|
|
685
|
+
each `updates`-tier transition. NOT a member of the canonical
|
|
686
|
+
`RunEventType` enum — this is a per-mode synthetic.
|
|
687
|
+
contentType: application/json
|
|
688
|
+
payload:
|
|
689
|
+
$ref: '#/components/schemas/StateSnapshotPayload'
|
|
690
|
+
|
|
691
|
+
# ── Synthesized for `messages` mode ──────────────────────────────────
|
|
692
|
+
AiMessageChunk:
|
|
693
|
+
name: ai.message.chunk
|
|
694
|
+
title: AI token chunk
|
|
695
|
+
summary: Per-token streaming chunk from a `core.ai.*` node.
|
|
696
|
+
contentType: application/json
|
|
697
|
+
payload:
|
|
698
|
+
$ref: '#/components/schemas/AiMessageChunkPayload'
|
|
699
|
+
|
|
700
|
+
# ── Catch-all for `debug` mode ───────────────────────────────────────
|
|
701
|
+
AnyRunEvent:
|
|
702
|
+
name: any
|
|
703
|
+
title: Any RunEventDoc
|
|
704
|
+
summary: |
|
|
705
|
+
Type-erased handler for `debug` mode — discriminate on the
|
|
706
|
+
`type` field per the `RunEventType` enum in the run-event
|
|
707
|
+
JSON Schema (the authoritative, exhaustive event list; the
|
|
708
|
+
named messages above are a curated `updates`-tier subset).
|
|
709
|
+
Includes events filtered out of `updates`: `log.appended`,
|
|
710
|
+
`variable.changed`, `version.pinned`, `lease.*`, `node.retried`,
|
|
711
|
+
`replay.diverged`, `connector.authorized`,
|
|
712
|
+
`connector.auth_expired` (RFC 0047), `authorization.decided`
|
|
713
|
+
(RFC 0049), `approval.granted` / `approval.rejected` /
|
|
714
|
+
`approval.overridden` (RFC 0051), etc.
|
|
715
|
+
contentType: application/json
|
|
716
|
+
payload:
|
|
717
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
718
|
+
|
|
719
|
+
# ── Voice (RFC 0106) ─────────────────────────────────────────────────
|
|
720
|
+
# The voice.* turn-taking / barge-in taxonomy — the single canonical record of a
|
|
721
|
+
# live voice turn (ctx.callTranscriber resolves its Promise at turn_commit; these
|
|
722
|
+
# events ARE the streaming representation on the durable log). All RunEventDocs.
|
|
723
|
+
VoiceSpeechStart:
|
|
724
|
+
name: voice.speech_start
|
|
725
|
+
title: Inbound user speech onset detected
|
|
726
|
+
contentType: application/json
|
|
727
|
+
payload:
|
|
728
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
729
|
+
|
|
730
|
+
VoiceTranscript:
|
|
731
|
+
name: voice.transcript
|
|
732
|
+
title: Interim/final transcript part (untrusted ingress; carries contentTrust)
|
|
733
|
+
contentType: application/json
|
|
734
|
+
payload:
|
|
735
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
736
|
+
|
|
737
|
+
VoiceEndpointCandidate:
|
|
738
|
+
name: voice.endpoint_candidate
|
|
739
|
+
title: Likely end-of-turn boundary (semantic turn detection)
|
|
740
|
+
contentType: application/json
|
|
741
|
+
payload:
|
|
742
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
743
|
+
|
|
744
|
+
VoiceTurnCommit:
|
|
745
|
+
name: voice.turn_commit
|
|
746
|
+
title: User yielded the floor (callTranscriber Promise resolves here)
|
|
747
|
+
contentType: application/json
|
|
748
|
+
payload:
|
|
749
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
750
|
+
|
|
751
|
+
VoiceSynthesisChunk:
|
|
752
|
+
name: voice.synthesis_chunk
|
|
753
|
+
title: Clause-boundary streaming-synthesis chunk (metadata only)
|
|
754
|
+
contentType: application/json
|
|
755
|
+
payload:
|
|
756
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
757
|
+
|
|
758
|
+
VoiceBargeIn:
|
|
759
|
+
name: voice.barge_in
|
|
760
|
+
title: User speech overlapped active assistant playback
|
|
761
|
+
contentType: application/json
|
|
762
|
+
payload:
|
|
763
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
764
|
+
|
|
765
|
+
VoiceCancelled:
|
|
766
|
+
name: voice.cancelled
|
|
767
|
+
title: Downstream LLM/TTS work cancelled (barge-in or explicit)
|
|
768
|
+
contentType: application/json
|
|
769
|
+
payload:
|
|
770
|
+
$ref: '#/components/schemas/RunEventDoc'
|
|
771
|
+
|
|
772
|
+
# ── Schemas ────────────────────────────────────────────────────────────
|
|
773
|
+
schemas:
|
|
774
|
+
|
|
775
|
+
# The canonical persisted-event shape. Defined externally so the same
|
|
776
|
+
# contract is shared with REST event-poll responses (rest-endpoints.md
|
|
777
|
+
# `GET /v1/runs/{runId}/events/poll`) and offline replay tools.
|
|
778
|
+
RunEventDoc:
|
|
779
|
+
$ref: '../schemas/run-event.schema.json'
|
|
780
|
+
|
|
781
|
+
# RFC 0081 — eval event payloads.
|
|
782
|
+
EvalStartedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/evalStarted' }
|
|
783
|
+
EvalScoredPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/evalScored' }
|
|
784
|
+
EvalCompletedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/evalCompleted' }
|
|
785
|
+
# RFC 0082 — deployment event payloads.
|
|
786
|
+
DeploymentPromotedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/deploymentPromoted' }
|
|
787
|
+
DeploymentRolledBackPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/deploymentRolledBack' }
|
|
788
|
+
DeploymentCanaryAdjustedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/deploymentCanaryAdjusted' }
|
|
789
|
+
DeploymentStateChangedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/deploymentStateChanged' }
|
|
790
|
+
# RFC 0096 — reviewable-learning proposal event payloads.
|
|
791
|
+
ProposalCreatedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/proposalCreated' }
|
|
792
|
+
ProposalActivatedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/proposalActivated' }
|
|
793
|
+
# RFC 0097 — standing-goal event payloads.
|
|
794
|
+
GoalEvaluatedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/goalEvaluated' }
|
|
795
|
+
GoalClosedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/goalClosed' }
|
|
796
|
+
# RFC 0098 — portability import event payload.
|
|
797
|
+
ImportAppliedPayload: { $ref: '../schemas/run-event-payloads.schema.json#/$defs/importApplied' }
|
|
798
|
+
|
|
799
|
+
# RFC 0056. The run.annotated notification carries an Annotation —
|
|
800
|
+
# NOT a RunEventDoc — because annotations are a side-resource, not
|
|
801
|
+
# replayable run-event-log entries (RFC 0056 §B/§D).
|
|
802
|
+
Annotation:
|
|
803
|
+
$ref: '../schemas/annotation.schema.json'
|
|
804
|
+
|
|
805
|
+
# RFC 0059. The workspace.updated event payload — content-free
|
|
806
|
+
# {path, version}. Definition lives at
|
|
807
|
+
# run-event-payloads.schema.json#$defs.workspaceUpdated so the SSE
|
|
808
|
+
# consumer + run-event log share one shape contract.
|
|
809
|
+
WorkspaceUpdatedPayload:
|
|
810
|
+
$ref: '../schemas/run-event-payloads.schema.json#/$defs/workspaceUpdated'
|
|
811
|
+
# RFC 0060 heartbeat events (heartbeat-scoped; see host-capabilities.md §host.heartbeat).
|
|
812
|
+
HeartbeatEvaluated:
|
|
813
|
+
$ref: '../schemas/heartbeat-evaluated.schema.json'
|
|
814
|
+
HeartbeatStateChanged:
|
|
815
|
+
$ref: '../schemas/heartbeat-state-changed.schema.json'
|
|
816
|
+
|
|
817
|
+
StateSnapshotPayload:
|
|
818
|
+
# S1 closure (2026-04-27): reuse the canonical RunSnapshot
|
|
819
|
+
# projection shape verbatim. Same type returned by
|
|
820
|
+
# `GET /v1/runs/{runId}` — consumers can swap polling for
|
|
821
|
+
# values-mode SSE without re-modeling state.
|
|
822
|
+
$ref: '../schemas/run-snapshot.schema.json'
|
|
823
|
+
|
|
824
|
+
AiMessageChunkPayload:
|
|
825
|
+
# S2 closure (2026-04-27) + RFC 0094 §D single-sourcing: the payload
|
|
826
|
+
# is the canonical `outputChunk` definition in
|
|
827
|
+
# run-event-payloads.schema.json — referenced (not hand-copied, the
|
|
828
|
+
# prior inline copy was one of the three drifting definitions) so the
|
|
829
|
+
# SSE consumer + run-event log share exactly one shape contract.
|
|
830
|
+
# Minimum compliant payload: {nodeId, runId, chunk, isLast} per
|
|
831
|
+
# stream-modes.md §messages; `meta` adds Tier 1 typed slots
|
|
832
|
+
# (finishReason / logprobs / toolCalls / model / usage) and a Tier 2
|
|
833
|
+
# provider-pass-through escape hatch (see #$defs/_chunkMeta).
|
|
834
|
+
$ref: '../schemas/run-event-payloads.schema.json#/$defs/outputChunk'
|