From 76cdf993bf33d03db44f3d38ef9a97fb7f8bf852 Mon Sep 17 00:00:00 2001 From: yehorkardash Date: Tue, 19 May 2026 10:59:13 +0300 Subject: [PATCH] feat(editor): Update agent events (no-changelog) (#30620) --- .../agents/__tests__/AgentBuilderView.test.ts | 3 +++ .../__tests__/useAgentTelemetry.test.ts | 26 +++++++++++++++++++ .../composables/useAgentBuilderTelemetry.ts | 15 +++++++++++ .../agents/composables/useAgentTelemetry.ts | 26 +++++++++++++++++++ .../agents/views/AgentBuilderView.vue | 4 ++- 5 files changed, 73 insertions(+), 1 deletion(-) diff --git a/packages/frontend/editor-ui/src/features/agents/__tests__/AgentBuilderView.test.ts b/packages/frontend/editor-ui/src/features/agents/__tests__/AgentBuilderView.test.ts index 2809a35683d..e7c511aa5d9 100644 --- a/packages/frontend/editor-ui/src/features/agents/__tests__/AgentBuilderView.test.ts +++ b/packages/frontend/editor-ui/src/features/agents/__tests__/AgentBuilderView.test.ts @@ -104,6 +104,9 @@ vi.mock('../composables/useAgentBuilderTelemetry', () => ({ flushConfigEdits: vi.fn(), trackToolsAdded: vi.fn(), trackSkillsAdded: vi.fn(), + trackOpenedToolFromList: vi.fn(), + trackOpenedSkillFromList: vi.fn(), + trackOpenedAddSkillModal: vi.fn(), }), })); diff --git a/packages/frontend/editor-ui/src/features/agents/__tests__/useAgentTelemetry.test.ts b/packages/frontend/editor-ui/src/features/agents/__tests__/useAgentTelemetry.test.ts index 176cd406c99..28539f3c60f 100644 --- a/packages/frontend/editor-ui/src/features/agents/__tests__/useAgentTelemetry.test.ts +++ b/packages/frontend/editor-ui/src/features/agents/__tests__/useAgentTelemetry.test.ts @@ -145,4 +145,30 @@ describe('useAgentTelemetry', () => { session_id: 'session-xyz', }); }); + + it('trackOpenedToolFromList fires with agent_id and tool_type', () => { + useAgentTelemetry().trackOpenedToolFromList({ agentId: 'ag-1', toolType: 'node' }); + expect(trackMock).toHaveBeenCalledWith('User opened agent tool', { + agent_id: 'ag-1', + tool_type: 'node', + session_id: 'session-xyz', + }); + }); + + it('trackOpenedSkillFromList fires with agent_id and skill_id', () => { + useAgentTelemetry().trackOpenedSkillFromList({ agentId: 'ag-1', skillId: 'skill-42' }); + expect(trackMock).toHaveBeenCalledWith('User opened agent skill', { + agent_id: 'ag-1', + skill_id: 'skill-42', + session_id: 'session-xyz', + }); + }); + + it('trackOpenedAddSkillModal fires with agent_id', () => { + useAgentTelemetry().trackOpenedAddSkillModal({ agentId: 'ag-1' }); + expect(trackMock).toHaveBeenCalledWith('User opened add skill modal', { + agent_id: 'ag-1', + session_id: 'session-xyz', + }); + }); }); diff --git a/packages/frontend/editor-ui/src/features/agents/composables/useAgentBuilderTelemetry.ts b/packages/frontend/editor-ui/src/features/agents/composables/useAgentBuilderTelemetry.ts index 81aa4ee471f..b1fdce45eb7 100644 --- a/packages/frontend/editor-ui/src/features/agents/composables/useAgentBuilderTelemetry.ts +++ b/packages/frontend/editor-ui/src/features/agents/composables/useAgentBuilderTelemetry.ts @@ -289,6 +289,18 @@ export function useAgentBuilderTelemetry(deps: AgentBuilderTelemetryDeps) { previousSkills = []; } + function trackOpenedToolFromList(toolType: string) { + agentTelemetry.trackOpenedToolFromList({ agentId: deps.agentId.value, toolType }); + } + + function trackOpenedSkillFromList(skillId: string) { + agentTelemetry.trackOpenedSkillFromList({ agentId: deps.agentId.value, skillId }); + } + + function trackOpenedAddSkillModal() { + agentTelemetry.trackOpenedAddSkillModal({ agentId: deps.agentId.value }); + } + return { recordConfigEdit, flushConfigEdits, @@ -300,5 +312,8 @@ export function useAgentBuilderTelemetry(deps: AgentBuilderTelemetryDeps) { captureSkillsBaseline, fetchInitialTriggersBaseline, resetForAgentSwitch, + trackOpenedToolFromList, + trackOpenedSkillFromList, + trackOpenedAddSkillModal, }; } diff --git a/packages/frontend/editor-ui/src/features/agents/composables/useAgentTelemetry.ts b/packages/frontend/editor-ui/src/features/agents/composables/useAgentTelemetry.ts index ed67bf0c392..08afefe4ba4 100644 --- a/packages/frontend/editor-ui/src/features/agents/composables/useAgentTelemetry.ts +++ b/packages/frontend/editor-ui/src/features/agents/composables/useAgentTelemetry.ts @@ -134,6 +134,29 @@ export function useAgentTelemetry() { }); } + function trackOpenedToolFromList(params: { agentId: string; toolType: string }) { + safeTrack('User opened agent tool', { + agent_id: params.agentId, + tool_type: params.toolType, + ...common(), + }); + } + + function trackOpenedSkillFromList(params: { agentId: string; skillId: string }) { + safeTrack('User opened agent skill', { + agent_id: params.agentId, + skill_id: params.skillId, + ...common(), + }); + } + + function trackOpenedAddSkillModal(params: { agentId: string }) { + safeTrack('User opened add skill modal', { + agent_id: params.agentId, + ...common(), + }); + } + return { trackClickedNewAgent, trackSubmittedMessage, @@ -143,5 +166,8 @@ export function useAgentTelemetry() { trackAddedSkills, trackPublishedAgent, trackUnpublishedAgent, + trackOpenedToolFromList, + trackOpenedSkillFromList, + trackOpenedAddSkillModal, }; } diff --git a/packages/frontend/editor-ui/src/features/agents/views/AgentBuilderView.vue b/packages/frontend/editor-ui/src/features/agents/views/AgentBuilderView.vue index 5f00dc66dca..c6d96d1385b 100644 --- a/packages/frontend/editor-ui/src/features/agents/views/AgentBuilderView.vue +++ b/packages/frontend/editor-ui/src/features/agents/views/AgentBuilderView.vue @@ -366,7 +366,6 @@ async function saveSkill(snapshot: SkillAutosaveSnapshot): Promise { const configAutosave = useAgentConfigAutosave({ save: saveConfig, onSaved: () => { - telemetry.track('User saved agent settings', { agent_id: agentId.value }); builderTelemetry.flushConfigEdits(); // Diff the saved tool/skill lists against the last baseline. No-op when // nothing new landed, so calling on every save also handles the build-chat @@ -638,6 +637,7 @@ function onOpenToolFromList(index: number) { const tools = localConfig.value?.tools ?? []; const tool = tools[index]; if (!tool) return; + builderTelemetry.trackOpenedToolFromList(tool.type); const customTool = tool.type === 'custom' && tool.id ? agent.value?.tools?.[tool.id] : undefined; uiStore.openModalWithData({ name: AGENT_TOOL_CONFIG_MODAL_KEY, @@ -683,6 +683,7 @@ const appliedSkills = computed>(() => { function onOpenSkillFromList(id: string) { const skill = appliedSkills.value.find((s) => s.id === id)?.skill; if (!skill) return; + builderTelemetry.trackOpenedSkillFromList(id); uiStore.openModalWithData({ name: AGENT_SKILL_MODAL_KEY, data: { @@ -726,6 +727,7 @@ function onRemoveSkill(id: string) { } function onOpenAddSkillModal() { + builderTelemetry.trackOpenedAddSkillModal(); uiStore.openModalWithData({ name: AGENT_SKILL_MODAL_KEY, data: {