HUX-11 contract freeze: identity/capabilities/manifest/error records, event turn and idempotency and delegation/side-effect kinds, memory no-store/supersedes/ retrieval removal, revisions for optimistic concurrency, artifact access, budget scope/spend/subagents and external side-effect gating, notebook notes and dedupe keys. ADR-0001 records the wire and compatibility rules. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RNPhwu2bsaRNg3DETSAZoM
125 lines
3.2 KiB
JSON
125 lines
3.2 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://hermes.bstein.dev/contracts/hux/v1/event.schema.json",
|
|
"title": "HUX activity event",
|
|
"description": "One entry in the per-conversation activity stream (HUX-01). seq is strictly monotonic per conversation; consumers resume with after_seq. Every other HUX record that changes state emits exactly one event.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema",
|
|
"id",
|
|
"seq",
|
|
"ts",
|
|
"conversation_id",
|
|
"kind",
|
|
"summary",
|
|
"provenance",
|
|
"sensitivity",
|
|
"redaction",
|
|
"turn",
|
|
"identity"
|
|
],
|
|
"properties": {
|
|
"schema": {
|
|
"const": "hux.event.v1"
|
|
},
|
|
"id": {
|
|
"$ref": "common.schema.json#/$defs/id"
|
|
},
|
|
"seq": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"ts": {
|
|
"$ref": "common.schema.json#/$defs/timestamp"
|
|
},
|
|
"conversation_id": {
|
|
"$ref": "common.schema.json#/$defs/id"
|
|
},
|
|
"run_id": {
|
|
"type": "string",
|
|
"maxLength": 120
|
|
},
|
|
"parent_event_id": {
|
|
"$ref": "common.schema.json#/$defs/id"
|
|
},
|
|
"correlation_id": {
|
|
"type": "string",
|
|
"maxLength": 120
|
|
},
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"message.user",
|
|
"message.assistant",
|
|
"decision.route",
|
|
"decision.plan",
|
|
"tool.call",
|
|
"tool.result",
|
|
"approval.requested",
|
|
"approval.resolved",
|
|
"memory.proposed",
|
|
"memory.committed",
|
|
"memory.forgotten",
|
|
"artifact.created",
|
|
"artifact.version",
|
|
"artifact.promoted",
|
|
"citation.attached",
|
|
"mode.changed",
|
|
"run.started",
|
|
"run.cancelled",
|
|
"run.completed",
|
|
"run.failed",
|
|
"privacy.notice",
|
|
"suggestion.shown",
|
|
"suggestion.dismissed",
|
|
"release.transition",
|
|
"delegation.started",
|
|
"delegation.completed",
|
|
"delegation.failed",
|
|
"memory.suppressed",
|
|
"memory.retrieval_removed",
|
|
"budget.exhausted",
|
|
"side_effect.blocked",
|
|
"side_effect.released"
|
|
]
|
|
},
|
|
"summary": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 280
|
|
},
|
|
"detail": {
|
|
"type": "object",
|
|
"description": "Kind-specific payload restricted to the allowlisted keys for that kind. Raw tool arguments, logs, credentials and tokens are never stored here; the redaction pipeline drops unknown keys and scrubs secret patterns before the event is written."
|
|
},
|
|
"evidence": {
|
|
"type": "array",
|
|
"maxItems": 64,
|
|
"items": {
|
|
"$ref": "common.schema.json#/$defs/evidence_ref"
|
|
}
|
|
},
|
|
"provenance": {
|
|
"$ref": "common.schema.json#/$defs/provenance"
|
|
},
|
|
"sensitivity": {
|
|
"$ref": "common.schema.json#/$defs/sensitivity"
|
|
},
|
|
"redaction": {
|
|
"$ref": "common.schema.json#/$defs/redaction"
|
|
},
|
|
"turn": {
|
|
"type": "integer",
|
|
"description": "User-visible turn number within the conversation; several events share a turn.",
|
|
"minimum": 0
|
|
},
|
|
"idempotency_key": {
|
|
"$ref": "common.schema.json#/$defs/idempotency_key"
|
|
},
|
|
"identity": {
|
|
"$ref": "common.schema.json#/$defs/identity"
|
|
}
|
|
}
|
|
}
|