openhands
Identity
-
Names:
openhands/dev.all-hands.openhands. -
Native format:
openhands-events, immutableevents/event-<ordinal>-<id>.jsonand rewrittenbase_state.json. Legacy event trees have no semantic qualification here. -
Session ID:
base_state.id, otherwise the SDK’s native conversation directory key. Current SDK UUIDs need no namespace. Legacy local-ID scope is unqualified. -
Entity keys: Event
id;tool_call.idandtool_call_id;llm_response_ididentifies a model response. Duplicate event IDs prevent unique tree resolution.MessageEvent.senderis an actor address, not a child SessionRef. -
Compaction:
Condensation.forgotten_event_idsnames individual entries and all their context projections. SDKsummary_eventsupplies<condensation-id>-summaryfor prior summaries.summary_offsetindexes the post-forgetting LLMConvertible view, including system prompts; translate it to an available context boundary. Missing targets mean unknown extent, not invented IDs. -
Notes: Structured observations remain
rawwhen tool-specificto_llm_contentwas not persisted. Keep numeric signals raw. SystemPromptEvent supplies instructions. Knownhook_event_typevalues map hook events; pause/interrupt does not prove termination. Statestats.usage_to_metrics.<bucket>.token_usages[].response_idjoins one inference; latency usesresponse_latencies[].response_id. Duplicate ledger copies stay native, and unkeyedcosts[]never join by position.Metrics.model_nameis requested configuration. Accumulated counters are session summaries with unknown child inclusion. Omitsecret_registryfrom every retained representation.
Position basis
Use only positions established by the stated format and mapping evidence. Current-state rows without transcript positions form the snapshot tail. A protocol commit boundary takes precedence over physical EOF; uncommitted bytes are not a gap.
Destinations
openhands: native facts without a standard field
Links
- Tree and links: SDK 1.42.1
EventLog._effective_parent_idtreats missing/nullparent_idas the previous event and__root__as START. Resolve audit-only ancestors to their context projections.llm_response_id, or an unambiguous call-ID join, groups responses.base_state.leaf_event_idsupplies the head in a tail snapshot. No inter-session parent, subagent, copy or root rule is qualified.
Usage
Select uniqueresponse_id token reports from stats.usage_to_metrics and update the matching inference once. Duplicate reports across buckets stay native. Costs without response IDs remain aggregate native evidence; neither array position nor equal values join them. Declare incomplete coverage where the selected reports omit usage.
Select one report per native accounting identity only when this entry establishes that identity. Keep unjoinable or overlapping reports as native evidence. Declare incomplete semantic coverage. Schema defaults and placeholder zeros are not reported usage. Rules for what a backend includes in its usage counts require evidence; do not infer them from a model name.
Lane and unassigned facts
Facts without established session ownership use manifest_meta["dev.all-hands.openhands/unassigned"] with the common shape. Selection may retain these facts with any session subset, including an empty subset, but must not imply session ownership. State the selection policy in the export report.
Losses
Declare every applicable loss under ASR-157. Missing model rendering, accounting joins, lineage or exact context boundaries remain losses when this entry does not qualify them. Unknown ownership is not itself lost data. For omitted unassigned facts, use a documented vendor loss or report; do not create a new core category.Evidence
Basis: source-verified: OpenHands SDK1.42.1, commit 98338ff37aea6627777b9978963ab727f51e4f40; native no-model ConversationState/EventLog capture and authored semantic fixtures. The capture covers persistence, not live tools or inference.
Evidence applies only to the named formats and explicit mappings above. A real capture covers only exercised behavior. A no-model writer probe covers persistence, not model or tool execution. Authored tests do not qualify an agent version. Unlisted formats and link mappings remain unqualified.
Observations from 2026-10-27
observed, version CLI 1.16.0; SDK 1.21.0: OpenHands CLI 1.16.0 with SDK 1.21.0 retained two headless sessions with file and shell tools. This evidence applies to SDK conversation events. It does not qualify legacy conversation layouts or condensation. Preserve native event objects in native.record or native.blob.
The ctx conversion produced 2 streams and 56 records, with 0 errors, 2 notices, 0 gaps and 0 unidentified inputs under validator-v0.1.2. These counts describe the selected output; an empty bundle qualifies no source format. No sanitized native fixture was retained for this observation.
Whole native records use native.record or native.blob, with JSON text columns preserved as strings. The exporter’s own bookkeeping for serialization, partitioning and message keys belongs in the exporter namespace (rs.ctx for ctx), not to a provider metadata destination. These runs add no evidence for approvals, lineage links, compaction boundaries or exact request context that they did not exercise.