Class: Ask::CodingHarness::EventTranslator
- Inherits:
-
Object
- Object
- Ask::CodingHarness::EventTranslator
- Defined in:
- lib/ask/coding_harness/event_translator.rb
Overview
Normalizes coding-agent adapter events (ask-coding-providers) into the harness SSE event schema.
Two adapter vocabularies exist today:
ask_agent (rich): turn.started, model.streaming, model.thinking,
tool.use, tool.delta, tool.result,
approval.required, approval.updated,
plan.proposed, plan.approved, plan.rejected,
todos.updated, turn.completed, turn.failed,
turn.aborted, error
acp (basic): turn.started, model.streaming, tool.use,
tool.result, turn.completed, turn.failed
Both translate into one browser-friendly schema (camelCase, flat payloads, no seq):
turn.started, message.delta, message.thinking,
tool.start {id, name, args}, tool.delta {id, name, partial},
tool.end {id, name, output, isError, durationMs},
approval.required {id, toolName, args, message, autoApprovable},
approval.updated {id, status}, plan.proposed/approved/rejected {plan},
todos.updated {todos}, turn.completed {response},
turn.failed {error}, turn.aborted, error {error}
Instance Method Summary collapse
-
#translate(event) ⇒ Hash?
Translate one adapter event into a harness event Hash, or nil when the event has no browser representation.
Instance Method Details
#translate(event) ⇒ Hash?
Translate one adapter event into a harness event Hash, or nil when the event has no browser representation.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ask/coding_harness/event_translator.rb', line 36 def translate(event) payload = event[:payload] || {} case event[:type] when "turn.started" then event("turn.started", {}) when "model.streaming" then event("message.delta", { delta: payload["delta"] }) when "model.thinking" then event("message.thinking", { delta: payload["delta"] }) when "tool.use" then tool_start(payload) when "tool.delta" then event("tool.delta", tool_delta(payload)) when "tool.result" then tool_end(payload) when "approval.required" then approval_required(payload) when "approval.updated" then event("approval.updated", { id: payload["actionId"], status: payload["status"] }) when "plan.proposed" then event("plan.proposed", { plan: payload["plan"] }) when "plan.approved" then event("plan.approved", { plan: payload["plan"] }) when "plan.rejected" then event("plan.rejected", { plan: payload["plan"] }) when "todos.updated" then event("todos.updated", { todos: payload["todos"] }) when "turn.completed" then event("turn.completed", { response: payload["response"] }) when "turn.failed" then event("turn.failed", { error: (payload) }) when "turn.aborted" then event("turn.aborted", {}) when "error" then event("error", { error: (payload) }) end end |