From 680a96fc9fc62cb11d1e496a77c8aecc59e6ca52 Mon Sep 17 00:00:00 2001 From: Will Li Date: Wed, 25 Jun 2025 12:29:02 -0700 Subject: [PATCH] Add git repo information to `events` (#136) Context This PR adds support for git repository information in the analytics system by adding the necessary columns to the ClickHouse database and updating the UI to handle these properties appropriately. Implementation Updated .docker/scripts/clickhouse/001-create-tables.sql to include git properties in the schema for new database instances. Migrated package.json's to support new type schema. Modified apps/web/src/components/task-sharing/TaskDetails.tsx to display git properties when available (message if not). Added some claude-code typing. How to Test Run the migration by rebuilding docker and pnpm. If this still doesn't work try deleting .docker/data/clickhouse Create a new task in a git tracked repo on Roo Code extension while signed in-- verify this is logged correctly. --- .../scripts/clickhouse/001-create-tables.sql | 3 +++ apps/roomote/package.json | 2 +- apps/web/package.json | 2 +- apps/web/src/actions/analytics/events.ts | 8 ++++++- .../components/task-sharing/TaskDetails.tsx | 13 ++++++++++- apps/web/src/lib/providers.ts | 6 ++++- packages/db/clickhouse/events.sql | 3 +++ packages/db/package.json | 2 +- packages/ipc/package.json | 2 +- pnpm-lock.yaml | 22 +++++++++---------- 10 files changed, 45 insertions(+), 18 deletions(-) diff --git a/.docker/scripts/clickhouse/001-create-tables.sql b/.docker/scripts/clickhouse/001-create-tables.sql index e332e93b26..6845880ea2 100644 --- a/.docker/scripts/clickhouse/001-create-tables.sql +++ b/.docker/scripts/clickhouse/001-create-tables.sql @@ -21,6 +21,9 @@ CREATE TABLE IF NOT EXISTS default.events `modelId` Nullable(String), `diffStrategy` Nullable(String), `isSubtask` Nullable(Bool), + `repositoryUrl` Nullable(String), + `repositoryName` Nullable(String), + `defaultBranch` Nullable(String), -- Completion `inputTokens` Nullable(Int32), diff --git a/apps/roomote/package.json b/apps/roomote/package.json index 3dd9f4fa5c..da0d7f0d6f 100644 --- a/apps/roomote/package.json +++ b/apps/roomote/package.json @@ -16,7 +16,7 @@ "dependencies": { "@roo-code-cloud/db": "workspace:^", "@roo-code-cloud/ipc": "workspace:^", - "@roo-code/types": "^1.26.0", + "@roo-code/types": "^1.29.0", "bullmq": "^5.37.0", "drizzle-orm": "^0.44.2", "execa": "^9.6.0", diff --git a/apps/web/package.json b/apps/web/package.json index 2d250e2eb4..bc80081a87 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -32,7 +32,7 @@ "@radix-ui/react-toast": "^1.2.14", "@radix-ui/react-tooltip": "^1.2.7", "@roo-code-cloud/db": "workspace:^", - "@roo-code/types": "^1.28.0", + "@roo-code/types": "^1.29.0", "@sentry/nextjs": "^9.23.0", "@t3-oss/env-nextjs": "^0.13.6", "@tailwindcss/postcss": "^4.1.8", diff --git a/apps/web/src/actions/analytics/events.ts b/apps/web/src/actions/analytics/events.ts index 48334bf542..6c01b65713 100644 --- a/apps/web/src/actions/analytics/events.ts +++ b/apps/web/src/actions/analytics/events.ts @@ -311,6 +311,9 @@ const taskSchema = z.object({ tokens: z.coerce.number(), cost: z.coerce.number(), timestamp: z.coerce.number(), + repositoryUrl: z.string().nullable().optional(), + repositoryName: z.string().nullable().optional(), + defaultBranch: z.string().nullable().optional(), }); export type TaskWithUser = z.infer & { user: User }; @@ -404,7 +407,10 @@ export const getTasks = async ({ SUM(CASE WHEN e.type = 'LLM Completion' THEN ${tokenSumSql('e')} ELSE 0 END) AS tokens, SUM(CASE WHEN e.type = 'LLM Completion' THEN COALESCE(e.cost, 0) ELSE 0 END) AS cost, MIN(e.timestamp) AS timestamp, - any(fm.title) AS title + any(fm.title) AS title, + any(e.repositoryUrl) AS repositoryUrl, + any(e.repositoryName) AS repositoryName, + any(e.defaultBranch) AS defaultBranch FROM events e LEFT JOIN first_messages fm ON e.taskId = fm.taskId WHERE diff --git a/apps/web/src/components/task-sharing/TaskDetails.tsx b/apps/web/src/components/task-sharing/TaskDetails.tsx index 8f764ce08a..86bbc30f79 100644 --- a/apps/web/src/components/task-sharing/TaskDetails.tsx +++ b/apps/web/src/components/task-sharing/TaskDetails.tsx @@ -53,7 +53,7 @@ export const TaskDetails = ({ -
+

Developer

{task.user.name}

@@ -74,6 +74,17 @@ export const TaskDetails = ({

Cost

{formatCurrency(task.cost)}

+
+

Git Workspace

+ + {task.repositoryName ? ( +

{task.repositoryName}

+ ) : ( +

+ Not available +

+ )} +
{task.mode && (
diff --git a/apps/web/src/lib/providers.ts b/apps/web/src/lib/providers.ts index a811b1ec28..7a4ac1c426 100644 --- a/apps/web/src/lib/providers.ts +++ b/apps/web/src/lib/providers.ts @@ -75,4 +75,8 @@ export const PROVIDERS: Record< litellm: { id: 'litellm', label: 'LiteLLM', models: [] }, unbound: { id: 'unbound', label: 'Unbound', models: [] }, glama: { id: 'glama', label: 'Glama', models: [] }, -}; + 'claude-code': { id: 'claude-code', label: 'Claude Code', models: [] }, +} as Record< + Exclude, + { id: ProviderName; label: string; models: string[] } +>; diff --git a/packages/db/clickhouse/events.sql b/packages/db/clickhouse/events.sql index 21f5351016..df064512e8 100644 --- a/packages/db/clickhouse/events.sql +++ b/packages/db/clickhouse/events.sql @@ -21,6 +21,9 @@ CREATE TABLE default.events `modelId` Nullable(String), `diffStrategy` Nullable(String), `isSubtask` Nullable(Bool), + `repositoryUrl` Nullable(String), + `repositoryName` Nullable(String), + `defaultBranch` Nullable(String), -- Completion `inputTokens` Nullable(Int32), diff --git a/packages/db/package.json b/packages/db/package.json index 7e19ca7909..1180d189b8 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -26,7 +26,7 @@ "db:test:push": "dotenvx run -f .env.test -- drizzle-kit push" }, "dependencies": { - "@roo-code/types": "^1.26.0", + "@roo-code/types": "^1.29.0", "drizzle-orm": "^0.44.2", "postgres": "^3.4.7", "zod": "^3.25.41" diff --git a/packages/ipc/package.json b/packages/ipc/package.json index ebfbd641fe..7d23c32d22 100644 --- a/packages/ipc/package.json +++ b/packages/ipc/package.json @@ -9,7 +9,7 @@ "clean": "rimraf .turbo" }, "dependencies": { - "@roo-code/types": "^1.26.0", + "@roo-code/types": "^1.29.0", "node-ipc": "^12.0.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cae020f2e8..38c9c075d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -46,8 +46,8 @@ importers: specifier: workspace:^ version: link:../../packages/ipc '@roo-code/types': - specifier: ^1.26.0 - version: 1.26.0 + specifier: ^1.29.0 + version: 1.29.0 bullmq: specifier: ^5.37.0 version: 5.54.3 @@ -201,8 +201,8 @@ importers: specifier: workspace:^ version: link:../../packages/db '@roo-code/types': - specifier: ^1.28.0 - version: 1.28.0 + specifier: ^1.29.0 + version: 1.29.0 '@sentry/nextjs': specifier: ^9.23.0 version: 9.23.0(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(next@15.3.3(@babel/core@7.27.3)(@opentelemetry/api@1.9.0)(@playwright/test@1.52.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)(webpack@5.99.9) @@ -435,8 +435,8 @@ importers: packages/db: dependencies: '@roo-code/types': - specifier: ^1.26.0 - version: 1.26.0 + specifier: ^1.29.0 + version: 1.29.0 drizzle-orm: specifier: ^0.44.2 version: 0.44.2(@electric-sql/pglite@0.3.0)(@libsql/client-wasm@0.15.5)(@opentelemetry/api@1.9.0)(@types/pg@8.15.2)(pg@8.15.6)(postgres@3.4.7) @@ -463,8 +463,8 @@ importers: packages/ipc: dependencies: '@roo-code/types': - specifier: ^1.26.0 - version: 1.26.0 + specifier: ^1.29.0 + version: 1.29.0 node-ipc: specifier: ^12.0.0 version: 12.0.0 @@ -2291,8 +2291,8 @@ packages: cpu: [x64] os: [win32] - '@roo-code/types@1.26.0': - resolution: {integrity: sha512-FX+9jl+PRpZG0n+MUFXjlelDdzEVLQULfHAdBCT7npOs0MrC5IaBGxtuZMYRKWYzEvgwRM96oqXgr6CYkNIWZQ==} + '@roo-code/types@1.29.0': + resolution: {integrity: sha512-bovFOCVQYuWnV2Cvdcx5tWp8aUpF0tEoxN0rS05hzzwdDeDxB6F6q5orKsQqghTS0yqv5pYclQLZRyAV7oBsbw==} '@roo-code/types@1.28.0': resolution: {integrity: sha512-kJAWDaY80BLPRxVa1Nz3Fuj7tvnSVMsRlpgNq3YXvFyQwWsui7DZz/AgX5qm+CwcAHXHBPmCUn5oV5XnEAEykw==} @@ -8357,7 +8357,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.41.1': optional: true - '@roo-code/types@1.26.0': {} + '@roo-code/types@1.29.0': {} '@roo-code/types@1.28.0': {}