summaryrefslogtreecommitdiff
path: root/internal/event/event.go
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-05-22 09:08:52 +0000
committerClaude <noreply@anthropic.com>2026-05-22 09:08:52 +0000
commit39cc108b5f0bf3d0238a1707d657a77b7a3df184 (patch)
tree84ee8bcc039b058a308a542f1e1f4a4d11f9e144 /internal/event/event.go
parentc24fdaa9b6bce49f5c0a1c589fd064d46b62b88d (diff)
feat(event,storage): add events table substrate for OSS redesign
New internal/event package defines the Event type with canonical Kind and Actor constants. New events table is appended via additive migration (id, task_id, seq, ts, kind, actor, payload_json) with seq as per-task monotonic, assigned by the storage layer inside a transaction. CreateEvent + ListEvents support the future migration of question_json, interactions_json, summary, and elaboration_input off the tasks table into a unified, replayable event stream. No existing code paths are modified yet; this is pure substrate for Phase 1. https://claude.ai/code/session_01SESwn7kQ7oP62trWw6pc39
Diffstat (limited to 'internal/event/event.go')
-rw-r--r--internal/event/event.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/internal/event/event.go b/internal/event/event.go
new file mode 100644
index 0000000..2573fde
--- /dev/null
+++ b/internal/event/event.go
@@ -0,0 +1,50 @@
+// Package event defines the Event type and canonical kinds/actors for the
+// task observability stream. Events are immutable, per-task, monotonically
+// sequenced records persisted by internal/storage.
+package event
+
+import (
+ "encoding/json"
+ "time"
+)
+
+// Kind enumerates the canonical event types.
+type Kind string
+
+const (
+ KindStateChange Kind = "state_change"
+ KindAgentMessage Kind = "agent_message"
+ KindClarificationRequest Kind = "clarification_request"
+ KindClarificationAnswer Kind = "clarification_answer"
+ KindHumanMessage Kind = "human_message"
+ KindSummary Kind = "summary"
+ KindCommitMade Kind = "commit_made"
+ KindSubtaskSpawned Kind = "subtask_spawned"
+ KindCostReport Kind = "cost_report"
+ KindExecutionStarted Kind = "execution_started"
+ KindExecutionEnded Kind = "execution_ended"
+)
+
+// Actor identifies the originator of an event.
+type Actor string
+
+const (
+ ActorAgent Actor = "agent"
+ ActorUser Actor = "user"
+ ActorChatbot Actor = "chatbot"
+ ActorSystem Actor = "system"
+ ActorWebhook Actor = "webhook"
+)
+
+// Event is a single timestamped record on a task's audit/observability stream.
+// Once written, events are append-only — the seq column is per-task monotonic
+// and assigned by the storage layer on insert.
+type Event struct {
+ ID string `json:"id"`
+ TaskID string `json:"task_id"`
+ Seq int64 `json:"seq"`
+ Timestamp time.Time `json:"timestamp"`
+ Kind Kind `json:"kind"`
+ Actor Actor `json:"actor"`
+ Payload json.RawMessage `json:"payload"`
+}