mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-05 15:09:42 +02:00
The mic button previously needed a Deepgram API key, or fell back to the browser's Web Speech engine. It can now transcribe through the same speech-to-text service Claude Code's own /voice mode uses, so anyone signed in to Claude Code on the server gets dictation with no third-party account. Claude Code's voice mode cannot be driven directly: it opens the HOST's microphone (sox/arecord), and the CLI runs in a headless tmux pane while the human is in a browser somewhere else. So capture stays in the browser and only the transcription backend is borrowed. Audio goes browser -> Codeman -> Anthropic. The OAuth token never reaches the page: the browser sends PCM16 (16 kHz mono, produced by an AudioWorklet since MediaRecorder cannot emit raw PCM) and receives text. - GET /api/voice/status reports readiness and never the token - GET /ws/voice/stream relays one dictation, with the same Host/Origin upgrade guard as the terminal socket, plus caps on concurrency, stream length and frame size - credentials are read-only: Codeman never refreshes them, since a refresh rotates the refresh token and could sign the user out of their own CLI - claudeVoiceEnabled (synced, default OFF) gates the whole server side - voiceSettings.provider picks auto/claude/deepgram/webspeech; auto prefers Claude, then a configured Deepgram key, then the browser Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
29 lines
1.5 KiB
TypeScript
29 lines
1.5 KiB
TypeScript
/**
|
|
* @fileoverview Barrel export for all route modules.
|
|
*/
|
|
|
|
export { registerPushRoutes } from './push-routes.js';
|
|
export { registerTeamRoutes } from './team-routes.js';
|
|
export { registerMuxRoutes } from './mux-routes.js';
|
|
export { registerFileRoutes } from './file-routes.js';
|
|
export { registerScheduledRoutes } from './scheduled-routes.js';
|
|
export { registerCronRoutes } from './cron-routes.js';
|
|
export { registerSystemRoutes } from './system-routes.js';
|
|
export { registerHookEventRoutes } from './hook-event-routes.js';
|
|
export { registerApprovalRoutes } from './approval-routes.js';
|
|
export { registerReadMyMindRoutes } from './readmymind-routes.js';
|
|
export { registerStatusTelemetryRoutes } from './status-telemetry-routes.js';
|
|
export { registerCaseRoutes } from './case-routes.js';
|
|
export { registerSessionRoutes } from './session-routes.js';
|
|
export { registerRespawnRoutes } from './respawn-routes.js';
|
|
export { registerRalphRoutes } from './ralph-routes.js';
|
|
export { registerPlanRoutes } from './plan-routes.js';
|
|
export { registerOrchestratorRoutes } from './orchestrator-routes.js';
|
|
export { registerClipboardRoutes } from './clipboard-routes.js';
|
|
export { registerSearchRoutes } from './search-routes.js';
|
|
export { registerMeRoutes } from './me-routes.js';
|
|
export { registerAdminRoutes } from './admin-routes.js';
|
|
export { registerWsRoutes } from './ws-routes.js';
|
|
export { registerVoiceRoutes } from './voice-routes.js';
|
|
export { registerWebviewRoutes, tryWebviewRefererFallback } from './webview-routes.js';
|