message.receive
A direct, broadcast, group, task, or RPC envelope delivered to the agent.
|
Field
|
Description
|
|
sender
|
object -- authenticated sender identity
|
|
payload
|
object -- application message body
|
|
recipient
|
object -- resolved recipient information
|
|
message_id
|
string -- protocol message identifier
|
message.delivered
Delivery acknowledgement for a message sent by this agent.
|
Field
|
Description
|
|
message_id
|
string
|
|
recipient_service_agent_id
|
UUID
|
|
delivered_at
|
ISO 8601
|
task.update
Task creation, lifecycle, retry, completion, or cancellation update.
|
Field
|
Description
|
|
status
|
string
|
|
task_id
|
string
|
|
event_type
|
string
|
group.update
Group metadata or membership update for a subscribed agent.
|
Field
|
Description
|
|
event
|
member_joined | member_left | group_updated | group_deleted
|
|
group_id
|
string
|
presence.update
Presence transition for a subscribed service agent.
|
Field
|
Description
|
|
status
|
online | offline | busy
|
|
service_agent_id
|
UUID
|
|
workspace_id
|
UUID
|
|
last_seen
|
ISO 8601
|
queue.update
An offline message was queued for or delivered to this agent.
|
Field
|
Description
|
|
message_id
|
string
|
|
event_type
|
queued | delivered
|
rpc.chunk
Streaming response chunk for a pending RPC request.
|
Field
|
Description
|
|
chunk
|
any JSON value
|
|
correlation_id
|
string
|
|
is_last
|
boolean
|
rpc.cancelled
Notification that a pending RPC request was cancelled.
|
Field
|
Description
|
|
correlation_id
|
string
|
command.dispatch
Delivered to an agent topic when a queued command is leased for execution.
|
Field
|
Description
|
|
id
|
UUID -- command ID
|
|
status
|
"dispatched"
|
|
payload
|
object -- original command payload from the operator
|
|
service_agent
|
%{id, name, slug} -- target agent summary
|
|
correlation_id
|
string -- tracing key (not an idempotency key)
|
|
command_type
|
string -- application-defined command type (e.g., "deploy.workflow")
|
|
created_by_user
|
%{id, email} -- operator who created the command
|
|
lease_expires_at
|
ISO 8601 -- when the dispatch lease expires (60 seconds from dispatch)
|
command.cancel
Broadcast when an operator cancels or requests cancellation. Generic queued/dispatched commands become cancelled; accepted/running commands retain their status and receive cancel_requested_at. Batch-owned commands use cooperative batch cancellation and may not be terminally cancelled after possible device delivery.
|
Field
|
Description
|
|
id
|
UUID -- command ID
|
|
status
|
current status; cancelled only before acceptance
|
|
correlation_id
|
string
|
|
cancel_requested_at
|
ISO 8601 -- when the cancel was requested
|
|
error_payload
|
%{code: "cancelled", message: "..."} -- cancellation reason
|
command.timed_out
Broadcast when accepted work loses the agent connection before completion.
|
Field
|
Description
|
|
id
|
UUID -- command ID
|
|
status
|
"timed_out"
|
|
completed_at
|
ISO 8601
|
|
correlation_id
|
string
|
|
error_payload
|
%{code: "agent_disconnected", message: "The agent disconnected before the command completed"}
|
command.accepted
Canonical lifecycle event emitted after the agent accepts a command.
|
Field
|
Description
|
|
id
|
UUID -- command ID
|
|
status
|
accepted
|
|
correlation_id
|
string
|
|
accepted_at
|
ISO 8601
|
|
result_payload
|
object
|
command.progress
Canonical lifecycle event emitted for incremental command progress.
|
Field
|
Description
|
|
id
|
UUID -- command ID
|
|
status
|
running
|
|
correlation_id
|
string
|
|
result_payload
|
object
|
command.complete
Canonical lifecycle event emitted when a command succeeds or is cancelled.
|
Field
|
Description
|
|
id
|
UUID -- command ID
|
|
status
|
succeeded | cancelled
|
|
completed_at
|
ISO 8601
|
|
correlation_id
|
string
|
|
result_payload
|
object
|
command.fail
Canonical lifecycle event emitted when a command fails or is cancelled.
|
Field
|
Description
|
|
id
|
UUID -- command ID
|
|
status
|
failed | cancelled
|
|
completed_at
|
ISO 8601
|
|
correlation_id
|
string
|
|
error_payload
|
object
|
trace.created
Emitted when a new trace is ingested.
|
Field
|
Description
|
|
status
|
"running" | "ok" | "error" | "partial"
|
|
started_at
|
ISO 8601
|
|
service_agent_id
|
UUID | absent for an unclaimed pending robot
|
|
trace_id
|
UUID -- trace identifier
|
|
external_trace_id
|
string | nil -- caller-provided trace identifier
|
|
trace_type
|
"runtime" | "eval" | "replay"
|
trace.event.appended
Emitted when events are appended to an existing trace. data includes a full events[] summary and may include engagement_id for marketplace-sponsored traces.
|
Field
|
Description
|
|
events
|
array -- each {id, source_event_id, event_type, name, sequence, status, span_kind, started_at, duration_ms, origin}; origin is "partner" or "runtime" on marketplace engagement events (the credential that wrote it) and null otherwise
|
|
service_agent_id
|
UUID | nil
|
|
trace_id
|
UUID -- parent trace identifier
|
|
external_trace_id
|
string | nil
|
|
engagement_id
|
UUID | nil -- present on marketplace-sponsored traces
|
|
event_count
|
integer -- number of appended events
|
|
event_ids
|
array<UUID> -- IDs of the appended events
|
trace.updated
Emitted for a correction to a terminal trace that preserves its terminal identity (status and failure signature), not a new finalization. The event carries the current trace snapshot.
|
Field
|
Description
|
|
status
|
"ok" | "error" | "partial"
|
|
service_agent_id
|
UUID | nil
|
|
trace_id
|
UUID
|
|
duration_ms
|
integer | nil
|
|
ended_at
|
ISO 8601
|
|
external_trace_id
|
string | nil
|
|
trace_type
|
"runtime" | "eval" | "replay"
|
trace.finalized
Emitted when a trace reaches a terminal status.
|
Field
|
Description
|
|
status
|
"ok" | "error" | "partial"
|
|
service_agent_id
|
UUID | nil
|
|
trace_id
|
UUID
|
|
duration_ms
|
integer | nil
|
|
ended_at
|
ISO 8601
|
|
external_trace_id
|
string | nil
|
|
trace_type
|
"runtime" | "eval" | "replay"
|
replay.started
Emitted when a replay begins execution.
|
Field
|
Description
|
|
workflow_target_id
|
UUID | nil
|
|
source_trace_id
|
UUID
|
|
generated_trace_id
|
UUID | nil
|
|
replay_id
|
UUID
|
replay.updated
Emitted when a replay reports progress. Stored status is queued | running | completed | failed. Cancel writes status failed with error_payload.code "cancelled"; a cancelled status is never stored.
|
Field
|
Description
|
|
status
|
queued | running | completed | failed
|
|
started_at
|
ISO 8601 | nil
|
|
service_agent_id
|
UUID | nil
|
|
workflow_target_id
|
UUID | nil
|
|
last_activity_at
|
ISO 8601 | nil
|
|
source_trace_id
|
UUID
|
|
finished_at
|
ISO 8601 | nil
|
|
generated_trace_id
|
UUID | nil
|
|
replay_id
|
UUID
|
replay.completed
Emitted when a replay finishes successfully.
|
Field
|
Description
|
|
status
|
completed
|
|
source_trace_id
|
UUID
|
|
comparison
|
object
|
|
generated_trace_id
|
UUID | nil
|
|
replay_id
|
UUID
|
replay.failed
Emitted when a replay fails.
|
Field
|
Description
|
|
status
|
failed
|
|
source_trace_id
|
UUID
|
|
comparison
|
object
|
|
generated_trace_id
|
UUID | nil
|
|
replay_id
|
UUID
|
replay.stuck_detected
Emitted when stale replay activity is detected and the replay is failed.
|
Field
|
Description
|
|
error
|
object -- stuck replay error details
|
|
source_trace_id
|
UUID
|
|
generated_trace_id
|
UUID | nil
|
|
replay_id
|
UUID
|
approval_request.created
Emitted when a new approval request enters the queue.
|
Field
|
Description
|
|
expires_at
|
ISO 8601
|
|
action_name
|
string
|
|
service_agent_id
|
UUID | nil
|
|
trace_id
|
UUID | nil
|
|
connector_id
|
UUID | nil
|
|
approval_request_id
|
UUID
|
approval_request.decided
Emitted when an approval request is approved, rejected, or expires.
|
Field
|
Description
|
|
action_name
|
string -- omitted for expiry
|
|
connector_id
|
UUID | nil -- omitted for expiry
|
|
decision
|
approved | rejected | expired
|
|
reviewed_at
|
ISO 8601 -- omitted for expiry
|
|
approval_request_id
|
UUID
|
|
reviewed_by_user_id
|
UUID -- omitted for expiry
|
gateway.frozen
Emitted when an emergency freeze is raised over the workspace, a connector, or a service agent. A frozen, paused, archived, or unavailable workspace refuses socket connect with a Phoenix error map %{reason: "workspace_frozen"} (or workspace_paused / workspace_archived / workspace_unavailable). This is not an HTTP 403.
|
Field
|
Description
|
|
reason
|
string -- why the gateway was stopped
|
|
expires_at
|
ISO 8601 | nil -- automatic thaw time
|
|
service_agent_id
|
UUID | nil
|
|
connector_id
|
UUID | nil
|
|
scope_type
|
workspace | connector | service_agent
|
|
created_by_id
|
UUID | nil
|
|
freeze_id
|
UUID
|
gateway.thawed
Emitted when a freeze is lifted, either by an operator or by the five-minute expiry sweep.
|
Field
|
Description
|
|
reason
|
string -- the reason the freeze was originally raised
|
|
scope_type
|
workspace | connector | service_agent
|
|
lift_kind
|
manual | expired
|
|
lifted_at
|
ISO 8601
|
|
freeze_id
|
UUID
|
|
lifted_by_id
|
UUID | nil -- nil for an automatic expiry
|
approval_request.executed
Emitted after a durable worker finishes or fails execution of an approved action. An action approved before a gateway freeze is not executed after it: the outcome is `failed` with `execution_error.code = "gateway_frozen"` and the freeze reason.
|
Field
|
Description
|
|
execution_status
|
succeeded | failed
|
|
execution_completed_at
|
ISO 8601
|
|
execution_trace_id
|
UUID | nil
|
|
approval_request_id
|
UUID
|
eval_run.completed
Emitted after an eval run calculates and persists its final summary.
|
Field
|
Description
|
|
status
|
completed
|
|
eval_run_id
|
UUID
|
|
eval_suite_id
|
UUID
|
|
finished_at
|
ISO 8601
|
|
failed_cases
|
integer
|
|
pass_rate
|
number
|
|
passed_cases
|
integer
|
|
total_cases
|
integer
|
agent.ready
Presence event reflected back through the canonical event bus.
|
Field
|
Description
|
|
metadata
|
object -- capabilities, version, and other join payload data
|
|
service_agent_id
|
UUID
|
agent.heartbeat
Liveness event reflected back through the canonical event bus.
|
Field
|
Description
|
|
metadata
|
object -- raw heartbeat payload fields
|
|
service_agent_id
|
UUID
|
robot.heartbeat
Emitted on fleet:{workspace_id} and fleet:robots:{robot_id} when a robot sends a heartbeat. Canonical event normalization preserves nested JSON null, true and false rather than the old string sentinels; enum atoms still become strings. This is an externally visible wire correction, not proof that every external consumer was updated.
|
Field
|
Description
|
|
status
|
pending | online | offline | charging | error | maintenance | decommissioned -- heartbeat forces online unless the robot is still an unclaimed pending pre-registration
|
|
location
|
object -- e.g. %{lat, lng, zone}
|
|
service_agent_id
|
UUID | nil
|
|
last_seen_at
|
ISO 8601 -- server-set
|
|
robot_id
|
UUID
|
|
serial_number
|
string
|
|
battery_level
|
integer (0-100)
|
robot.updated
Emitted on fleet:{workspace_id} and fleet:robots:{robot_id} after a committed roster-relevant robot edit (name, manufacturer, model, firmware, capabilities, or tags). The payload names changed fields but does not include arbitrary robot metadata; fetch the scoped robot for current state.
|
Field
|
Description
|
|
robot_id
|
UUID
|
|
changed_fields
|
array of field names
|
robot.status_change
Emitted on fleet:{workspace_id} and fleet:robots:{robot_id} when a robot status changes. Field names are old_status and new_status, not previous_status.
|
Field
|
Description
|
|
service_agent_id
|
UUID | nil
|
|
robot_id
|
UUID
|
|
serial_number
|
string
|
|
battery_level
|
integer (0-100)
|
|
new_status
|
pending | online | offline | charging | error | maintenance | decommissioned
|
|
old_status
|
string -- status before transition
|
mission.status_update
Emitted on fleet:{workspace_id} for mission execution/control requests and robot ACK outcomes. Payload status is the current persisted mission status, not a requested target; a queued execute stays assigned, and a pending pause/resume/cancel leaves status unchanged. Fetch mission detail for execution_status, command_id, execution_result, control_action/status/command_id/result and trace. Only a known_unsent queued execute cancels locally. Legacy unknown or possibly_delivered queued executes get a pending device cancel and are fenced from execute redelivery; their late bound ACK remains valid. An accepted control that loses transport becomes interrupted (outcome unknown), retaining its exact command link and cancel fence; it is not called failed or retried automatically. An uncertain prior control returns control_pending without replacement until its authentic late ACK. Each fleet.mission.pause/resume/cancel command payload is {"mission_id": "mission UUID", "execute_command_id": "current execute command UUID"}; execute_command_id binds the control to that fleet.mission.execute attempt.
|
Field
|
Description
|
|
name
|
string
|
|
priority
|
low | normal | high | critical
|
|
status
|
pending | assigned | in_progress | paused | completed | cancelled | failed
|
|
robot_id
|
UUID | nil
|
|
mission_id
|
UUID
|
fleet_alert.created
Emitted on fleet:{workspace_id} when a new fleet alert is generated.
|
Field
|
Description
|
|
title
|
string
|
|
severity
|
info | warning | error | critical
|
|
robot_id
|
UUID | nil
|
|
alert_type
|
battery_low | offline | error | maintenance_due | geofence_breach
|
|
alert_id
|
UUID
|
maintenance_work_order.created
Emitted after a work order and its audit/event evidence commit. Open work is planning only and does not reserve a robot.
|
Field
|
Description
|
|
status
|
open
|
|
robot_id
|
UUID
|
|
alert_id
|
UUID | nil
|
|
work_order_id
|
UUID
|
maintenance_work_order.updated
Emitted after a scheduled, assignment, start, cancellation, or editable-field change commits. Only in_progress reserves the robot. Delivery may be retried; hydrate current state from the work-order API.
|
Field
|
Description
|
|
status
|
open | scheduled | in_progress | cancelled
|
|
robot_id
|
UUID
|
|
alert_id
|
UUID | nil
|
|
work_order_id
|
UUID
|
maintenance_work_order.completed
Emitted after completion and audit evidence commit. The completed summary and outcome are available from the work-order API; a separate manual hold can remain.
|
Field
|
Description
|
|
status
|
completed
|
|
robot_id
|
UUID
|
|
alert_id
|
UUID | nil
|
|
work_order_id
|
UUID
|
geofence.breach
Emitted after a trusted fix enters an unsafe side of an active fence. First unsafe fix alerts immediately; repeated same-side fixes are deduped. The event is also sent to the robot topic and workspace webhooks. Delivery order is not guaranteed: key state by workspace_id, robot_id and geofence_id. An API-hydrated transition_version is an inclusive floor: ignore event versions less than or equal to that snapshot version, even when the event id was not seen. Thereafter accept only strictly larger versions; ignore equal-version retries (stable envelope ids aid duplicate detection). Reject events from an older geometry_revision than the hydrated state.
|
Field
|
Description
|
|
direction
|
enter | exit -- physical side reached
|
|
robot_id
|
UUID
|
|
alert_id
|
UUID -- fence-specific fleet alert
|
|
coordinates
|
[longitude, latitude]
|
|
geofence_id
|
UUID
|
|
observed_at
|
ISO 8601 -- trusted device observation time or server receipt time
|
|
safety_state
|
breached -- string safety snapshot after this transition
|
|
transition_version
|
integer -- trusted observed_at as Unix microseconds
|
geofence.clear
Emitted only after a trusted fix establishes the robot on a fence's safe side. Geometry edits and reactivation while still unsafe retain the incident and emit no false clear. Disabling or deleting a rule never certifies safe return. Apply the same max transition_version rule as geofence.breach; hydrate active state from the robot location-history API before newer events.
|
Field
|
Description
|
|
direction
|
enter | exit -- physical side reached
|
|
robot_id
|
UUID
|
|
alert_id
|
UUID -- resolved fence-specific fleet alert
|
|
coordinates
|
[longitude, latitude]
|
|
geofence_id
|
UUID
|
|
observed_at
|
ISO 8601
|
|
safety_state
|
safe -- string safety snapshot after this transition
|
|
transition_version
|
integer -- trusted observed_at as Unix microseconds
|
fleet_alert.acknowledged
Emitted on fleet:{workspace_id} and, when robot_id is present, fleet:robots:{robot_id} when an operator acknowledges an active fleet alert.
|
Field
|
Description
|
|
title
|
string
|
|
severity
|
info | warning | error | critical
|
|
robot_id
|
UUID | nil
|
|
alert_type
|
battery_low | offline | error | maintenance_due | geofence_breach
|
|
alert_id
|
UUID
|
fleet_alert.resolved
Emitted on fleet:{workspace_id} and, when robot_id is present, fleet:robots:{robot_id} when an active or acknowledged fleet alert is resolved.
|
Field
|
Description
|
|
title
|
string
|
|
severity
|
info | warning | error | critical
|
|
robot_id
|
UUID | nil
|
|
alert_type
|
battery_low | offline | error | maintenance_due | geofence_breach
|
|
alert_id
|
UUID
|
diagnostic.recorded
Emitted on fleet:{workspace_id} and, when robot_id is present, fleet:robots:{robot_id} when a diagnostic metric reading is recorded.
|
Field
|
Description
|
|
status
|
normal | warning | critical
|
|
unit
|
string -- e.g., "percent", "celsius"
|
|
robot_id
|
UUID
|
|
metric_name
|
string -- e.g., "battery_health", "motor_temperature"
|
|
metric_value
|
number
|
|
diagnostic_id
|
UUID
|
ota_update.status_change
Emitted on fleet:{workspace_id} and, when robot_id is present, fleet:robots:{robot_id} when an OTA update transitions. Field names are old_status and new_status.
|
Field
|
Description
|
|
update_type
|
firmware | software | config | security_patch
|
|
robot_id
|
UUID | nil
|
|
firmware_version
|
string -- target version
|
|
new_status
|
pending | downloading | installing | completed | failed | rolled_back
|
|
old_status
|
string
|
|
ota_update_id
|
UUID
|
alert.created
Emitted on workspace:{workspace_id} when a grouped alert is raised and routed to its destinations.
|
Field
|
Description
|
|
title
|
string | nil
|
|
severity
|
"info" | "warning" | "error" | "critical"
|
|
operator_status
|
"open" | "acknowledged" | "snoozed" | "resolved"
|
|
alert_group_key
|
string | nil
|
|
resource_id
|
string | nil
|
|
alert_id
|
UUID -- the delivery that represents the group
|
|
failure_group_id
|
UUID | nil
|
|
alert_event_type
|
string -- the event that triggered the rule
|
alert.acknowledged
Emitted on workspace:{workspace_id} when an operator acknowledges a grouped alert. Same payload as alert.created.
|
Field
|
Description
|
|
operator_status
|
"acknowledged"
|
|
alert_id
|
UUID
|
alert.snoozed
Emitted on workspace:{workspace_id} when an operator snoozes a grouped alert. Same payload as alert.created.
|
Field
|
Description
|
|
operator_status
|
"snoozed"
|
|
alert_id
|
UUID
|
alert.resolved
Emitted on workspace:{workspace_id} when an operator resolves a grouped alert. Same payload as alert.created.
|
Field
|
Description
|
|
operator_status
|
"resolved"
|
|
alert_id
|
UUID
|
telemetry.batch_ingested
Emitted on fleet:{workspace_id} and fleet:robots:{robot_id} after a telemetry batch is written. Suppressed when a batch is a duplicate replay or every reading was rejected, so a store-and-forward retry storm does not flood subscribers.
|
Field
|
Description
|
|
accepted
|
integer -- readings written by this batch, always greater than zero
|
|
batch_id
|
string -- the client-supplied or server-generated batch identifier
|
|
robot_id
|
UUID
|
fleet.batch_operation.created
Emitted on fleet:{workspace_id} when an operator submits a bulk operation and its targets have been expanded.
|
Field
|
Description
|
|
status
|
"queued"
|
|
kind
|
"set_status" | "apply_tags" | "remove_tags" | "add_to_cohort" | "remove_from_cohort" | "dispatch_command" | "acknowledge_alerts"
|
|
failed_count
|
integer
|
|
skipped_count
|
integer
|
|
succeeded_count
|
integer
|
|
total_count
|
integer -- targets selected, at most 5000
|
|
batch_operation_id
|
UUID
|
fleet.batch_operation.progress
Emitted on fleet:{workspace_id} after a committed target change on a best-effort post-commit PubSub path. A connection can miss this event; it is not a durable outbox guarantee. Poll the stored batch and paginated targets after reconnect. Counts are recomputed from rows; dispatch_command targets remain queued/running through accepted delivery and become succeeded only on exact terminal device result.
|
Field
|
Description
|
|
status
|
"running"
|
|
kind
|
string -- the operation kind
|
|
failed_count
|
integer
|
|
skipped_count
|
integer
|
|
succeeded_count
|
integer
|
|
total_count
|
integer
|
|
batch_operation_id
|
UUID
|
fleet.batch_operation.cancel_requested
Emitted on fleet:{workspace_id} when an operator stops new command-batch work. Queued targets and commands not dispatched to a device are skipped/cancelled locally; linked work that may have reached a device remains running until its terminal report. This event is a request acknowledgement, not proof of physical stop.
|
Field
|
Description
|
|
status
|
"running" until all device outcomes are terminal
|
|
kind
|
"dispatch_command"
|
|
cancel_requested_at
|
ISO 8601 timestamp -- request time
|
|
cancelled_by_id
|
UUID -- requesting operator
|
|
failed_count
|
integer
|
|
skipped_count
|
integer
|
|
succeeded_count
|
integer
|
|
total_count
|
integer
|
|
batch_operation_id
|
UUID
|
|
cancel_reason
|
bounded scrubbed request reason, distinct from batch creation reason
|
fleet.batch_operation.completed
Emitted on fleet:{workspace_id} only when every target is terminal. A cancelled command batch may still record a device success or failure that arrived after the stop-new-work request; cancelled does not prove physical device stop.
|
Field
|
Description
|
|
status
|
"completed" | "completed_with_errors" | "cancelled"
|
|
kind
|
string -- the operation kind
|
|
failed_count
|
integer
|
|
skipped_count
|
integer
|
|
succeeded_count
|
integer
|
|
total_count
|
integer
|
|
batch_operation_id
|
UUID
|
failure_group.created
Emitted on workspace:{workspace_id} when a new failure signature is clustered from a trace.
|
Field
|
Description
|
|
signature
|
string -- the clustered failure signature
|
|
severity
|
string
|
|
trace_id
|
UUID
|
|
failure_group_id
|
UUID
|
security.violation.created
Emitted on workspace:{workspace_id} when policy violation detection records a new violation.
|
Field
|
Description
|
|
status
|
string
|
|
severity
|
string
|
|
service_agent_id
|
UUID
|
|
connector_id
|
UUID | nil
|
|
audit_event_id
|
UUID
|
|
violation_id
|
UUID
|
|
violation_type
|
string
|
security.violation.resolved
Emitted on workspace:{workspace_id} when an operator resolves a recorded violation.
|
Field
|
Description
|
|
status
|
string
|
|
service_agent_id
|
UUID
|
|
resolved_at
|
ISO 8601
|
|
audit_event_id
|
UUID
|
|
violation_id
|
UUID
|
|
resolved_by_user_id
|
UUID
|
security.report.generated
Emitted on workspace:{workspace_id} when a compliance report finishes generating.
|
Field
|
Description
|
|
framework
|
string -- e.g., "soc2", "gdpr"
|
|
period_end
|
ISO 8601
|
|
period_start
|
ISO 8601
|
|
generated_at
|
ISO 8601
|
|
report_id
|
UUID
|
command.accepted / command.progress / command.complete / command.fail
After the server records a command acknowledgement sent by an agent, it re-publishes the same lifecycle name to workspace:{workspace_id} and agent:{service_agent_id} so operator surfaces follow along. The payload is the full serialized command, as with command.dispatch. No event is published when the acknowledgement did not change the command.
|
Field
|
Description
|
|
id
|
UUID -- the command
|
|
status
|
"accepted" | "running" | "succeeded" | "failed" | "cancelled"
|
|
error_payload
|
object | nil
|
|
result_payload
|
object | nil
|