mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add chat and chat_files cleanup to dbpurge (#23833)
Fixes https://github.com/coder/coder/issues/23910 Adds periodic cleanup of chats and chat files to the dbpurge background goroutine, with a configurable retention period exposed in the Agent settings UI. > 🤖 Written by a Coder Agent. Reviewed by a human.
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Conversation Data Retention
|
||||
|
||||
Coder Agents automatically cleans up old conversation data to manage database
|
||||
growth. Archived conversations and their associated files are periodically
|
||||
purged based on a configurable retention period.
|
||||
|
||||
## How it works
|
||||
|
||||
A background process runs approximately every 10 minutes to remove expired
|
||||
conversation data. Only archived conversations are eligible for deletion —
|
||||
active (non-archived) conversations are never purged.
|
||||
|
||||
When an archived conversation exceeds the retention period, it is deleted along
|
||||
with its messages, diff statuses, and queued messages via cascade. Orphaned
|
||||
files (not referenced by any active or recently-archived conversation) are also
|
||||
deleted. Both operations run in batches of 1,000 rows per cycle.
|
||||
|
||||
## Configuration
|
||||
|
||||
Navigate to **Deployment Settings** > **Agents** > **Behavior** to configure
|
||||
the conversation retention period. The default is 30 days. Use the toggle to
|
||||
disable retention entirely.
|
||||
|
||||
The retention period is stored as the `agents_chat_retention_days` key in the
|
||||
`site_configs` table and can also be managed via the API at
|
||||
`/api/experimental/chats/config/retention-days`.
|
||||
|
||||
## What gets deleted
|
||||
|
||||
| Data | Condition | Cascade |
|
||||
|------------------------|------------------------------------------------------------------------------------------------|---------------------------------------------------------------|
|
||||
| Archived conversations | Archived longer than retention period | Messages, diff statuses, queued messages deleted via CASCADE. |
|
||||
| Conversation files | Older than retention period AND not referenced by any active or recently-archived conversation | — |
|
||||
|
||||
## Unarchive safety
|
||||
|
||||
If a user unarchives a conversation whose files were purged, stale file
|
||||
references are automatically cleaned up by FK cascades. The conversation
|
||||
remains usable but previously attached files are no longer available.
|
||||
|
||||
## Related links
|
||||
|
||||
- [Coder Agents](./index.md)
|
||||
- [Data Retention](../../admin/setup/data-retention.md)
|
||||
@@ -1264,6 +1264,12 @@
|
||||
"description": "Programmatic access to Coder Agents via the experimental Chats API",
|
||||
"path": "./ai-coder/agents/chats-api.md",
|
||||
"state": ["early access"]
|
||||
},
|
||||
{
|
||||
"title": "Chat Data Retention",
|
||||
"description": "Automatic cleanup of old chat data",
|
||||
"path": "./ai-coder/agents/chat-retention.md",
|
||||
"state": ["early access"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Generated
+28
@@ -2025,6 +2025,20 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in
|
||||
|----------------------|---------|----------|--------------|-------------|
|
||||
| `acquire_batch_size` | integer | false | | |
|
||||
|
||||
## codersdk.ChatRetentionDaysResponse
|
||||
|
||||
```json
|
||||
{
|
||||
"retention_days": 0
|
||||
}
|
||||
```
|
||||
|
||||
### Properties
|
||||
|
||||
| Name | Type | Required | Restrictions | Description |
|
||||
|------------------|---------|----------|--------------|-------------|
|
||||
| `retention_days` | integer | false | | |
|
||||
|
||||
## codersdk.ConnectionLatency
|
||||
|
||||
```json
|
||||
@@ -10299,6 +10313,20 @@ Restarts will only happen on weekdays in this list on weeks which line up with W
|
||||
| `logo_url` | string | false | | |
|
||||
| `service_banner` | [codersdk.BannerConfig](#codersdkbannerconfig) | false | | Deprecated: ServiceBanner has been replaced by AnnouncementBanners. |
|
||||
|
||||
## codersdk.UpdateChatRetentionDaysRequest
|
||||
|
||||
```json
|
||||
{
|
||||
"retention_days": 0
|
||||
}
|
||||
```
|
||||
|
||||
### Properties
|
||||
|
||||
| Name | Type | Required | Restrictions | Description |
|
||||
|------------------|---------|----------|--------------|-------------|
|
||||
| `retention_days` | integer | false | | |
|
||||
|
||||
## codersdk.UpdateCheckResponse
|
||||
|
||||
```json
|
||||
|
||||
Reference in New Issue
Block a user