chore: add client_type field to chats and telemetry (#24342)

Add a `chat_client_type` enum (`ui` | `api`) and `client_type` column to
the `chats` table. The column defaults to `api` for new rows so API
callers don't need to set it explicitly. Existing rows are backfilled to
`ui`.

The field flows through `CreateChatRequest`, `chatd.CreateOptions`,
`InsertChat`, and is returned in the `Chat` response via `db2sdk`.

<details>
<summary>Implementation notes (Coder Agents generated)</summary>

### Changes

**Database migration (000469)**
- New enum `chat_client_type` with values `ui`, `api`.
- New `client_type` column, `NOT NULL DEFAULT 'api'`.
- Backfill: `UPDATE chats SET client_type = 'ui'`.

**SQL query** — `InsertChat` now includes `client_type`.

**SDK** — `ChatClientType` type added; `ClientType` field added to both
`CreateChatRequest` (optional, defaults server-side to `api`) and `Chat`
response.

**Handler** — `postChats` maps the request field (defaulting to `api`)
and passes it through `chatd.CreateOptions`.

**Sub-agent** — Child chats inherit their parent's `client_type`.

**db2sdk** — Maps the database value to the SDK type.

### Decision log
- Default is `api` (not `ui`) so existing API integrations get the
correct value without code changes.
- Backfill sets existing rows to `ui` per requirement.
- Child chats inherit `client_type` from parent rather than defaulting.
</details>
This commit is contained in:
Dean Sheather
2026-04-16 23:57:05 +10:00
committed by GitHub
parent b9bc0ad6df
commit 3452ab3166
40 changed files with 375 additions and 47 deletions
+1
View File
@@ -149,6 +149,7 @@ func seedWaitingChat(
chat, err := db.InsertChat(ctx, database.InsertChatParams{
OrganizationID: orgID,
Status: database.ChatStatusWaiting,
ClientType: database.ChatClientTypeUi,
OwnerID: user.ID,
LastModelConfigID: model.ID,
Title: title,
@@ -122,6 +122,7 @@ func TestResolveUsageLimitStatus_OrgScoped(t *testing.T) {
LastModelConfigID: modelCfgID,
Title: "test chat",
Status: database.ChatStatusWaiting,
ClientType: database.ChatClientTypeUi,
MCPServerIDs: []uuid.UUID{},
})
require.NoError(t, err)