feat(KB-621): add AI title summarization feature

- Add core AI summarization service with model selection hierarchy
- Modify task store to support title generation callback pattern
- Add POST /api/ai/summarize-title endpoint with rate limiting
- Wire up summarization in dashboard task creation flow
- Add AI Summarization settings UI section in dashboard
- Add comprehensive tests for summarization service and API
- Document auto-summarization settings in AGENTS.md
This commit is contained in:
gsxdsm
2026-03-31 18:59:02 -07:00
parent 48dfdb3fa8
commit 9490792afd
12 changed files with 1240 additions and 15 deletions

View File

@@ -393,6 +393,45 @@ Directory for backup files, relative to the project root. The directory is creat
- Must be a relative path (no leading `/` or `\`)
- Must not contain parent directory traversal (`..`)
### `autoSummarizeTitles` (default: `false`)
When enabled, tasks created without titles but with descriptions longer than 140 characters will automatically receive an AI-generated title (max 60 characters).
**How it works:**
- When a task is created without a title and the description exceeds 140 characters, the system calls the AI summarization service
- The AI generates a concise title (≤60 characters) that captures the essence of the task
- The generated title is stored in the task and appears in the PROMPT.md heading
- If the AI service is unavailable or returns an error, the task is still created without a title (no blocking)
**Configuration:**
```json
{
"settings": {
"autoSummarizeTitles": true,
"titleSummarizerProvider": "anthropic",
"titleSummarizerModelId": "claude-sonnet-4-5"
}
}
```
### `titleSummarizerProvider` (optional)
AI model provider for title summarization when `autoSummarizeTitles` is enabled. Must be set together with `titleSummarizerModelId`.
**Model selection hierarchy:**
When generating titles, the system uses the first available model from this priority list:
1. `titleSummarizerProvider` + `titleSummarizerModelId` (if both configured)
2. `planningProvider` + `planningModelId` (if both configured)
3. `defaultProvider` + `defaultModelId` (if both configured)
4. Automatic model resolution (fallback)
### `titleSummarizerModelId` (optional)
AI model ID for title summarization when `autoSummarizeTitles` is enabled. Must be set together with `titleSummarizerProvider`.
**Rate limiting:**
The `/api/ai/summarize-title` endpoint is rate-limited to 10 requests per hour per IP to prevent abuse.
### CLI Commands
Manual backup operations are available via the CLI: