[kimi] Add /api/matrix/bark endpoint — HTTP fallback for bark messages (#675) #737

Merged
kimi merged 1 commits from kimi/issue-675 into main 2026-03-21 14:32:05 +00:00
Collaborator

Fixes #675

Summary

This PR adds the POST /api/matrix/bark endpoint as an HTTP fallback for bark messages when WebSocket is unavailable.

Changes

New Endpoint: POST /api/matrix/bark

  • Accepts JSON {text: str, visitor_id: str}
  • Returns JSON bark message in produce_bark() format
  • Uses existing _generate_bark() for response generation
  • Rate-limited to 1 request per 3 seconds per visitor_id
  • Returns 429 with Retry-After header if rate limited
  • Returns 422 for missing/invalid fields
  • Graceful fallback on LLM errors

Implementation Details

  • Added BarkRequest Pydantic model for request validation
  • Added in-memory rate limiting using _bark_last_request dict
  • Response follows the produce_bark() format from infrastructure.presence

Tests Added

  • test_bark_endpoint_requires_text - validates text is required
  • test_bark_endpoint_requires_visitor_id - validates visitor_id is required
  • test_bark_endpoint_returns_bark_format - checks produce_bark format
  • test_bark_endpoint_uses_generate_bark - verifies bark generation
  • test_bark_endpoint_rate_limit_blocks_second_request - rate limiting
  • test_bark_endpoint_rate_limit_per_visitor - per-visitor isolation
  • test_bark_endpoint_rate_limit_retry_after_header - Retry-After header
  • test_bark_endpoint_graceful_fallback_on_error - error handling
  • test_bark_endpoint_strips_whitespace - input sanitization
  • test_bark_endpoint_response_truncation - 280 char truncation

Verification

  • tox -e format
  • tox -e unit (2501 passed, 1 skipped) ✓
  • tox -e lint
Fixes #675 ## Summary This PR adds the POST `/api/matrix/bark` endpoint as an HTTP fallback for bark messages when WebSocket is unavailable. ## Changes ### New Endpoint: POST /api/matrix/bark - Accepts JSON `{text: str, visitor_id: str}` - Returns JSON bark message in `produce_bark()` format - Uses existing `_generate_bark()` for response generation - Rate-limited to 1 request per 3 seconds per visitor_id - Returns 429 with `Retry-After` header if rate limited - Returns 422 for missing/invalid fields - Graceful fallback on LLM errors ### Implementation Details - Added `BarkRequest` Pydantic model for request validation - Added in-memory rate limiting using `_bark_last_request` dict - Response follows the `produce_bark()` format from `infrastructure.presence` ### Tests Added - `test_bark_endpoint_requires_text` - validates text is required - `test_bark_endpoint_requires_visitor_id` - validates visitor_id is required - `test_bark_endpoint_returns_bark_format` - checks produce_bark format - `test_bark_endpoint_uses_generate_bark` - verifies bark generation - `test_bark_endpoint_rate_limit_blocks_second_request` - rate limiting - `test_bark_endpoint_rate_limit_per_visitor` - per-visitor isolation - `test_bark_endpoint_rate_limit_retry_after_header` - Retry-After header - `test_bark_endpoint_graceful_fallback_on_error` - error handling - `test_bark_endpoint_strips_whitespace` - input sanitization - `test_bark_endpoint_response_truncation` - 280 char truncation ## Verification - `tox -e format` ✓ - `tox -e unit` (2501 passed, 1 skipped) ✓ - `tox -e lint` ✓
kimi added 1 commit 2026-03-21 14:31:31 +00:00
feat: add /api/matrix/bark endpoint — HTTP fallback for bark messages
Some checks failed
Tests / lint (pull_request) Has been cancelled
Tests / test (pull_request) Has been cancelled
f92da1d20c
Adds POST /api/matrix/bark endpoint that accepts a visitor message and
returns Timmy's bark response. This is the HTTP fallback for when WebSocket
isn't available.

Features:
- Accepts JSON {text: str, visitor_id: str}
- Returns JSON bark message in produce_bark() format
- Uses existing _generate_bark() for response generation
- Rate-limited to 1 request per 3 seconds per visitor_id
- Returns 429 with Retry-After header if rate limited
- Graceful fallback on LLM errors

Refs #675
kimi merged commit 2a7b6d5708 into main 2026-03-21 14:32:05 +00:00
kimi deleted branch kimi/issue-675 2026-03-21 14:32:05 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Rockachopa/Timmy-time-dashboard#737