Status: Durable lifecycle SSE is available in the production partner
preview. Exact browser approval events remain pending production activation.
Cancellation-reconciliation code is deployed, but final-status behavior
remains pending a separate live canary.
The key must carry runs:read, and the run must belong to its tenant.
Last-Event-ID is optional. When supplied, it must be a non-negative safe
integer; the stream resumes strictly after that task_run_events.sequence.
Framing
Every projected event uses standard SSE id, event, and data fields:
id equals the event’s numeric sequence.
- The stream sends comment heartbeats after ten seconds without a projected event.
- Disconnecting cancels the polling loop.
- A
completed, failed, or cancelled run closes the stream.
- Once the reconciliation final-status canary clears, reconciliation is
non-terminal: the run remains
running, and the stream stays open through
reconciliation and recovery.
- The TypeScript client rejects a missing/mismatched SSE id, non-increasing
sequences, events after a terminal event, and EOF before a terminal event.
Durable event vocabulary
Reconciliation without a new event type
The migration and compatible Workers are deployed, but this final-status path
remains pending a separate live canary. Once that gate clears, internal
reconcile_required states project through the existing v1 shapes. The run
stays running, and the stream emits this exact
run.progress message:
Do not retry or resubmit the run while you see that message. Reconciliation is
not a terminal event, so the stream remains open. If Praxa resolves the
uncertainty, it emits another run.progress event with this exact message:
If Praxa cannot verify whether a committing action happened, it emits a terminal
run.failed event:
Ordinary failed, partial, and expired outcomes continue to use
failure.code: "run_failed". An accepted cancellation request can follow any
of these paths. It does not prove rollback or guarantee an immediate
run.cancelled event.
Approval events fail closed (pending activation)
Praxa emits approval.required only when it can derive a customer-safe exact
presentation from immutable browse_session_act executor input. The event
contains an approvalId, the exact action_digest, and a summary made from
the recorded instruction or steps followed by the target host. The same fields
can appear as RunResource.pendingApproval.
Render that summary without truncation or re-derivation. After the person
chooses, send approve or deny with the event’s exact digest to
POST /v1/runs/:id/approve. Praxa re-derives the presentation and compares the
digest before recording the decision. If the presentation or digest is absent,
stale, unsupported, or mismatched, Praxa emits no unsafe approval projection
and accepts no decision.
The versioned AiPlatformRunEventV1 schema also includes output, tool, and usage
events. The current durable-task projector does not emit those event types.
No event exposes prompts, reasoning content, raw tool arguments, provider
cost, margin, lease state, or executor credentials.
TypeScript
Last modified on August 14, 2026