Skip to content

Plan in-app AI chat and Fix It assistant #2334

Description

@ejsmith

Goal

Add an in-app AI assistant for Exceptionless that lets users ask project questions in plain English and powers a Fix It / Explain button on events and stacks.

The in-app assistant should reuse the same core capabilities as the hosted MCP server, but it should be implemented as a first-party backend feature rather than calling MCP over HTTP from the app.

Product rules

  • AI is available only on selected paid plans.
  • Usage is token-based because provider billing is token-based.
  • Start with included monthly token budgets only.
  • Do not support overage billing in v1.
  • Track provider cost internally from day one.
  • Start read-only; any write actions must require explicit user confirmation.

Initial plan fields:

  • ai_enabled
  • ai_monthly_token_limit
  • ai_max_tokens_per_request
  • ai_max_tool_calls_per_request
  • ai_max_context_bytes
  • ai_allowed_models
  • ai_overage_enabled = false

Phase 1: Shared AI tool layer

Extract reusable backend tool logic so MCP and in-app AI use the same permission checks, validation, result shaping, and truncation behavior.

Suggested services:

  • AiToolCatalog
  • AiToolExecutor
  • AiContextBuilder
  • AiUsageTracker
  • AiPlanLimitService

The in-app chat should call shared internal services directly. It should not call /mcp over HTTP.

Phase 2: Usage metering and limits

Add persistent usage tracking per organization.

Track:

  • organization id
  • user id
  • operation: chat, fix_it, explain_event, explain_stack
  • model
  • input tokens
  • output tokens
  • total tokens
  • estimated provider cost
  • created date / month bucket

Enforce before and during requests:

  • plan allows AI
  • monthly token budget remaining
  • per-request max token cap
  • max tool calls
  • max context size

Use a reservation or capped request budget so a single request cannot materially overspend the remaining monthly allowance.

Phase 3: Backend chat API

Add API endpoints such as:

  • POST /api/v2/ai/conversations
  • GET /api/v2/ai/conversations
  • GET /api/v2/ai/conversations/{id}
  • POST /api/v2/ai/conversations/{id}/messages
  • optional streaming endpoint for assistant responses

The backend owns:

  • permission checks
  • plan checks
  • usage reservation
  • model calls
  • tool calls
  • persisted conversation history

Phase 4: Chat UI

Add a project-scoped AI chat surface in the app.

Potential entry points:

  • Account AI Tools page
  • project settings
  • client setup page
  • profile menu
  • later: sidebar/global command menu

UI should show:

  • current project / organization context
  • token usage this month
  • remaining token budget
  • limit reached state
  • conversation history

Phase 5: Fix It / Explain buttons

Add Fix It / Explain buttons on stack and event detail pages.

Clicking starts a conversation with preloaded context:

  • project
  • stack/event id
  • stack trace
  • request info
  • environment
  • recent occurrences
  • version/release info if available
  • related stacks/events if useful

Assistant response should be structured:

  • likely cause
  • evidence
  • suggested fix
  • assumptions
  • next debugging steps
  • related Exceptionless links

Phase 6: Confirmed write actions later

After read-only chat is useful, add confirmed write actions:

  • mark fixed in version
  • snooze
  • mark future events critical
  • add reference link

The assistant may propose an action, but the UI should execute it only after explicit user confirmation. All write actions should be audited.

Phase 7: Overage billing later

After real usage data exists, add pay-as-you-go.

Add:

  • ai_overage_enabled
  • ai_monthly_spend_limit_cents
  • ai_overage_price_per_million_tokens
  • internal provider cost tracking
  • markup calculation

User options:

  • stop at included token limit
  • allow overage up to a monthly cap

Recommended first implementation slice

Start with foundation work only:

  1. Add plan AI limit fields.
  2. Add AI usage tracking.
  3. Add backend limit enforcement service.
  4. Add provider abstraction, with model calls behind config/feature flag.
  5. Keep the first slice read-only.
  6. Add minimal admin/system visibility for usage and limits.

A later PR can add the first user-facing read-only chat and Fix It experience.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions