VOICE-2: /architect/transcribe/health probe endpoint #774
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
Depends on
#775 VOICE-3: Composer mic toggle + live partials
charles/claude-hooks
#773 VOICE-1: /architect/transcribe server proxy + speaches integration
charles/claude-hooks
Reference
charles/claude-hooks#774
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
As an operator, I want a small
/architect/transcribe/healthprobe the dashboard and the composer can call to find out whether speaches is enabled, reachable, and which model + languages it's serving — so the mic button can hide itself gracefully when STT is off and the settings group can render a live status pill.This is the carve-out half of the spec's P3 section. Splitting it from the settings-group story keeps the composer (VOICE-3) unblocked while the SVC-3 dependency (#752) ripens.
Acceptance criteria
GET /architect/transcribe/healthreturns{ enabled: boolean, reachable: boolean, model: string, default_language: string, allowed_languages: string[] }.reachablecomes from a cached HEAD/GET to${transcribe_url}/v1/models(or/healthif speaches exposes one) — cache 30 s to avoid hammering the upstream.?refresh=1query param bypasses the cache (used later by the "Test connection" button in the settings group).getSpeechConfig(). Noservice.jsonreads./architect/*.speech.enabled === false, the endpoint still answers 200 withenabled: false, reachable: falseso the composer can decide what to do; do not 503 here (the gate semantics are already onPOST /architect/transcribe).reachable: falsewith the upstream's status code surfaced in a siblinglast_errorfield; never throw.Tests
enabled=false→reachable=false, no upstream call made.?refresh=1does.reachable=false, last_error: "timeout", returns 200.Out of scope
References
specs/workspace-chat-voice-input.md— full spec (P3 section, "Health probe" sub-block).Dependencies
getSpeechConfig()and the speaches base URL plumbing land in VOICE-1 (#773). Native dep edge written against VOICE-1 (#773)'s issue number.