@happyvertical/smrt-svelte 0.30.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.
- package/AGENTS.md +317 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +185 -0
- package/dist/Provider.svelte +204 -0
- package/dist/Provider.svelte.d.ts +73 -0
- package/dist/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/app-state.test.js +156 -0
- package/dist/__tests__/warm-clients.test.js +186 -0
- package/dist/browser-ai/adapters/llm/factory.d.ts +38 -0
- package/dist/browser-ai/adapters/llm/factory.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/factory.js +91 -0
- package/dist/browser-ai/adapters/llm/index.d.ts +7 -0
- package/dist/browser-ai/adapters/llm/index.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/index.js +6 -0
- package/dist/browser-ai/adapters/llm/types.d.ts +182 -0
- package/dist/browser-ai/adapters/llm/types.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/types.js +43 -0
- package/dist/browser-ai/adapters/llm/webllm.d.ts +33 -0
- package/dist/browser-ai/adapters/llm/webllm.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/webllm.js +225 -0
- package/dist/browser-ai/adapters/stt/browser-speech.d.ts +31 -0
- package/dist/browser-ai/adapters/stt/browser-speech.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/browser-speech.js +217 -0
- package/dist/browser-ai/adapters/stt/factory.d.ts +49 -0
- package/dist/browser-ai/adapters/stt/factory.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/factory.js +110 -0
- package/dist/browser-ai/adapters/stt/index.d.ts +9 -0
- package/dist/browser-ai/adapters/stt/index.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/index.js +8 -0
- package/dist/browser-ai/adapters/stt/types.d.ts +154 -0
- package/dist/browser-ai/adapters/stt/types.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/types.js +4 -0
- package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts +46 -0
- package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/whisper-cpp.js +348 -0
- package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts +51 -0
- package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/whisper-wasm.js +380 -0
- package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts +42 -0
- package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/browser-synthesis.js +235 -0
- package/dist/browser-ai/adapters/tts/factory.d.ts +53 -0
- package/dist/browser-ai/adapters/tts/factory.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/factory.js +92 -0
- package/dist/browser-ai/adapters/tts/index.d.ts +7 -0
- package/dist/browser-ai/adapters/tts/index.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/index.js +6 -0
- package/dist/browser-ai/adapters/tts/types.d.ts +140 -0
- package/dist/browser-ai/adapters/tts/types.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/types.js +4 -0
- package/dist/browser-ai/capabilities/detector.d.ts +38 -0
- package/dist/browser-ai/capabilities/detector.d.ts.map +1 -0
- package/dist/browser-ai/capabilities/detector.js +211 -0
- package/dist/browser-ai/core/errors.d.ts +62 -0
- package/dist/browser-ai/core/errors.d.ts.map +1 -0
- package/dist/browser-ai/core/errors.js +92 -0
- package/dist/browser-ai/core/index.d.ts +6 -0
- package/dist/browser-ai/core/index.d.ts.map +1 -0
- package/dist/browser-ai/core/index.js +5 -0
- package/dist/browser-ai/core/types.d.ts +115 -0
- package/dist/browser-ai/core/types.d.ts.map +1 -0
- package/dist/browser-ai/core/types.js +34 -0
- package/dist/browser-ai/index.d.ts +12 -0
- package/dist/browser-ai/index.d.ts.map +1 -0
- package/dist/browser-ai/index.js +16 -0
- package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte +77 -0
- package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts +16 -0
- package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/CapabilityGate.svelte +57 -0
- package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts +15 -0
- package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/DownloadProgress.svelte +141 -0
- package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts +15 -0
- package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/STTTest.svelte +379 -0
- package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts +9 -0
- package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/VoiceInput.svelte +200 -0
- package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts +16 -0
- package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/index.d.ts +15 -0
- package/dist/browser-ai/svelte/index.d.ts.map +1 -0
- package/dist/browser-ai/svelte/index.js +28 -0
- package/dist/browser-ai/ui.d.ts +16 -0
- package/dist/browser-ai/ui.d.ts.map +1 -0
- package/dist/browser-ai/ui.js +67 -0
- package/dist/components/admin/AgentAdminPanel.svelte +111 -0
- package/dist/components/admin/AgentAdminPanel.svelte.d.ts +25 -0
- package/dist/components/admin/AgentAdminPanel.svelte.d.ts.map +1 -0
- package/dist/components/admin/AgentAdminTabs.svelte +280 -0
- package/dist/components/admin/AgentAdminTabs.svelte.d.ts +23 -0
- package/dist/components/admin/AgentAdminTabs.svelte.d.ts.map +1 -0
- package/dist/components/admin/AgentSettingsShell.svelte +257 -0
- package/dist/components/admin/AgentSettingsShell.svelte.d.ts +33 -0
- package/dist/components/admin/AgentSettingsShell.svelte.d.ts.map +1 -0
- package/dist/components/admin/index.d.ts +5 -0
- package/dist/components/admin/index.d.ts.map +1 -0
- package/dist/components/admin/index.js +6 -0
- package/dist/components/forms/AddressInput.svelte +500 -0
- package/dist/components/forms/AddressInput.svelte.d.ts +36 -0
- package/dist/components/forms/AddressInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/CheckboxInput.svelte +208 -0
- package/dist/components/forms/CheckboxInput.svelte.d.ts +20 -0
- package/dist/components/forms/CheckboxInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/DateRangeInput.svelte +628 -0
- package/dist/components/forms/DateRangeInput.svelte.d.ts +33 -0
- package/dist/components/forms/DateRangeInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/DateTimeInput.svelte +521 -0
- package/dist/components/forms/DateTimeInput.svelte.d.ts +24 -0
- package/dist/components/forms/DateTimeInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/FileUpload.svelte +358 -0
- package/dist/components/forms/FileUpload.svelte.d.ts +22 -0
- package/dist/components/forms/FileUpload.svelte.d.ts.map +1 -0
- package/dist/components/forms/Form.svelte +771 -0
- package/dist/components/forms/Form.svelte.d.ts +26 -0
- package/dist/components/forms/Form.svelte.d.ts.map +1 -0
- package/dist/components/forms/FormGroup.svelte +86 -0
- package/dist/components/forms/FormGroup.svelte.d.ts +13 -0
- package/dist/components/forms/FormGroup.svelte.d.ts.map +1 -0
- package/dist/components/forms/FormMicButton.svelte +179 -0
- package/dist/components/forms/FormMicButton.svelte.d.ts +10 -0
- package/dist/components/forms/FormMicButton.svelte.d.ts.map +1 -0
- package/dist/components/forms/Input.svelte +83 -0
- package/dist/components/forms/Input.svelte.d.ts +9 -0
- package/dist/components/forms/Input.svelte.d.ts.map +1 -0
- package/dist/components/forms/MeasurementInput.svelte +505 -0
- package/dist/components/forms/MeasurementInput.svelte.d.ts +35 -0
- package/dist/components/forms/MeasurementInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/MoneyInput.svelte +412 -0
- package/dist/components/forms/MoneyInput.svelte.d.ts +30 -0
- package/dist/components/forms/MoneyInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/NumberInput.svelte +310 -0
- package/dist/components/forms/NumberInput.svelte.d.ts +28 -0
- package/dist/components/forms/NumberInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/PhoneInput.svelte +530 -0
- package/dist/components/forms/PhoneInput.svelte.d.ts +22 -0
- package/dist/components/forms/PhoneInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/SearchInput.svelte +358 -0
- package/dist/components/forms/SearchInput.svelte.d.ts +33 -0
- package/dist/components/forms/SearchInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/Select.svelte +83 -0
- package/dist/components/forms/Select.svelte.d.ts +11 -0
- package/dist/components/forms/Select.svelte.d.ts.map +1 -0
- package/dist/components/forms/SelectInput.svelte +254 -0
- package/dist/components/forms/SelectInput.svelte.d.ts +25 -0
- package/dist/components/forms/SelectInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/TextInput.svelte +415 -0
- package/dist/components/forms/TextInput.svelte.d.ts +26 -0
- package/dist/components/forms/TextInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/Textarea.svelte +85 -0
- package/dist/components/forms/Textarea.svelte.d.ts +10 -0
- package/dist/components/forms/Textarea.svelte.d.ts.map +1 -0
- package/dist/components/forms/TextareaInput.svelte +386 -0
- package/dist/components/forms/TextareaInput.svelte.d.ts +26 -0
- package/dist/components/forms/TextareaInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/Toggle.svelte +217 -0
- package/dist/components/forms/Toggle.svelte.d.ts +37 -0
- package/dist/components/forms/Toggle.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/AddressInput.behavior.test.js +122 -0
- package/dist/components/forms/__tests__/CheckboxInput.test.js +92 -0
- package/dist/components/forms/__tests__/DateRangeInput.behavior.test.js +135 -0
- package/dist/components/forms/__tests__/DateTimeInput.behavior.test.js +103 -0
- package/dist/components/forms/__tests__/FileUpload.test.js +90 -0
- package/dist/components/forms/__tests__/Form.behavior.test.js +137 -0
- package/dist/components/forms/__tests__/Form.test.js +58 -0
- package/dist/components/forms/__tests__/FormGroup.test.js +48 -0
- package/dist/components/forms/__tests__/FormMicButton.test.js +86 -0
- package/dist/components/forms/__tests__/Input.test.js +49 -0
- package/dist/components/forms/__tests__/MeasurementInput.behavior.test.js +129 -0
- package/dist/components/forms/__tests__/MoneyInput.behavior.test.js +124 -0
- package/dist/components/forms/__tests__/NumberInput.behavior.test.js +141 -0
- package/dist/components/forms/__tests__/PhoneInput.behavior.test.js +96 -0
- package/dist/components/forms/__tests__/SearchInput.test.js +79 -0
- package/dist/components/forms/__tests__/Select.test.js +37 -0
- package/dist/components/forms/__tests__/SelectInput.behavior.test.js +132 -0
- package/dist/components/forms/__tests__/TextInput.behavior.test.js +131 -0
- package/dist/components/forms/__tests__/Textarea.test.js +39 -0
- package/dist/components/forms/__tests__/TextareaInput.behavior.test.js +96 -0
- package/dist/components/forms/__tests__/Toggle.test.js +87 -0
- package/dist/components/forms/__tests__/composite-inputs-a11y.test.js +69 -0
- package/dist/components/forms/__tests__/form-group-input.fixture.svelte +16 -0
- package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts +9 -0
- package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/form-with-fields.fixture.svelte +33 -0
- package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts +12 -0
- package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/rich-inputs-a11y.test.js +87 -0
- package/dist/components/forms/index.d.ts +25 -0
- package/dist/components/forms/index.d.ts.map +1 -0
- package/dist/components/forms/index.js +25 -0
- package/dist/components/forms/types.d.ts +33 -0
- package/dist/components/forms/types.d.ts.map +1 -0
- package/dist/components/forms/types.js +4 -0
- package/dist/components/module/ModulePanel.svelte +134 -0
- package/dist/components/module/ModulePanel.svelte.d.ts +22 -0
- package/dist/components/module/ModulePanel.svelte.d.ts.map +1 -0
- package/dist/components/module/index.d.ts +5 -0
- package/dist/components/module/index.d.ts.map +1 -0
- package/dist/components/module/index.js +4 -0
- package/dist/components/workspace/Breadcrumbs.svelte +141 -0
- package/dist/components/workspace/Breadcrumbs.svelte.d.ts +21 -0
- package/dist/components/workspace/Breadcrumbs.svelte.d.ts.map +1 -0
- package/dist/components/workspace/NavTree.svelte +354 -0
- package/dist/components/workspace/NavTree.svelte.d.ts +45 -0
- package/dist/components/workspace/NavTree.svelte.d.ts.map +1 -0
- package/dist/components/workspace/README.md +34 -0
- package/dist/components/workspace/RoleShell.svelte +309 -0
- package/dist/components/workspace/RoleShell.svelte.d.ts +91 -0
- package/dist/components/workspace/RoleShell.svelte.d.ts.map +1 -0
- package/dist/components/workspace/WorkspaceShell.svelte +951 -0
- package/dist/components/workspace/WorkspaceShell.svelte.d.ts +112 -0
- package/dist/components/workspace/WorkspaceShell.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/RoleShell.test.js +772 -0
- package/dist/components/workspace/__tests__/WorkspaceShell.test.js +630 -0
- package/dist/components/workspace/__tests__/breadcrumbs-helpers.test.js +141 -0
- package/dist/components/workspace/__tests__/context-forwarding-harness.svelte +45 -0
- package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts +21 -0
- package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/define-tools-dock.test.js +1010 -0
- package/dist/components/workspace/__tests__/harness.svelte +25 -0
- package/dist/components/workspace/__tests__/harness.svelte.d.ts +14 -0
- package/dist/components/workspace/__tests__/harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/index.test.js +37 -0
- package/dist/components/workspace/__tests__/manifest-nav-helpers.test.js +24 -0
- package/dist/components/workspace/__tests__/manifest-nav.test.js +599 -0
- package/dist/components/workspace/__tests__/nav-helpers.test.js +95 -0
- package/dist/components/workspace/__tests__/render-harness.svelte +66 -0
- package/dist/components/workspace/__tests__/render-harness.svelte.d.ts +32 -0
- package/dist/components/workspace/__tests__/render-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/render-tools-dock.test.js +243 -0
- package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte +58 -0
- package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts +16 -0
- package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte +41 -0
- package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts +13 -0
- package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/test-icon.svelte +17 -0
- package/dist/components/workspace/__tests__/test-icon.svelte.d.ts +19 -0
- package/dist/components/workspace/__tests__/test-icon.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte +38 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts +22 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts +65 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.js +115 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts +15 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.js +7 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture.test.js +115 -0
- package/dist/components/workspace/__tests__/use-harness-orphan.svelte +9 -0
- package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts +19 -0
- package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/use-harness.svelte +23 -0
- package/dist/components/workspace/__tests__/use-harness.svelte.d.ts +8 -0
- package/dist/components/workspace/__tests__/use-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/use-tools-dock.test.js +33 -0
- package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte +43 -0
- package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts +11 -0
- package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/breadcrumbs-helpers.d.ts +44 -0
- package/dist/components/workspace/breadcrumbs-helpers.d.ts.map +1 -0
- package/dist/components/workspace/breadcrumbs-helpers.js +88 -0
- package/dist/components/workspace/index.d.ts +16 -0
- package/dist/components/workspace/index.d.ts.map +1 -0
- package/dist/components/workspace/index.js +14 -0
- package/dist/components/workspace/manifest-nav.d.ts +200 -0
- package/dist/components/workspace/manifest-nav.d.ts.map +1 -0
- package/dist/components/workspace/manifest-nav.js +408 -0
- package/dist/components/workspace/nav-helpers.d.ts +36 -0
- package/dist/components/workspace/nav-helpers.d.ts.map +1 -0
- package/dist/components/workspace/nav-helpers.js +60 -0
- package/dist/components/workspace/server/__tests__/compose-availability.test.js +383 -0
- package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts +78 -0
- package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts.map +1 -0
- package/dist/components/workspace/server/__tests__/typed-context-fixture.js +104 -0
- package/dist/components/workspace/server/compose-availability.d.ts +73 -0
- package/dist/components/workspace/server/compose-availability.d.ts.map +1 -0
- package/dist/components/workspace/server/compose-availability.js +114 -0
- package/dist/components/workspace/server/index.d.ts +13 -0
- package/dist/components/workspace/server/index.d.ts.map +1 -0
- package/dist/components/workspace/server/index.js +11 -0
- package/dist/components/workspace/server/types.d.ts +108 -0
- package/dist/components/workspace/server/types.d.ts.map +1 -0
- package/dist/components/workspace/server/types.js +11 -0
- package/dist/components/workspace/tools-dock/ToolsDock.svelte +565 -0
- package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts +14 -0
- package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts.map +1 -0
- package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts +143 -0
- package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts.map +1 -0
- package/dist/components/workspace/tools-dock/define-tools-dock.svelte.js +487 -0
- package/dist/components/workspace/tools-dock/use-tools-dock.d.ts +41 -0
- package/dist/components/workspace/tools-dock/use-tools-dock.d.ts.map +1 -0
- package/dist/components/workspace/tools-dock/use-tools-dock.js +50 -0
- package/dist/components/workspace/types.d.ts +372 -0
- package/dist/components/workspace/types.d.ts.map +1 -0
- package/dist/components/workspace/types.js +6 -0
- package/dist/hooks/index.d.ts +11 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/useAppState.svelte.d.ts +46 -0
- package/dist/hooks/useAppState.svelte.d.ts.map +1 -0
- package/dist/hooks/useAppState.svelte.js +59 -0
- package/dist/hooks/useAuth.svelte.d.ts +41 -0
- package/dist/hooks/useAuth.svelte.d.ts.map +1 -0
- package/dist/hooks/useAuth.svelte.js +43 -0
- package/dist/hooks/useLLM.svelte.d.ts +69 -0
- package/dist/hooks/useLLM.svelte.d.ts.map +1 -0
- package/dist/hooks/useLLM.svelte.js +85 -0
- package/dist/hooks/useSTT.svelte.d.ts +68 -0
- package/dist/hooks/useSTT.svelte.d.ts.map +1 -0
- package/dist/hooks/useSTT.svelte.js +97 -0
- package/dist/hooks/useSocket.svelte.d.ts +45 -0
- package/dist/hooks/useSocket.svelte.d.ts.map +1 -0
- package/dist/hooks/useSocket.svelte.js +54 -0
- package/dist/hooks/useTTS.svelte.d.ts +65 -0
- package/dist/hooks/useTTS.svelte.d.ts.map +1 -0
- package/dist/hooks/useTTS.svelte.js +93 -0
- package/dist/hooks/useTheme.d.ts +13 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.js +16 -0
- package/dist/i18n/__tests__/server.spec.js +50 -0
- package/dist/i18n/server.d.ts +47 -0
- package/dist/i18n/server.d.ts.map +1 -0
- package/dist/i18n/server.js +58 -0
- package/dist/i18n/strings.forms.d.ts +33 -0
- package/dist/i18n/strings.forms.d.ts.map +1 -0
- package/dist/i18n/strings.forms.js +54 -0
- package/dist/i18n/strings.workspace.d.ts +34 -0
- package/dist/i18n/strings.workspace.d.ts.map +1 -0
- package/dist/i18n/strings.workspace.js +40 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/state/__tests__/warm-clients.test.js +40 -0
- package/dist/state/app-state.d.ts +308 -0
- package/dist/state/app-state.d.ts.map +1 -0
- package/dist/state/app-state.js +64 -0
- package/dist/state/app-state.svelte.d.ts +196 -0
- package/dist/state/app-state.svelte.d.ts.map +1 -0
- package/dist/state/app-state.svelte.js +774 -0
- package/dist/state/context.d.ts +23 -0
- package/dist/state/context.d.ts.map +1 -0
- package/dist/state/context.js +32 -0
- package/dist/state/form-context.d.ts +59 -0
- package/dist/state/form-context.d.ts.map +1 -0
- package/dist/state/form-context.js +31 -0
- package/dist/state/form-group-context.d.ts +13 -0
- package/dist/state/form-group-context.d.ts.map +1 -0
- package/dist/state/form-group-context.js +28 -0
- package/dist/state/index.d.ts +9 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +8 -0
- package/dist/state/warm-clients.d.ts +136 -0
- package/dist/state/warm-clients.d.ts.map +1 -0
- package/dist/state/warm-clients.js +231 -0
- package/package.json +137 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/// <reference path="../../../../web-speech.d.ts" />
|
|
2
|
+
/**
|
|
3
|
+
* Browser Speech Recognition API adapter
|
|
4
|
+
*
|
|
5
|
+
* Uses the Web Speech API (SpeechRecognition) available in most modern browsers.
|
|
6
|
+
* No download required, works immediately.
|
|
7
|
+
*/
|
|
8
|
+
import { CapabilityNotAvailableError, PermissionDeniedError, } from '../../core/errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Get the SpeechRecognition constructor (handles vendor prefix)
|
|
11
|
+
*/
|
|
12
|
+
function getSpeechRecognition() {
|
|
13
|
+
if (typeof window === 'undefined')
|
|
14
|
+
return null;
|
|
15
|
+
return (window.SpeechRecognition ||
|
|
16
|
+
window.webkitSpeechRecognition ||
|
|
17
|
+
null);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Browser Speech Recognition adapter
|
|
21
|
+
*/
|
|
22
|
+
export class BrowserSpeechSTTAdapter {
|
|
23
|
+
type = 'browser-speech';
|
|
24
|
+
_initState = 'uninitialized';
|
|
25
|
+
recognition = null;
|
|
26
|
+
options;
|
|
27
|
+
_isListening = false;
|
|
28
|
+
// Event listeners
|
|
29
|
+
resultListeners = new Set();
|
|
30
|
+
errorListeners = new Set();
|
|
31
|
+
startListeners = new Set();
|
|
32
|
+
endListeners = new Set();
|
|
33
|
+
constructor(options = {}) {
|
|
34
|
+
this.options = {
|
|
35
|
+
defaultLanguage: 'en-US',
|
|
36
|
+
maxAlternatives: 3,
|
|
37
|
+
...options,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
get initState() {
|
|
41
|
+
return this._initState;
|
|
42
|
+
}
|
|
43
|
+
async ensureInitialized(_onProgress) {
|
|
44
|
+
if (this._initState === 'ready')
|
|
45
|
+
return;
|
|
46
|
+
if (this._initState === 'initializing') {
|
|
47
|
+
// Wait for existing initialization
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
const check = () => {
|
|
50
|
+
if (this._initState === 'ready')
|
|
51
|
+
resolve();
|
|
52
|
+
else if (this._initState === 'error')
|
|
53
|
+
reject(new Error('Initialization failed'));
|
|
54
|
+
else
|
|
55
|
+
setTimeout(check, 50);
|
|
56
|
+
};
|
|
57
|
+
check();
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
this._initState = 'initializing';
|
|
61
|
+
try {
|
|
62
|
+
const SpeechRecognitionCtor = getSpeechRecognition();
|
|
63
|
+
if (!SpeechRecognitionCtor) {
|
|
64
|
+
throw new CapabilityNotAvailableError('Web Speech API (SpeechRecognition)', 'browser-speech');
|
|
65
|
+
}
|
|
66
|
+
this.recognition = new SpeechRecognitionCtor();
|
|
67
|
+
this.setupRecognitionHandlers();
|
|
68
|
+
this._initState = 'ready';
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
this._initState = 'error';
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
setupRecognitionHandlers() {
|
|
76
|
+
if (!this.recognition)
|
|
77
|
+
return;
|
|
78
|
+
this.recognition.onresult = (event) => {
|
|
79
|
+
for (let i = event.resultIndex; i < event.results.length; i++) {
|
|
80
|
+
const result = event.results[i];
|
|
81
|
+
const sttResult = {
|
|
82
|
+
text: result[0].transcript,
|
|
83
|
+
confidence: result[0].confidence,
|
|
84
|
+
isFinal: result.isFinal,
|
|
85
|
+
timestamp: Date.now(),
|
|
86
|
+
alternatives: Array.from({ length: result.length }, (_, index) => result[index])
|
|
87
|
+
.slice(1)
|
|
88
|
+
.map((alt) => ({
|
|
89
|
+
text: alt.transcript,
|
|
90
|
+
confidence: alt.confidence,
|
|
91
|
+
})),
|
|
92
|
+
};
|
|
93
|
+
for (const cb of this.resultListeners) {
|
|
94
|
+
cb(sttResult);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
this.recognition.onerror = (event) => {
|
|
99
|
+
let error;
|
|
100
|
+
switch (event.error) {
|
|
101
|
+
case 'not-allowed':
|
|
102
|
+
case 'service-not-allowed':
|
|
103
|
+
error = new PermissionDeniedError('microphone', 'browser-speech');
|
|
104
|
+
break;
|
|
105
|
+
case 'no-speech':
|
|
106
|
+
error = new Error('No speech detected');
|
|
107
|
+
break;
|
|
108
|
+
case 'audio-capture':
|
|
109
|
+
error = new Error('Audio capture failed - check microphone');
|
|
110
|
+
break;
|
|
111
|
+
case 'network':
|
|
112
|
+
error = new Error('Network error during speech recognition');
|
|
113
|
+
break;
|
|
114
|
+
case 'aborted':
|
|
115
|
+
// User aborted, not really an error
|
|
116
|
+
return;
|
|
117
|
+
default:
|
|
118
|
+
error = new Error(`Speech recognition error: ${event.error}`);
|
|
119
|
+
}
|
|
120
|
+
for (const cb of this.errorListeners) {
|
|
121
|
+
cb(error);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
this.recognition.onstart = () => {
|
|
125
|
+
this._isListening = true;
|
|
126
|
+
for (const cb of this.startListeners) {
|
|
127
|
+
cb();
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
this.recognition.onend = () => {
|
|
131
|
+
this._isListening = false;
|
|
132
|
+
for (const cb of this.endListeners) {
|
|
133
|
+
cb();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
getCapabilities() {
|
|
138
|
+
return {
|
|
139
|
+
continuous: true,
|
|
140
|
+
interimResults: true,
|
|
141
|
+
languages: [
|
|
142
|
+
'en-US',
|
|
143
|
+
'en-GB',
|
|
144
|
+
'en-AU',
|
|
145
|
+
'es-ES',
|
|
146
|
+
'es-MX',
|
|
147
|
+
'fr-FR',
|
|
148
|
+
'fr-CA',
|
|
149
|
+
'de-DE',
|
|
150
|
+
'it-IT',
|
|
151
|
+
'pt-BR',
|
|
152
|
+
'pt-PT',
|
|
153
|
+
'zh-CN',
|
|
154
|
+
'zh-TW',
|
|
155
|
+
'ja-JP',
|
|
156
|
+
'ko-KR',
|
|
157
|
+
// Many more supported, this is a subset
|
|
158
|
+
],
|
|
159
|
+
accuracy: 'medium',
|
|
160
|
+
requiresDownload: false,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
async start(options = {}) {
|
|
164
|
+
await this.ensureInitialized();
|
|
165
|
+
if (!this.recognition) {
|
|
166
|
+
throw new Error('Recognition not initialized');
|
|
167
|
+
}
|
|
168
|
+
if (this._isListening) {
|
|
169
|
+
return; // Already listening
|
|
170
|
+
}
|
|
171
|
+
// Configure recognition
|
|
172
|
+
this.recognition.lang =
|
|
173
|
+
options.language || this.options.defaultLanguage || 'en-US';
|
|
174
|
+
this.recognition.continuous = options.continuous ?? false;
|
|
175
|
+
this.recognition.interimResults = options.interimResults ?? true;
|
|
176
|
+
this.recognition.maxAlternatives = this.options.maxAlternatives || 3;
|
|
177
|
+
this.recognition.start();
|
|
178
|
+
}
|
|
179
|
+
async stop() {
|
|
180
|
+
if (this.recognition && this._isListening) {
|
|
181
|
+
this.recognition.stop();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
abort() {
|
|
185
|
+
if (this.recognition && this._isListening) {
|
|
186
|
+
this.recognition.abort();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
isListening() {
|
|
190
|
+
return this._isListening;
|
|
191
|
+
}
|
|
192
|
+
onResult(callback) {
|
|
193
|
+
this.resultListeners.add(callback);
|
|
194
|
+
return () => this.resultListeners.delete(callback);
|
|
195
|
+
}
|
|
196
|
+
onError(callback) {
|
|
197
|
+
this.errorListeners.add(callback);
|
|
198
|
+
return () => this.errorListeners.delete(callback);
|
|
199
|
+
}
|
|
200
|
+
onStart(callback) {
|
|
201
|
+
this.startListeners.add(callback);
|
|
202
|
+
return () => this.startListeners.delete(callback);
|
|
203
|
+
}
|
|
204
|
+
onEnd(callback) {
|
|
205
|
+
this.endListeners.add(callback);
|
|
206
|
+
return () => this.endListeners.delete(callback);
|
|
207
|
+
}
|
|
208
|
+
async dispose() {
|
|
209
|
+
this.abort();
|
|
210
|
+
this.recognition = null;
|
|
211
|
+
this.resultListeners.clear();
|
|
212
|
+
this.errorListeners.clear();
|
|
213
|
+
this.startListeners.clear();
|
|
214
|
+
this.endListeners.clear();
|
|
215
|
+
this._initState = 'uninitialized';
|
|
216
|
+
}
|
|
217
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* STT adapter factory with type guards
|
|
3
|
+
*
|
|
4
|
+
* Uses discriminated unions and lazy loading following SDK patterns.
|
|
5
|
+
*/
|
|
6
|
+
import type { GetSTTOptions, STTAdapter } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create an STT adapter
|
|
9
|
+
*
|
|
10
|
+
* Uses lazy loading to only import the requested adapter.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* // Browser Speech API (default)
|
|
15
|
+
* const stt = await getSTT();
|
|
16
|
+
*
|
|
17
|
+
* // Explicit Browser Speech
|
|
18
|
+
* const stt = await getSTT({ type: 'browser-speech' });
|
|
19
|
+
*
|
|
20
|
+
* // Whisper.cpp (recommended for accuracy)
|
|
21
|
+
* const stt = await getSTT({ type: 'whisper-cpp', model: 'tiny.en' });
|
|
22
|
+
*
|
|
23
|
+
* // Whisper WASM (transformers.js - has known issues)
|
|
24
|
+
* const stt = await getSTT({ type: 'whisper-wasm', modelSize: 'tiny' });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function getSTT(options?: GetSTTOptions): Promise<STTAdapter>;
|
|
28
|
+
/**
|
|
29
|
+
* Auto-detect and create the best available STT adapter
|
|
30
|
+
*
|
|
31
|
+
* Selection priority:
|
|
32
|
+
* 1. Whisper WASM if WebGPU is available (best accuracy)
|
|
33
|
+
* 2. Browser Speech API if available (no download)
|
|
34
|
+
* 3. Whisper WASM as fallback
|
|
35
|
+
*
|
|
36
|
+
* @throws {CapabilityNotAvailableError} If no STT adapter is available
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const stt = await getSTTAuto();
|
|
41
|
+
* console.log(`Using ${stt.type} adapter`);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function getSTTAuto(options?: Partial<Omit<GetSTTOptions, 'type'>>): Promise<STTAdapter>;
|
|
45
|
+
/**
|
|
46
|
+
* Check if a specific STT backend is available
|
|
47
|
+
*/
|
|
48
|
+
export declare function isSTTAvailable(type: 'browser-speech' | 'whisper-wasm'): boolean;
|
|
49
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/browser-ai/adapters/stt/factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAEV,aAAa,EACb,UAAU,EAGX,MAAM,YAAY,CAAC;AA6BpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqB7E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAM,GACjD,OAAO,CAAC,UAAU,CAAC,CAmBrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,gBAAgB,GAAG,cAAc,GACtC,OAAO,CAYT"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* STT adapter factory with type guards
|
|
3
|
+
*
|
|
4
|
+
* Uses discriminated unions and lazy loading following SDK patterns.
|
|
5
|
+
*/
|
|
6
|
+
import { detectCapabilities, getBestSTTBackend, } from '../../capabilities/detector.js';
|
|
7
|
+
import { UnsupportedAdapterError } from '../../core/errors.js';
|
|
8
|
+
/**
|
|
9
|
+
* Type guard for Browser Speech API options
|
|
10
|
+
*/
|
|
11
|
+
function isBrowserSpeechOptions(options) {
|
|
12
|
+
return !options.type || options.type === 'browser-speech';
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Type guard for Whisper WASM options (transformers.js)
|
|
16
|
+
*/
|
|
17
|
+
function isWhisperWasmOptions(options) {
|
|
18
|
+
return options.type === 'whisper-wasm';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Type guard for Whisper.cpp options (@remotion/whisper-web)
|
|
22
|
+
*/
|
|
23
|
+
function isWhisperCppOptions(options) {
|
|
24
|
+
return options.type === 'whisper-cpp';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create an STT adapter
|
|
28
|
+
*
|
|
29
|
+
* Uses lazy loading to only import the requested adapter.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* // Browser Speech API (default)
|
|
34
|
+
* const stt = await getSTT();
|
|
35
|
+
*
|
|
36
|
+
* // Explicit Browser Speech
|
|
37
|
+
* const stt = await getSTT({ type: 'browser-speech' });
|
|
38
|
+
*
|
|
39
|
+
* // Whisper.cpp (recommended for accuracy)
|
|
40
|
+
* const stt = await getSTT({ type: 'whisper-cpp', model: 'tiny.en' });
|
|
41
|
+
*
|
|
42
|
+
* // Whisper WASM (transformers.js - has known issues)
|
|
43
|
+
* const stt = await getSTT({ type: 'whisper-wasm', modelSize: 'tiny' });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export async function getSTT(options = {}) {
|
|
47
|
+
if (isBrowserSpeechOptions(options)) {
|
|
48
|
+
const { BrowserSpeechSTTAdapter } = await import('./browser-speech.js');
|
|
49
|
+
return new BrowserSpeechSTTAdapter(options);
|
|
50
|
+
}
|
|
51
|
+
if (isWhisperCppOptions(options)) {
|
|
52
|
+
const { WhisperCppSTTAdapter } = await import('./whisper-cpp.js');
|
|
53
|
+
return new WhisperCppSTTAdapter(options);
|
|
54
|
+
}
|
|
55
|
+
if (isWhisperWasmOptions(options)) {
|
|
56
|
+
const { WhisperWasmSTTAdapter } = await import('./whisper-wasm.js');
|
|
57
|
+
return new WhisperWasmSTTAdapter(options);
|
|
58
|
+
}
|
|
59
|
+
throw new UnsupportedAdapterError(options.type, [
|
|
60
|
+
'browser-speech',
|
|
61
|
+
'whisper-cpp',
|
|
62
|
+
'whisper-wasm',
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Auto-detect and create the best available STT adapter
|
|
67
|
+
*
|
|
68
|
+
* Selection priority:
|
|
69
|
+
* 1. Whisper WASM if WebGPU is available (best accuracy)
|
|
70
|
+
* 2. Browser Speech API if available (no download)
|
|
71
|
+
* 3. Whisper WASM as fallback
|
|
72
|
+
*
|
|
73
|
+
* @throws {CapabilityNotAvailableError} If no STT adapter is available
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```ts
|
|
77
|
+
* const stt = await getSTTAuto();
|
|
78
|
+
* console.log(`Using ${stt.type} adapter`);
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export async function getSTTAuto(options = {}) {
|
|
82
|
+
const caps = detectCapabilities();
|
|
83
|
+
const backend = getBestSTTBackend(caps);
|
|
84
|
+
if (!backend) {
|
|
85
|
+
throw new Error('No STT capability available in this browser');
|
|
86
|
+
}
|
|
87
|
+
if (backend === 'whisper-wasm') {
|
|
88
|
+
return getSTT({
|
|
89
|
+
type: 'whisper-wasm',
|
|
90
|
+
...options,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return getSTT({
|
|
94
|
+
type: 'browser-speech',
|
|
95
|
+
...options,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if a specific STT backend is available
|
|
100
|
+
*/
|
|
101
|
+
export function isSTTAvailable(type) {
|
|
102
|
+
const caps = detectCapabilities();
|
|
103
|
+
if (type === 'browser-speech') {
|
|
104
|
+
return caps.stt.browserSpeechAPI;
|
|
105
|
+
}
|
|
106
|
+
if (type === 'whisper-wasm') {
|
|
107
|
+
return caps.stt.whisperWasm;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speech-to-Text adapters
|
|
3
|
+
*/
|
|
4
|
+
export { BrowserSpeechSTTAdapter } from './browser-speech.js';
|
|
5
|
+
export * from './factory.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { WhisperCppSTTAdapter } from './whisper-cpp.js';
|
|
8
|
+
export { WhisperWasmSTTAdapter } from './whisper-wasm.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/browser-ai/adapters/stt/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speech-to-Text adapters
|
|
3
|
+
*/
|
|
4
|
+
export { BrowserSpeechSTTAdapter } from './browser-speech.js';
|
|
5
|
+
export * from './factory.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { WhisperCppSTTAdapter } from './whisper-cpp.js';
|
|
8
|
+
export { WhisperWasmSTTAdapter } from './whisper-wasm.js';
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speech-to-Text adapter types
|
|
3
|
+
*/
|
|
4
|
+
import type { BaseBrowserAIOptions, InitState, OnProgress } from '../../core/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* STT recognition result
|
|
7
|
+
*/
|
|
8
|
+
export interface STTResult {
|
|
9
|
+
/** Transcribed text */
|
|
10
|
+
text: string;
|
|
11
|
+
/** Confidence score (0-1), if available */
|
|
12
|
+
confidence: number;
|
|
13
|
+
/** Whether this is a final result or interim */
|
|
14
|
+
isFinal: boolean;
|
|
15
|
+
/** Alternative transcriptions, if available */
|
|
16
|
+
alternatives?: Array<{
|
|
17
|
+
text: string;
|
|
18
|
+
confidence: number;
|
|
19
|
+
}>;
|
|
20
|
+
/** Timestamp of the result */
|
|
21
|
+
timestamp: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* STT adapter capabilities
|
|
25
|
+
*/
|
|
26
|
+
export interface STTCapabilities {
|
|
27
|
+
/** Whether continuous listening is supported */
|
|
28
|
+
continuous: boolean;
|
|
29
|
+
/** Whether interim results are supported */
|
|
30
|
+
interimResults: boolean;
|
|
31
|
+
/** Supported languages (BCP-47 codes) */
|
|
32
|
+
languages: string[];
|
|
33
|
+
/** Estimated accuracy level */
|
|
34
|
+
accuracy: 'low' | 'medium' | 'high';
|
|
35
|
+
/** Whether download is required before use */
|
|
36
|
+
requiresDownload: boolean;
|
|
37
|
+
/** Estimated download size in bytes (if requiresDownload) */
|
|
38
|
+
downloadSize?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Options for STT recognition session
|
|
42
|
+
*/
|
|
43
|
+
export interface STTOptions {
|
|
44
|
+
/** Language code (BCP-47, e.g., 'en-US') */
|
|
45
|
+
language?: string;
|
|
46
|
+
/** Enable continuous recognition (keep listening after results) */
|
|
47
|
+
continuous?: boolean;
|
|
48
|
+
/** Provide interim results as user speaks */
|
|
49
|
+
interimResults?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* STT event callbacks
|
|
53
|
+
*/
|
|
54
|
+
export interface STTEventHandlers {
|
|
55
|
+
onResult?: (result: STTResult) => void;
|
|
56
|
+
onError?: (error: Error) => void;
|
|
57
|
+
onStart?: () => void;
|
|
58
|
+
onEnd?: () => void;
|
|
59
|
+
onSoundStart?: () => void;
|
|
60
|
+
onSoundEnd?: () => void;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* STT adapter interface - all STT implementations must implement this
|
|
64
|
+
*/
|
|
65
|
+
export interface STTAdapter {
|
|
66
|
+
/** Adapter type identifier */
|
|
67
|
+
readonly type: 'browser-speech' | 'whisper-wasm' | 'whisper-cpp';
|
|
68
|
+
/** Current initialization state */
|
|
69
|
+
readonly initState: InitState;
|
|
70
|
+
/**
|
|
71
|
+
* Initialize the adapter (phase 2 of two-phase init)
|
|
72
|
+
* Downloads models/WASM if required
|
|
73
|
+
*/
|
|
74
|
+
ensureInitialized(onProgress?: OnProgress): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Get adapter capabilities
|
|
77
|
+
*/
|
|
78
|
+
getCapabilities(): STTCapabilities;
|
|
79
|
+
/**
|
|
80
|
+
* Start listening for speech
|
|
81
|
+
*/
|
|
82
|
+
start(options?: STTOptions): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Stop listening
|
|
85
|
+
*/
|
|
86
|
+
stop(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Abort listening (stops immediately without final result)
|
|
89
|
+
*/
|
|
90
|
+
abort(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Check if currently listening
|
|
93
|
+
*/
|
|
94
|
+
isListening(): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Subscribe to recognition results
|
|
97
|
+
* @returns Unsubscribe function
|
|
98
|
+
*/
|
|
99
|
+
onResult(callback: (result: STTResult) => void): () => void;
|
|
100
|
+
/**
|
|
101
|
+
* Subscribe to errors
|
|
102
|
+
* @returns Unsubscribe function
|
|
103
|
+
*/
|
|
104
|
+
onError(callback: (error: Error) => void): () => void;
|
|
105
|
+
/**
|
|
106
|
+
* Subscribe to start event
|
|
107
|
+
* @returns Unsubscribe function
|
|
108
|
+
*/
|
|
109
|
+
onStart(callback: () => void): () => void;
|
|
110
|
+
/**
|
|
111
|
+
* Subscribe to end event
|
|
112
|
+
* @returns Unsubscribe function
|
|
113
|
+
*/
|
|
114
|
+
onEnd(callback: () => void): () => void;
|
|
115
|
+
/**
|
|
116
|
+
* Dispose of resources
|
|
117
|
+
*/
|
|
118
|
+
dispose(): Promise<void>;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Browser Speech API adapter options
|
|
122
|
+
*/
|
|
123
|
+
export interface BrowserSpeechSTTOptions extends BaseBrowserAIOptions {
|
|
124
|
+
type?: 'browser-speech';
|
|
125
|
+
/** Override default language */
|
|
126
|
+
defaultLanguage?: string;
|
|
127
|
+
/** Max alternatives to return */
|
|
128
|
+
maxAlternatives?: number;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Whisper WASM adapter options
|
|
132
|
+
*/
|
|
133
|
+
export interface WhisperWasmSTTOptions extends BaseBrowserAIOptions {
|
|
134
|
+
type: 'whisper-wasm';
|
|
135
|
+
/** Model size: 'tiny', 'base', 'small' */
|
|
136
|
+
modelSize?: 'tiny' | 'base' | 'small';
|
|
137
|
+
/** Custom model URL (overrides modelSize) */
|
|
138
|
+
modelUrl?: string;
|
|
139
|
+
/** Language code for transcription */
|
|
140
|
+
defaultLanguage?: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Whisper.cpp WASM adapter options (using @remotion/whisper-web)
|
|
144
|
+
*/
|
|
145
|
+
export interface WhisperCppSTTOptions extends BaseBrowserAIOptions {
|
|
146
|
+
type: 'whisper-cpp';
|
|
147
|
+
/** Model size: 'tiny.en', 'base.en', 'small.en', 'tiny', 'base', 'small' */
|
|
148
|
+
model?: 'tiny.en' | 'base.en' | 'small.en' | 'tiny' | 'base' | 'small';
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Union type for STT factory options
|
|
152
|
+
*/
|
|
153
|
+
export type GetSTTOptions = BrowserSpeechSTTOptions | WhisperWasmSTTOptions | WhisperCppSTTOptions;
|
|
154
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/browser-ai/adapters/stt/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whisper.cpp adapter using @remotion/whisper-web
|
|
3
|
+
*
|
|
4
|
+
* Uses whisper.cpp compiled to WASM for high-accuracy speech recognition.
|
|
5
|
+
* More stable than transformers.js implementation.
|
|
6
|
+
*/
|
|
7
|
+
import type { InitState, OnProgress } from '../../core/types.js';
|
|
8
|
+
import type { STTAdapter, STTCapabilities, STTOptions, STTResult, WhisperCppSTTOptions } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Whisper.cpp adapter for high-accuracy speech recognition
|
|
11
|
+
*/
|
|
12
|
+
export declare class WhisperCppSTTAdapter implements STTAdapter {
|
|
13
|
+
readonly type: "whisper-cpp";
|
|
14
|
+
private _initState;
|
|
15
|
+
private options;
|
|
16
|
+
private _isListening;
|
|
17
|
+
private mediaRecorder;
|
|
18
|
+
private audioChunks;
|
|
19
|
+
private stream;
|
|
20
|
+
private resultListeners;
|
|
21
|
+
private errorListeners;
|
|
22
|
+
private startListeners;
|
|
23
|
+
private endListeners;
|
|
24
|
+
private whisperWeb;
|
|
25
|
+
private modelDownloaded;
|
|
26
|
+
private processingPromise;
|
|
27
|
+
private processingResolve;
|
|
28
|
+
constructor(options?: Partial<WhisperCppSTTOptions>);
|
|
29
|
+
get initState(): InitState;
|
|
30
|
+
private get model();
|
|
31
|
+
ensureInitialized(onProgress?: OnProgress): Promise<void>;
|
|
32
|
+
private importWhisperWeb;
|
|
33
|
+
getCapabilities(): STTCapabilities;
|
|
34
|
+
start(_options?: STTOptions): Promise<void>;
|
|
35
|
+
private getSupportedMimeType;
|
|
36
|
+
private processRecording;
|
|
37
|
+
stop(): Promise<void>;
|
|
38
|
+
abort(): void;
|
|
39
|
+
isListening(): boolean;
|
|
40
|
+
onResult(callback: (result: STTResult) => void): () => void;
|
|
41
|
+
onError(callback: (error: Error) => void): () => void;
|
|
42
|
+
onStart(callback: () => void): () => void;
|
|
43
|
+
onEnd(callback: () => void): () => void;
|
|
44
|
+
dispose(): Promise<void>;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=whisper-cpp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whisper-cpp.d.ts","sourceRoot":"","sources":["../../../../src/browser-ai/adapters/stt/whisper-cpp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,UAAU,EACV,SAAS,EACT,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAoBpB;;GAEG;AACH,qBAAa,oBAAqB,YAAW,UAAU;IACrD,QAAQ,CAAC,IAAI,EAAG,aAAa,CAAU;IAEvC,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAA4B;IAG1C,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,YAAY,CAAyB;IAG7C,OAAO,CAAC,UAAU,CAAa;IAE/B,OAAO,CAAC,eAAe,CAAS;IAGhC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,iBAAiB,CAA6B;gBAE1C,OAAO,GAAE,OAAO,CAAC,oBAAoB,CAAM;IAQvD,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,OAAO,KAAK,KAAK,GAEhB;IAEK,iBAAiB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YA8FjD,gBAAgB;IAW9B,eAAe,IAAI,eAAe;IA+B5B,KAAK,CAAC,QAAQ,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDrD,OAAO,CAAC,oBAAoB;YAiBd,gBAAgB;IAyExB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB3B,KAAK,IAAI,IAAI;IAmBb,WAAW,IAAI,OAAO;IAItB,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAK3D,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI;IAKrD,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKzC,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKjC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAU/B"}
|