From c773513dcd9b9d3f256b0f77d42a7c7cc60ec69b Mon Sep 17 00:00:00 2001 From: Alex Alecu Date: Mon, 23 Feb 2026 10:55:41 +0200 Subject: [PATCH] feat(telemetry): add plan followup tracking --- packages/kilo-telemetry/src/events.ts | 1 + packages/kilo-telemetry/src/telemetry.ts | 4 ++++ packages/opencode/src/kilocode/plan-followup.ts | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/kilo-telemetry/src/events.ts b/packages/kilo-telemetry/src/events.ts index 86cf95e337a..ddfde6a9a81 100644 --- a/packages/kilo-telemetry/src/events.ts +++ b/packages/kilo-telemetry/src/events.ts @@ -15,6 +15,7 @@ export enum TelemetryEvent { COMMAND_USED = "Command Used", TOOL_USED = "Tool Used", AGENT_USED = "Agent Used", + PLAN_FOLLOWUP = "Plan Followup", // Share Events SHARE_CREATED = "Share Created", diff --git a/packages/kilo-telemetry/src/telemetry.ts b/packages/kilo-telemetry/src/telemetry.ts index 53a42d4a7f9..546b2bd5548 100644 --- a/packages/kilo-telemetry/src/telemetry.ts +++ b/packages/kilo-telemetry/src/telemetry.ts @@ -162,6 +162,10 @@ export namespace Telemetry { track(TelemetryEvent.AGENT_USED, { agent, sessionId }) } + export function trackPlanFollowup(sessionId: string, choice: "new_session" | "continue" | "custom" | "dismissed") { + track(TelemetryEvent.PLAN_FOLLOWUP, { sessionId, choice }) + } + // Share export function trackShareCreated(sessionId: string) { track(TelemetryEvent.SHARE_CREATED, { sessionId }) diff --git a/packages/opencode/src/kilocode/plan-followup.ts b/packages/opencode/src/kilocode/plan-followup.ts index f9c14a2f73c..6f2b57f7b88 100644 --- a/packages/opencode/src/kilocode/plan-followup.ts +++ b/packages/opencode/src/kilocode/plan-followup.ts @@ -1,3 +1,4 @@ +import { Telemetry } from "@kilocode/kilo-telemetry" import { Agent } from "@/agent/agent" import { Bus } from "@/bus" import { TuiEvent } from "@/cli/cmd/tui/event" @@ -237,12 +238,19 @@ export namespace PlanFollowup { if (!user || user.role !== "user" || !user.model) return "break" const answers = await prompt({ sessionID: input.sessionID, abort: input.abort }) - if (!answers) return "break" + if (!answers) { + Telemetry.trackPlanFollowup(input.sessionID, "dismissed") + return "break" + } const answer = answers[0]?.[0]?.trim() - if (!answer) return "break" + if (!answer) { + Telemetry.trackPlanFollowup(input.sessionID, "dismissed") + return "break" + } if (answer === ANSWER_NEW_SESSION) { + Telemetry.trackPlanFollowup(input.sessionID, "new_session") await startNew({ sessionID: input.sessionID, plan, @@ -254,6 +262,7 @@ export namespace PlanFollowup { } if (answer === ANSWER_CONTINUE) { + Telemetry.trackPlanFollowup(input.sessionID, "continue") await inject({ sessionID: input.sessionID, agent: "code", @@ -263,6 +272,7 @@ export namespace PlanFollowup { return "continue" } + Telemetry.trackPlanFollowup(input.sessionID, "custom") await inject({ sessionID: input.sessionID, agent: "plan",