@sudocode-ai/local-server 0.1.17 → 0.1.18-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/better-sqlite3-loader.d.ts +9 -0
  2. package/dist/better-sqlite3-loader.d.ts.map +1 -0
  3. package/dist/better-sqlite3-loader.js +24 -0
  4. package/dist/better-sqlite3-loader.js.map +1 -0
  5. package/dist/execution/executors/agent-executor-wrapper.d.ts +6 -0
  6. package/dist/execution/executors/agent-executor-wrapper.d.ts.map +1 -1
  7. package/dist/execution/executors/agent-executor-wrapper.js +75 -4
  8. package/dist/execution/executors/agent-executor-wrapper.js.map +1 -1
  9. package/dist/execution/executors/executor-factory.d.ts +9 -6
  10. package/dist/execution/executors/executor-factory.d.ts.map +1 -1
  11. package/dist/execution/executors/executor-factory.js +6 -5
  12. package/dist/execution/executors/executor-factory.js.map +1 -1
  13. package/dist/execution/worktree/config.js +1 -1
  14. package/dist/execution/worktree/config.js.map +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/public/assets/index-B1p5HV93.css +1 -0
  19. package/dist/public/assets/index-qqIsBBjJ.js +3836 -0
  20. package/dist/public/assets/index-qqIsBBjJ.js.map +1 -0
  21. package/dist/public/assets/ort-wasm-simd-threaded.jsep-B0T3yYHD.wasm +0 -0
  22. package/dist/public/index.html +2 -2
  23. package/dist/public/kokoro-test.html +197 -0
  24. package/dist/routes/config.d.ts.map +1 -1
  25. package/dist/routes/config.js +39 -0
  26. package/dist/routes/config.js.map +1 -1
  27. package/dist/routes/executions.d.ts.map +1 -1
  28. package/dist/routes/executions.js +9 -0
  29. package/dist/routes/executions.js.map +1 -1
  30. package/dist/routes/voice.d.ts +12 -0
  31. package/dist/routes/voice.d.ts.map +1 -0
  32. package/dist/routes/voice.js +387 -0
  33. package/dist/routes/voice.js.map +1 -0
  34. package/dist/routes/workflows.d.ts.map +1 -1
  35. package/dist/routes/workflows.js +2 -1
  36. package/dist/routes/workflows.js.map +1 -1
  37. package/dist/services/db.d.ts +1 -1
  38. package/dist/services/db.d.ts.map +1 -1
  39. package/dist/services/db.js +2 -2
  40. package/dist/services/db.js.map +1 -1
  41. package/dist/services/execution-service.d.ts +8 -0
  42. package/dist/services/execution-service.d.ts.map +1 -1
  43. package/dist/services/execution-service.js +27 -2
  44. package/dist/services/execution-service.js.map +1 -1
  45. package/dist/services/narration-service.d.ts +304 -0
  46. package/dist/services/narration-service.d.ts.map +1 -0
  47. package/dist/services/narration-service.js +729 -0
  48. package/dist/services/narration-service.js.map +1 -0
  49. package/dist/services/stt-providers/index.d.ts +21 -0
  50. package/dist/services/stt-providers/index.d.ts.map +1 -0
  51. package/dist/services/stt-providers/index.js +32 -0
  52. package/dist/services/stt-providers/index.js.map +1 -0
  53. package/dist/services/stt-providers/openai-whisper.d.ts +66 -0
  54. package/dist/services/stt-providers/openai-whisper.d.ts.map +1 -0
  55. package/dist/services/stt-providers/openai-whisper.js +137 -0
  56. package/dist/services/stt-providers/openai-whisper.js.map +1 -0
  57. package/dist/services/stt-providers/whisper-local.d.ts +64 -0
  58. package/dist/services/stt-providers/whisper-local.d.ts.map +1 -0
  59. package/dist/services/stt-providers/whisper-local.js +166 -0
  60. package/dist/services/stt-providers/whisper-local.js.map +1 -0
  61. package/dist/services/stt-service.d.ts +160 -0
  62. package/dist/services/stt-service.d.ts.map +1 -0
  63. package/dist/services/stt-service.js +246 -0
  64. package/dist/services/stt-service.js.map +1 -0
  65. package/dist/services/tts-providers/browser-tts.d.ts +64 -0
  66. package/dist/services/tts-providers/browser-tts.d.ts.map +1 -0
  67. package/dist/services/tts-providers/browser-tts.js +89 -0
  68. package/dist/services/tts-providers/browser-tts.js.map +1 -0
  69. package/dist/services/tts-providers/index.d.ts +20 -0
  70. package/dist/services/tts-providers/index.d.ts.map +1 -0
  71. package/dist/services/tts-providers/index.js +31 -0
  72. package/dist/services/tts-providers/index.js.map +1 -0
  73. package/dist/services/tts-service.d.ts +190 -0
  74. package/dist/services/tts-service.d.ts.map +1 -0
  75. package/dist/services/tts-service.js +296 -0
  76. package/dist/services/tts-service.js.map +1 -0
  77. package/dist/services/tts-sidecar-manager.d.ts +276 -0
  78. package/dist/services/tts-sidecar-manager.d.ts.map +1 -0
  79. package/dist/services/tts-sidecar-manager.js +665 -0
  80. package/dist/services/tts-sidecar-manager.js.map +1 -0
  81. package/dist/services/websocket.d.ts +31 -1
  82. package/dist/services/websocket.d.ts.map +1 -1
  83. package/dist/services/websocket.js +149 -0
  84. package/dist/services/websocket.js.map +1 -1
  85. package/dist/services/worktree-sync-service.d.ts +17 -2
  86. package/dist/services/worktree-sync-service.d.ts.map +1 -1
  87. package/dist/services/worktree-sync-service.js +103 -6
  88. package/dist/services/worktree-sync-service.js.map +1 -1
  89. package/dist/utils/voice-config.d.ts +26 -0
  90. package/dist/utils/voice-config.d.ts.map +1 -0
  91. package/dist/utils/voice-config.js +48 -0
  92. package/dist/utils/voice-config.js.map +1 -0
  93. package/dist/workers/execution-worker.js +12 -4
  94. package/dist/workers/execution-worker.js.map +1 -1
  95. package/dist/workflow/base-workflow-engine.d.ts +3 -1
  96. package/dist/workflow/base-workflow-engine.d.ts.map +1 -1
  97. package/dist/workflow/base-workflow-engine.js.map +1 -1
  98. package/dist/workflow/engines/orchestrator-engine.d.ts +5 -1
  99. package/dist/workflow/engines/orchestrator-engine.d.ts.map +1 -1
  100. package/dist/workflow/engines/orchestrator-engine.js +4 -1
  101. package/dist/workflow/engines/orchestrator-engine.js.map +1 -1
  102. package/dist/workflow/engines/sequential-engine.d.ts +9 -2
  103. package/dist/workflow/engines/sequential-engine.d.ts.map +1 -1
  104. package/dist/workflow/engines/sequential-engine.js +102 -22
  105. package/dist/workflow/engines/sequential-engine.js.map +1 -1
  106. package/dist/workflow/workflow-engine.d.ts +8 -1
  107. package/dist/workflow/workflow-engine.d.ts.map +1 -1
  108. package/package.json +13 -4
  109. package/dist/public/assets/index-D4AKx6EO.css +0 -1
  110. package/dist/public/assets/index-DorQqwGV.js +0 -927
  111. package/dist/public/assets/index-DorQqwGV.js.map +0 -1
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Speech-to-Text Service
3
+ *
4
+ * Provides a pluggable STT abstraction with multiple provider support.
5
+ * Handles provider selection, fallback, and availability checking.
6
+ */
7
+ import type { STTProvider as STTProviderType, STTOptions, TranscriptionResult, VoiceSettingsConfig } from "@sudocode-ai/types/voice";
8
+ /**
9
+ * Interface for STT providers
10
+ */
11
+ export interface STTProvider {
12
+ /** Provider name */
13
+ readonly name: STTProviderType;
14
+ /**
15
+ * Transcribe audio buffer to text
16
+ *
17
+ * @param audio - Audio buffer to transcribe
18
+ * @param options - Optional transcription options
19
+ * @returns Promise resolving to transcription result
20
+ */
21
+ transcribe(audio: Buffer, options?: STTOptions): Promise<TranscriptionResult>;
22
+ /**
23
+ * Check if this provider is currently available
24
+ * (e.g., service is running, API key is configured)
25
+ *
26
+ * @returns Promise resolving to true if provider is available
27
+ */
28
+ isAvailable(): Promise<boolean>;
29
+ }
30
+ /**
31
+ * Configuration for the STT service
32
+ */
33
+ export interface STTServiceConfig {
34
+ /** Default provider to use when none specified */
35
+ defaultProvider: STTProviderType;
36
+ /** Whisper server URL for local provider */
37
+ whisperUrl: string;
38
+ /** Whisper model to use */
39
+ whisperModel: string;
40
+ }
41
+ /**
42
+ * Get STT configuration from project config.
43
+ *
44
+ * All settings come from .sudocode/config.json voice.stt.* with defaults:
45
+ * - provider: "whisper-local"
46
+ * - whisperUrl: "http://localhost:2022/v1"
47
+ * - whisperModel: "base"
48
+ *
49
+ * @param projectVoiceConfig - Optional project voice settings from config.json
50
+ */
51
+ export declare function getSTTConfig(projectVoiceConfig?: VoiceSettingsConfig): STTServiceConfig;
52
+ /**
53
+ * Error thrown when no STT providers are available
54
+ */
55
+ export declare class NoSTTProviderError extends Error {
56
+ constructor();
57
+ }
58
+ /**
59
+ * Error thrown when a specific provider is not found
60
+ */
61
+ export declare class STTProviderNotFoundError extends Error {
62
+ constructor(providerName: string);
63
+ }
64
+ /**
65
+ * Error thrown when transcription fails
66
+ */
67
+ export declare class TranscriptionError extends Error {
68
+ readonly provider: string;
69
+ readonly cause?: Error | undefined;
70
+ constructor(message: string, provider: string, cause?: Error | undefined);
71
+ }
72
+ /**
73
+ * Speech-to-Text Service
74
+ *
75
+ * Manages multiple STT providers with automatic fallback support.
76
+ */
77
+ export declare class STTService {
78
+ private providers;
79
+ private config;
80
+ private availabilityCache;
81
+ private availabilityCacheTime;
82
+ private readonly CACHE_TTL_MS;
83
+ constructor(config?: Partial<STTServiceConfig>);
84
+ /**
85
+ * Register an STT provider
86
+ *
87
+ * @param provider - The provider to register
88
+ */
89
+ registerProvider(provider: STTProvider): void;
90
+ /**
91
+ * Unregister an STT provider
92
+ *
93
+ * @param providerName - Name of the provider to unregister
94
+ */
95
+ unregisterProvider(providerName: STTProviderType): void;
96
+ /**
97
+ * Get a provider by name
98
+ *
99
+ * @param providerName - Name of the provider
100
+ * @returns The provider if found
101
+ */
102
+ getProvider(providerName: STTProviderType): STTProvider | undefined;
103
+ /**
104
+ * Check if a provider's availability is cached and still valid
105
+ */
106
+ private isCacheValid;
107
+ /**
108
+ * Check if a provider is available (with caching)
109
+ *
110
+ * @param providerName - Name of the provider to check
111
+ * @returns Promise resolving to true if available
112
+ */
113
+ isProviderAvailable(providerName: STTProviderType): Promise<boolean>;
114
+ /**
115
+ * Get all available providers (those that are registered and currently available)
116
+ *
117
+ * @returns Promise resolving to array of available provider names
118
+ */
119
+ getAvailableProviders(): Promise<STTProviderType[]>;
120
+ /**
121
+ * Get the default provider name from configuration
122
+ *
123
+ * @returns The default provider name
124
+ */
125
+ getDefaultProvider(): STTProviderType;
126
+ /**
127
+ * Get the configuration
128
+ *
129
+ * @returns The current configuration
130
+ */
131
+ getConfig(): STTServiceConfig;
132
+ /**
133
+ * Clear the availability cache
134
+ */
135
+ clearAvailabilityCache(): void;
136
+ /**
137
+ * Transcribe audio using the specified or default provider
138
+ *
139
+ * Falls back to other available providers if the preferred one fails.
140
+ *
141
+ * @param audio - Audio buffer to transcribe
142
+ * @param options - Optional transcription options (can include preferred provider)
143
+ * @returns Promise resolving to transcription result
144
+ * @throws {NoSTTProviderError} If no providers are available
145
+ * @throws {TranscriptionError} If transcription fails on all providers
146
+ */
147
+ transcribe(audio: Buffer, options?: STTOptions): Promise<TranscriptionResult>;
148
+ }
149
+ /**
150
+ * Get or create the global STT service instance
151
+ *
152
+ * @param config - Optional configuration override
153
+ * @returns The STT service instance
154
+ */
155
+ export declare function getSTTService(config?: Partial<STTServiceConfig>): STTService;
156
+ /**
157
+ * Reset the global STT service instance (for testing)
158
+ */
159
+ export declare function resetSTTService(): void;
160
+ //# sourceMappingURL=stt-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stt-service.d.ts","sourceRoot":"","sources":["../../src/services/stt-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAC9B,UAAU,EACV,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE9E;;;;;OAKG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,eAAe,EAAE,eAAe,CAAC;IACjC,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,kBAAkB,CAAC,EAAE,mBAAmB,GACvC,gBAAgB,CAQlB;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;;CAK5C;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,YAAY,EAAE,MAAM;CAIjC;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,QAAQ,EAAE,MAAM;aAChB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,qBAAqB,CAA2C;IACxE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAI9C;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAO7C;;;;OAIG;IACH,kBAAkB,CAAC,YAAY,EAAE,eAAe,GAAG,IAAI;IAMvD;;;;;OAKG;IACH,WAAW,CAAC,YAAY,EAAE,eAAe,GAAG,WAAW,GAAG,SAAS;IAInE;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;OAKG;IACG,mBAAmB,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB1E;;;;OAIG;IACG,qBAAqB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAYzD;;;;OAIG;IACH,kBAAkB,IAAI,eAAe;IAIrC;;;;OAIG;IACH,SAAS,IAAI,gBAAgB;IAI7B;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAK9B;;;;;;;;;;OAUG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,mBAAmB,CAAC;CA+ChC;AAQD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAK5E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Speech-to-Text Service
3
+ *
4
+ * Provides a pluggable STT abstraction with multiple provider support.
5
+ * Handles provider selection, fallback, and availability checking.
6
+ */
7
+ /**
8
+ * Get STT configuration from project config.
9
+ *
10
+ * All settings come from .sudocode/config.json voice.stt.* with defaults:
11
+ * - provider: "whisper-local"
12
+ * - whisperUrl: "http://localhost:2022/v1"
13
+ * - whisperModel: "base"
14
+ *
15
+ * @param projectVoiceConfig - Optional project voice settings from config.json
16
+ */
17
+ export function getSTTConfig(projectVoiceConfig) {
18
+ const sttSettings = projectVoiceConfig?.stt;
19
+ return {
20
+ defaultProvider: sttSettings?.provider || "whisper-local",
21
+ whisperUrl: sttSettings?.whisperUrl || "http://localhost:2022/v1",
22
+ whisperModel: sttSettings?.whisperModel || "base",
23
+ };
24
+ }
25
+ /**
26
+ * Error thrown when no STT providers are available
27
+ */
28
+ export class NoSTTProviderError extends Error {
29
+ constructor() {
30
+ super("No STT providers are available");
31
+ this.name = "NoSTTProviderError";
32
+ }
33
+ }
34
+ /**
35
+ * Error thrown when a specific provider is not found
36
+ */
37
+ export class STTProviderNotFoundError extends Error {
38
+ constructor(providerName) {
39
+ super(`STT provider '${providerName}' not found`);
40
+ this.name = "STTProviderNotFoundError";
41
+ }
42
+ }
43
+ /**
44
+ * Error thrown when transcription fails
45
+ */
46
+ export class TranscriptionError extends Error {
47
+ provider;
48
+ cause;
49
+ constructor(message, provider, cause) {
50
+ super(message);
51
+ this.provider = provider;
52
+ this.cause = cause;
53
+ this.name = "TranscriptionError";
54
+ }
55
+ }
56
+ /**
57
+ * Speech-to-Text Service
58
+ *
59
+ * Manages multiple STT providers with automatic fallback support.
60
+ */
61
+ export class STTService {
62
+ providers = new Map();
63
+ config;
64
+ availabilityCache = new Map();
65
+ availabilityCacheTime = new Map();
66
+ CACHE_TTL_MS = 30000; // 30 seconds
67
+ constructor(config) {
68
+ this.config = { ...getSTTConfig(), ...config };
69
+ }
70
+ /**
71
+ * Register an STT provider
72
+ *
73
+ * @param provider - The provider to register
74
+ */
75
+ registerProvider(provider) {
76
+ this.providers.set(provider.name, provider);
77
+ // Invalidate availability cache when a new provider is registered
78
+ this.availabilityCache.delete(provider.name);
79
+ this.availabilityCacheTime.delete(provider.name);
80
+ }
81
+ /**
82
+ * Unregister an STT provider
83
+ *
84
+ * @param providerName - Name of the provider to unregister
85
+ */
86
+ unregisterProvider(providerName) {
87
+ this.providers.delete(providerName);
88
+ this.availabilityCache.delete(providerName);
89
+ this.availabilityCacheTime.delete(providerName);
90
+ }
91
+ /**
92
+ * Get a provider by name
93
+ *
94
+ * @param providerName - Name of the provider
95
+ * @returns The provider if found
96
+ */
97
+ getProvider(providerName) {
98
+ return this.providers.get(providerName);
99
+ }
100
+ /**
101
+ * Check if a provider's availability is cached and still valid
102
+ */
103
+ isCacheValid(providerName) {
104
+ const cacheTime = this.availabilityCacheTime.get(providerName);
105
+ if (!cacheTime)
106
+ return false;
107
+ return Date.now() - cacheTime < this.CACHE_TTL_MS;
108
+ }
109
+ /**
110
+ * Check if a provider is available (with caching)
111
+ *
112
+ * @param providerName - Name of the provider to check
113
+ * @returns Promise resolving to true if available
114
+ */
115
+ async isProviderAvailable(providerName) {
116
+ const provider = this.providers.get(providerName);
117
+ if (!provider)
118
+ return false;
119
+ // Check cache first
120
+ if (this.isCacheValid(providerName)) {
121
+ return this.availabilityCache.get(providerName) ?? false;
122
+ }
123
+ // Check actual availability
124
+ try {
125
+ const available = await provider.isAvailable();
126
+ this.availabilityCache.set(providerName, available);
127
+ this.availabilityCacheTime.set(providerName, Date.now());
128
+ return available;
129
+ }
130
+ catch {
131
+ this.availabilityCache.set(providerName, false);
132
+ this.availabilityCacheTime.set(providerName, Date.now());
133
+ return false;
134
+ }
135
+ }
136
+ /**
137
+ * Get all available providers (those that are registered and currently available)
138
+ *
139
+ * @returns Promise resolving to array of available provider names
140
+ */
141
+ async getAvailableProviders() {
142
+ const availableProviders = [];
143
+ for (const providerName of this.providers.keys()) {
144
+ if (await this.isProviderAvailable(providerName)) {
145
+ availableProviders.push(providerName);
146
+ }
147
+ }
148
+ return availableProviders;
149
+ }
150
+ /**
151
+ * Get the default provider name from configuration
152
+ *
153
+ * @returns The default provider name
154
+ */
155
+ getDefaultProvider() {
156
+ return this.config.defaultProvider;
157
+ }
158
+ /**
159
+ * Get the configuration
160
+ *
161
+ * @returns The current configuration
162
+ */
163
+ getConfig() {
164
+ return { ...this.config };
165
+ }
166
+ /**
167
+ * Clear the availability cache
168
+ */
169
+ clearAvailabilityCache() {
170
+ this.availabilityCache.clear();
171
+ this.availabilityCacheTime.clear();
172
+ }
173
+ /**
174
+ * Transcribe audio using the specified or default provider
175
+ *
176
+ * Falls back to other available providers if the preferred one fails.
177
+ *
178
+ * @param audio - Audio buffer to transcribe
179
+ * @param options - Optional transcription options (can include preferred provider)
180
+ * @returns Promise resolving to transcription result
181
+ * @throws {NoSTTProviderError} If no providers are available
182
+ * @throws {TranscriptionError} If transcription fails on all providers
183
+ */
184
+ async transcribe(audio, options) {
185
+ const preferredProvider = options?.provider || this.config.defaultProvider;
186
+ // Build provider order: preferred first, then others
187
+ const providerOrder = [preferredProvider];
188
+ for (const providerName of this.providers.keys()) {
189
+ if (providerName !== preferredProvider) {
190
+ providerOrder.push(providerName);
191
+ }
192
+ }
193
+ const errors = [];
194
+ for (const providerName of providerOrder) {
195
+ const provider = this.providers.get(providerName);
196
+ if (!provider)
197
+ continue;
198
+ // Check availability
199
+ if (!(await this.isProviderAvailable(providerName))) {
200
+ continue;
201
+ }
202
+ try {
203
+ const result = await provider.transcribe(audio, options);
204
+ return result;
205
+ }
206
+ catch (error) {
207
+ const err = error instanceof Error ? error : new Error(String(error));
208
+ errors.push({ provider: providerName, error: err });
209
+ // Invalidate cache for this provider since it failed
210
+ this.availabilityCache.delete(providerName);
211
+ this.availabilityCacheTime.delete(providerName);
212
+ // Continue to next provider
213
+ }
214
+ }
215
+ // If we get here, all providers failed
216
+ if (errors.length === 0) {
217
+ throw new NoSTTProviderError();
218
+ }
219
+ const lastError = errors[errors.length - 1];
220
+ throw new TranscriptionError(`Transcription failed on all providers. Last error: ${lastError.error.message}`, lastError.provider, lastError.error);
221
+ }
222
+ }
223
+ /**
224
+ * Global STT service instance
225
+ * Lazy-initialized on first use
226
+ */
227
+ let sttServiceInstance = null;
228
+ /**
229
+ * Get or create the global STT service instance
230
+ *
231
+ * @param config - Optional configuration override
232
+ * @returns The STT service instance
233
+ */
234
+ export function getSTTService(config) {
235
+ if (!sttServiceInstance) {
236
+ sttServiceInstance = new STTService(config);
237
+ }
238
+ return sttServiceInstance;
239
+ }
240
+ /**
241
+ * Reset the global STT service instance (for testing)
242
+ */
243
+ export function resetSTTService() {
244
+ sttServiceInstance = null;
245
+ }
246
+ //# sourceMappingURL=stt-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stt-service.js","sourceRoot":"","sources":["../../src/services/stt-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Browser TTS Provider
3
+ *
4
+ * A placeholder provider for browser-based TTS using the Web Speech API.
5
+ * This provider doesn't actually synthesize audio server-side - instead it
6
+ * returns the text for the client to synthesize using the Web Speech API.
7
+ *
8
+ * This approach has several advantages:
9
+ * - Zero server-side cost
10
+ * - Instant response (no audio to generate/stream)
11
+ * - Works offline (no network latency)
12
+ * - Uses system voices already installed on user's device
13
+ */
14
+ import type { TTSProvider as TTSProviderType, TTSProviderOptions, TTSProviderResult, TTSVoice } from "@sudocode-ai/types/voice";
15
+ import { type TTSProvider } from "../tts-service.js";
16
+ /**
17
+ * Configuration for the Browser TTS provider
18
+ */
19
+ export interface BrowserTTSConfig {
20
+ /** Default language code for voice listing */
21
+ defaultLanguage: string;
22
+ }
23
+ /**
24
+ * Browser TTS Provider
25
+ *
26
+ * Returns text for client-side Web Speech API synthesis.
27
+ * The actual speech synthesis happens in the browser.
28
+ */
29
+ export declare class BrowserTTSProvider implements TTSProvider {
30
+ readonly id: TTSProviderType;
31
+ readonly name: string;
32
+ private config;
33
+ constructor(config?: Partial<BrowserTTSConfig>);
34
+ /**
35
+ * Browser TTS is always available on the server side
36
+ * (actual availability depends on client browser support)
37
+ */
38
+ isAvailable(): Promise<boolean>;
39
+ /**
40
+ * Return text for client-side synthesis
41
+ *
42
+ * @param text - Text to synthesize
43
+ * @param _options - Synthesis options (used client-side)
44
+ * @returns Result with text for client synthesis
45
+ */
46
+ synthesize(text: string, _options?: TTSProviderOptions): Promise<TTSProviderResult>;
47
+ /**
48
+ * Get available voices
49
+ *
50
+ * Since voices are determined by the client's browser, we return
51
+ * a generic placeholder. The frontend should query actual voices
52
+ * from window.speechSynthesis.getVoices() directly.
53
+ */
54
+ getVoices(): Promise<TTSVoice[]>;
55
+ /**
56
+ * Get the current configuration
57
+ */
58
+ getConfig(): BrowserTTSConfig;
59
+ }
60
+ /**
61
+ * Create a new Browser TTS provider instance
62
+ */
63
+ export declare function createBrowserTTSProvider(config?: Partial<BrowserTTSConfig>): BrowserTTSProvider;
64
+ //# sourceMappingURL=browser-tts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-tts.d.ts","sourceRoot":"","sources":["../../../src/services/tts-providers/browser-tts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAC9B,kBAAkB,EAClB,iBAAiB,EACjB,QAAQ,EACT,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAa;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAA8B;IACnD,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAM9C;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAOrC;;;;;;OAMG;IACG,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,iBAAiB,CAAC;IAW7B;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IActC;;OAEG;IACH,SAAS,IAAI,gBAAgB;CAG9B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACjC,kBAAkB,CAEpB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Browser TTS Provider
3
+ *
4
+ * A placeholder provider for browser-based TTS using the Web Speech API.
5
+ * This provider doesn't actually synthesize audio server-side - instead it
6
+ * returns the text for the client to synthesize using the Web Speech API.
7
+ *
8
+ * This approach has several advantages:
9
+ * - Zero server-side cost
10
+ * - Instant response (no audio to generate/stream)
11
+ * - Works offline (no network latency)
12
+ * - Uses system voices already installed on user's device
13
+ */
14
+ /**
15
+ * Browser TTS Provider
16
+ *
17
+ * Returns text for client-side Web Speech API synthesis.
18
+ * The actual speech synthesis happens in the browser.
19
+ */
20
+ export class BrowserTTSProvider {
21
+ id = "browser";
22
+ name = "Browser (Web Speech API)";
23
+ config;
24
+ constructor(config) {
25
+ this.config = {
26
+ defaultLanguage: config?.defaultLanguage ?? "en-US",
27
+ };
28
+ }
29
+ /**
30
+ * Browser TTS is always available on the server side
31
+ * (actual availability depends on client browser support)
32
+ */
33
+ async isAvailable() {
34
+ // Browser TTS is always "available" server-side since we just
35
+ // return text for the client to handle. The client determines
36
+ // actual availability based on Web Speech API support.
37
+ return true;
38
+ }
39
+ /**
40
+ * Return text for client-side synthesis
41
+ *
42
+ * @param text - Text to synthesize
43
+ * @param _options - Synthesis options (used client-side)
44
+ * @returns Result with text for client synthesis
45
+ */
46
+ async synthesize(text, _options) {
47
+ // For browser TTS, we simply return the text.
48
+ // The client will use the Web Speech API to synthesize it.
49
+ // Options (voice, speed, pitch) are handled client-side.
50
+ return {
51
+ text,
52
+ // No audio buffer - client synthesizes
53
+ // No SSML - Web Speech API has limited SSML support
54
+ };
55
+ }
56
+ /**
57
+ * Get available voices
58
+ *
59
+ * Since voices are determined by the client's browser, we return
60
+ * a generic placeholder. The frontend should query actual voices
61
+ * from window.speechSynthesis.getVoices() directly.
62
+ */
63
+ async getVoices() {
64
+ // Return a placeholder voice indicating client-side determination
65
+ // The actual voice list is populated by the frontend from the
66
+ // browser's speechSynthesis.getVoices() API
67
+ return [
68
+ {
69
+ id: "default",
70
+ name: "System Default",
71
+ language: this.config.defaultLanguage,
72
+ provider: "browser",
73
+ },
74
+ ];
75
+ }
76
+ /**
77
+ * Get the current configuration
78
+ */
79
+ getConfig() {
80
+ return { ...this.config };
81
+ }
82
+ }
83
+ /**
84
+ * Create a new Browser TTS provider instance
85
+ */
86
+ export function createBrowserTTSProvider(config) {
87
+ return new BrowserTTSProvider(config);
88
+ }
89
+ //# sourceMappingURL=browser-tts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-tts.js","sourceRoot":"","sources":["../../../src/services/tts-providers/browser-tts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAkBH;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IACpB,EAAE,GAAoB,SAAS,CAAC;IAChC,IAAI,GAAW,0BAA0B,CAAC;IAC3C,MAAM,CAAmB;IAEjC,YAAY,MAAkC;QAC5C,IAAI,CAAC,MAAM,GAAG;YACZ,eAAe,EAAE,MAAM,EAAE,eAAe,IAAI,OAAO;SACpD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW;QACf,8DAA8D;QAC9D,8DAA8D;QAC9D,uDAAuD;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,QAA6B;QAE7B,8CAA8C;QAC9C,2DAA2D;QAC3D,yDAAyD;QACzD,OAAO;YACL,IAAI;YACJ,uCAAuC;YACvC,oDAAoD;SACrD,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS;QACb,kEAAkE;QAClE,8DAA8D;QAC9D,4CAA4C;QAC5C,OAAO;YACL;gBACE,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe;gBACrC,QAAQ,EAAE,SAAS;aACpB;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAkC;IAElC,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * TTS Providers Index
3
+ *
4
+ * Exports all TTS provider implementations and factory functions.
5
+ */
6
+ export { BrowserTTSProvider, createBrowserTTSProvider, type BrowserTTSConfig, } from "./browser-tts.js";
7
+ import { TTSService } from "../tts-service.js";
8
+ /**
9
+ * Initialize the TTS service with all available providers
10
+ *
11
+ * @param service - The TTS service to initialize
12
+ */
13
+ export declare function initializeTTSProviders(service: TTSService): void;
14
+ /**
15
+ * Create a fully initialized TTS service with all providers registered
16
+ *
17
+ * @returns Initialized TTS service
18
+ */
19
+ export declare function createInitializedTTSService(): TTSService;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/tts-providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAOhE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,UAAU,CAIxD"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * TTS Providers Index
3
+ *
4
+ * Exports all TTS provider implementations and factory functions.
5
+ */
6
+ export { BrowserTTSProvider, createBrowserTTSProvider, } from "./browser-tts.js";
7
+ import { BrowserTTSProvider } from "./browser-tts.js";
8
+ import { TTSService } from "../tts-service.js";
9
+ /**
10
+ * Initialize the TTS service with all available providers
11
+ *
12
+ * @param service - The TTS service to initialize
13
+ */
14
+ export function initializeTTSProviders(service) {
15
+ // Register Browser TTS provider (default, always available)
16
+ service.registerProvider(new BrowserTTSProvider());
17
+ // Future providers will be registered here:
18
+ // - KokoroTTSProvider (local high-quality TTS)
19
+ // - OpenAITTSProvider (cloud TTS)
20
+ }
21
+ /**
22
+ * Create a fully initialized TTS service with all providers registered
23
+ *
24
+ * @returns Initialized TTS service
25
+ */
26
+ export function createInitializedTTSService() {
27
+ const service = new TTSService();
28
+ initializeTTSProviders(service);
29
+ return service;
30
+ }
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/tts-providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAmB;IACxD,4DAA4D;IAC5D,OAAO,CAAC,gBAAgB,CAAC,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAEnD,4CAA4C;IAC5C,+CAA+C;IAC/C,kCAAkC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;IACjC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC"}