Roo-Code/src/activate/handleUri.ts
Roo Code f33d9ba2bd feat: Add Speech-to-Text dictation capability (WIP)
- Added STT configuration to global and provider settings
- Created SttService with singleton pattern for managing STT operations
- Implemented browser-based audio capture page with WebSocket streaming
- Added microphone button to ChatTextArea component
- Created capture server for hosting browser capture page
- Integrated with VS Code URI handler for transcript callbacks
- Added STT settings UI components in settings panel
- Created comprehensive test suite for STT functionality
- Fixed ESLint warnings in SttSettings component

Note: Implementation pending security review for API key handling.
Waiting for guidance on secure token exchange mechanism.

Related to #8852
2025-10-26 19:13:26 +00:00

72 lines
1.6 KiB
TypeScript

import * as vscode from "vscode"
import { CloudService } from "@roo-code/cloud"
import { ClineProvider } from "../core/webview/ClineProvider"
export const handleUri = async (uri: vscode.Uri) => {
const path = uri.path
const query = new URLSearchParams(uri.query.replace(/\+/g, "%2B"))
const visibleProvider = ClineProvider.getVisibleInstance()
if (!visibleProvider) {
return
}
switch (path) {
case "/glama": {
const code = query.get("code")
if (code) {
await visibleProvider.handleGlamaCallback(code)
}
break
}
case "/openrouter": {
const code = query.get("code")
if (code) {
await visibleProvider.handleOpenRouterCallback(code)
}
break
}
case "/requesty": {
const code = query.get("code")
if (code) {
await visibleProvider.handleRequestyCallback(code)
}
break
}
case "/auth/clerk/callback": {
const code = query.get("code")
const state = query.get("state")
const organizationId = query.get("organizationId")
await CloudService.instance.handleAuthCallback(
code,
state,
organizationId === "null" ? null : organizationId,
)
break
}
case "/stt/transcript": {
const transcript = query.get("transcript")
const error = query.get("error")
if (error) {
// Send error to webview
await visibleProvider.postMessageToWebview({
type: "sttError",
error: decodeURIComponent(error),
})
} else if (transcript) {
// Send transcript to webview
await visibleProvider.postMessageToWebview({
type: "sttTranscript",
text: decodeURIComponent(transcript),
})
}
break
}
default:
break
}
}