@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.
Files changed (357) hide show
  1. package/AGENTS.md +317 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +185 -0
  5. package/dist/Provider.svelte +204 -0
  6. package/dist/Provider.svelte.d.ts +73 -0
  7. package/dist/Provider.svelte.d.ts.map +1 -0
  8. package/dist/__tests__/app-state.test.js +156 -0
  9. package/dist/__tests__/warm-clients.test.js +186 -0
  10. package/dist/browser-ai/adapters/llm/factory.d.ts +38 -0
  11. package/dist/browser-ai/adapters/llm/factory.d.ts.map +1 -0
  12. package/dist/browser-ai/adapters/llm/factory.js +91 -0
  13. package/dist/browser-ai/adapters/llm/index.d.ts +7 -0
  14. package/dist/browser-ai/adapters/llm/index.d.ts.map +1 -0
  15. package/dist/browser-ai/adapters/llm/index.js +6 -0
  16. package/dist/browser-ai/adapters/llm/types.d.ts +182 -0
  17. package/dist/browser-ai/adapters/llm/types.d.ts.map +1 -0
  18. package/dist/browser-ai/adapters/llm/types.js +43 -0
  19. package/dist/browser-ai/adapters/llm/webllm.d.ts +33 -0
  20. package/dist/browser-ai/adapters/llm/webllm.d.ts.map +1 -0
  21. package/dist/browser-ai/adapters/llm/webllm.js +225 -0
  22. package/dist/browser-ai/adapters/stt/browser-speech.d.ts +31 -0
  23. package/dist/browser-ai/adapters/stt/browser-speech.d.ts.map +1 -0
  24. package/dist/browser-ai/adapters/stt/browser-speech.js +217 -0
  25. package/dist/browser-ai/adapters/stt/factory.d.ts +49 -0
  26. package/dist/browser-ai/adapters/stt/factory.d.ts.map +1 -0
  27. package/dist/browser-ai/adapters/stt/factory.js +110 -0
  28. package/dist/browser-ai/adapters/stt/index.d.ts +9 -0
  29. package/dist/browser-ai/adapters/stt/index.d.ts.map +1 -0
  30. package/dist/browser-ai/adapters/stt/index.js +8 -0
  31. package/dist/browser-ai/adapters/stt/types.d.ts +154 -0
  32. package/dist/browser-ai/adapters/stt/types.d.ts.map +1 -0
  33. package/dist/browser-ai/adapters/stt/types.js +4 -0
  34. package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts +46 -0
  35. package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts.map +1 -0
  36. package/dist/browser-ai/adapters/stt/whisper-cpp.js +348 -0
  37. package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts +51 -0
  38. package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts.map +1 -0
  39. package/dist/browser-ai/adapters/stt/whisper-wasm.js +380 -0
  40. package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts +42 -0
  41. package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts.map +1 -0
  42. package/dist/browser-ai/adapters/tts/browser-synthesis.js +235 -0
  43. package/dist/browser-ai/adapters/tts/factory.d.ts +53 -0
  44. package/dist/browser-ai/adapters/tts/factory.d.ts.map +1 -0
  45. package/dist/browser-ai/adapters/tts/factory.js +92 -0
  46. package/dist/browser-ai/adapters/tts/index.d.ts +7 -0
  47. package/dist/browser-ai/adapters/tts/index.d.ts.map +1 -0
  48. package/dist/browser-ai/adapters/tts/index.js +6 -0
  49. package/dist/browser-ai/adapters/tts/types.d.ts +140 -0
  50. package/dist/browser-ai/adapters/tts/types.d.ts.map +1 -0
  51. package/dist/browser-ai/adapters/tts/types.js +4 -0
  52. package/dist/browser-ai/capabilities/detector.d.ts +38 -0
  53. package/dist/browser-ai/capabilities/detector.d.ts.map +1 -0
  54. package/dist/browser-ai/capabilities/detector.js +211 -0
  55. package/dist/browser-ai/core/errors.d.ts +62 -0
  56. package/dist/browser-ai/core/errors.d.ts.map +1 -0
  57. package/dist/browser-ai/core/errors.js +92 -0
  58. package/dist/browser-ai/core/index.d.ts +6 -0
  59. package/dist/browser-ai/core/index.d.ts.map +1 -0
  60. package/dist/browser-ai/core/index.js +5 -0
  61. package/dist/browser-ai/core/types.d.ts +115 -0
  62. package/dist/browser-ai/core/types.d.ts.map +1 -0
  63. package/dist/browser-ai/core/types.js +34 -0
  64. package/dist/browser-ai/index.d.ts +12 -0
  65. package/dist/browser-ai/index.d.ts.map +1 -0
  66. package/dist/browser-ai/index.js +16 -0
  67. package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte +77 -0
  68. package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts +16 -0
  69. package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts.map +1 -0
  70. package/dist/browser-ai/svelte/components/CapabilityGate.svelte +57 -0
  71. package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts +15 -0
  72. package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts.map +1 -0
  73. package/dist/browser-ai/svelte/components/DownloadProgress.svelte +141 -0
  74. package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts +15 -0
  75. package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts.map +1 -0
  76. package/dist/browser-ai/svelte/components/STTTest.svelte +379 -0
  77. package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts +9 -0
  78. package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts.map +1 -0
  79. package/dist/browser-ai/svelte/components/VoiceInput.svelte +200 -0
  80. package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts +16 -0
  81. package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts.map +1 -0
  82. package/dist/browser-ai/svelte/index.d.ts +15 -0
  83. package/dist/browser-ai/svelte/index.d.ts.map +1 -0
  84. package/dist/browser-ai/svelte/index.js +28 -0
  85. package/dist/browser-ai/ui.d.ts +16 -0
  86. package/dist/browser-ai/ui.d.ts.map +1 -0
  87. package/dist/browser-ai/ui.js +67 -0
  88. package/dist/components/admin/AgentAdminPanel.svelte +111 -0
  89. package/dist/components/admin/AgentAdminPanel.svelte.d.ts +25 -0
  90. package/dist/components/admin/AgentAdminPanel.svelte.d.ts.map +1 -0
  91. package/dist/components/admin/AgentAdminTabs.svelte +280 -0
  92. package/dist/components/admin/AgentAdminTabs.svelte.d.ts +23 -0
  93. package/dist/components/admin/AgentAdminTabs.svelte.d.ts.map +1 -0
  94. package/dist/components/admin/AgentSettingsShell.svelte +257 -0
  95. package/dist/components/admin/AgentSettingsShell.svelte.d.ts +33 -0
  96. package/dist/components/admin/AgentSettingsShell.svelte.d.ts.map +1 -0
  97. package/dist/components/admin/index.d.ts +5 -0
  98. package/dist/components/admin/index.d.ts.map +1 -0
  99. package/dist/components/admin/index.js +6 -0
  100. package/dist/components/forms/AddressInput.svelte +500 -0
  101. package/dist/components/forms/AddressInput.svelte.d.ts +36 -0
  102. package/dist/components/forms/AddressInput.svelte.d.ts.map +1 -0
  103. package/dist/components/forms/CheckboxInput.svelte +208 -0
  104. package/dist/components/forms/CheckboxInput.svelte.d.ts +20 -0
  105. package/dist/components/forms/CheckboxInput.svelte.d.ts.map +1 -0
  106. package/dist/components/forms/DateRangeInput.svelte +628 -0
  107. package/dist/components/forms/DateRangeInput.svelte.d.ts +33 -0
  108. package/dist/components/forms/DateRangeInput.svelte.d.ts.map +1 -0
  109. package/dist/components/forms/DateTimeInput.svelte +521 -0
  110. package/dist/components/forms/DateTimeInput.svelte.d.ts +24 -0
  111. package/dist/components/forms/DateTimeInput.svelte.d.ts.map +1 -0
  112. package/dist/components/forms/FileUpload.svelte +358 -0
  113. package/dist/components/forms/FileUpload.svelte.d.ts +22 -0
  114. package/dist/components/forms/FileUpload.svelte.d.ts.map +1 -0
  115. package/dist/components/forms/Form.svelte +771 -0
  116. package/dist/components/forms/Form.svelte.d.ts +26 -0
  117. package/dist/components/forms/Form.svelte.d.ts.map +1 -0
  118. package/dist/components/forms/FormGroup.svelte +86 -0
  119. package/dist/components/forms/FormGroup.svelte.d.ts +13 -0
  120. package/dist/components/forms/FormGroup.svelte.d.ts.map +1 -0
  121. package/dist/components/forms/FormMicButton.svelte +179 -0
  122. package/dist/components/forms/FormMicButton.svelte.d.ts +10 -0
  123. package/dist/components/forms/FormMicButton.svelte.d.ts.map +1 -0
  124. package/dist/components/forms/Input.svelte +83 -0
  125. package/dist/components/forms/Input.svelte.d.ts +9 -0
  126. package/dist/components/forms/Input.svelte.d.ts.map +1 -0
  127. package/dist/components/forms/MeasurementInput.svelte +505 -0
  128. package/dist/components/forms/MeasurementInput.svelte.d.ts +35 -0
  129. package/dist/components/forms/MeasurementInput.svelte.d.ts.map +1 -0
  130. package/dist/components/forms/MoneyInput.svelte +412 -0
  131. package/dist/components/forms/MoneyInput.svelte.d.ts +30 -0
  132. package/dist/components/forms/MoneyInput.svelte.d.ts.map +1 -0
  133. package/dist/components/forms/NumberInput.svelte +310 -0
  134. package/dist/components/forms/NumberInput.svelte.d.ts +28 -0
  135. package/dist/components/forms/NumberInput.svelte.d.ts.map +1 -0
  136. package/dist/components/forms/PhoneInput.svelte +530 -0
  137. package/dist/components/forms/PhoneInput.svelte.d.ts +22 -0
  138. package/dist/components/forms/PhoneInput.svelte.d.ts.map +1 -0
  139. package/dist/components/forms/SearchInput.svelte +358 -0
  140. package/dist/components/forms/SearchInput.svelte.d.ts +33 -0
  141. package/dist/components/forms/SearchInput.svelte.d.ts.map +1 -0
  142. package/dist/components/forms/Select.svelte +83 -0
  143. package/dist/components/forms/Select.svelte.d.ts +11 -0
  144. package/dist/components/forms/Select.svelte.d.ts.map +1 -0
  145. package/dist/components/forms/SelectInput.svelte +254 -0
  146. package/dist/components/forms/SelectInput.svelte.d.ts +25 -0
  147. package/dist/components/forms/SelectInput.svelte.d.ts.map +1 -0
  148. package/dist/components/forms/TextInput.svelte +415 -0
  149. package/dist/components/forms/TextInput.svelte.d.ts +26 -0
  150. package/dist/components/forms/TextInput.svelte.d.ts.map +1 -0
  151. package/dist/components/forms/Textarea.svelte +85 -0
  152. package/dist/components/forms/Textarea.svelte.d.ts +10 -0
  153. package/dist/components/forms/Textarea.svelte.d.ts.map +1 -0
  154. package/dist/components/forms/TextareaInput.svelte +386 -0
  155. package/dist/components/forms/TextareaInput.svelte.d.ts +26 -0
  156. package/dist/components/forms/TextareaInput.svelte.d.ts.map +1 -0
  157. package/dist/components/forms/Toggle.svelte +217 -0
  158. package/dist/components/forms/Toggle.svelte.d.ts +37 -0
  159. package/dist/components/forms/Toggle.svelte.d.ts.map +1 -0
  160. package/dist/components/forms/__tests__/AddressInput.behavior.test.js +122 -0
  161. package/dist/components/forms/__tests__/CheckboxInput.test.js +92 -0
  162. package/dist/components/forms/__tests__/DateRangeInput.behavior.test.js +135 -0
  163. package/dist/components/forms/__tests__/DateTimeInput.behavior.test.js +103 -0
  164. package/dist/components/forms/__tests__/FileUpload.test.js +90 -0
  165. package/dist/components/forms/__tests__/Form.behavior.test.js +137 -0
  166. package/dist/components/forms/__tests__/Form.test.js +58 -0
  167. package/dist/components/forms/__tests__/FormGroup.test.js +48 -0
  168. package/dist/components/forms/__tests__/FormMicButton.test.js +86 -0
  169. package/dist/components/forms/__tests__/Input.test.js +49 -0
  170. package/dist/components/forms/__tests__/MeasurementInput.behavior.test.js +129 -0
  171. package/dist/components/forms/__tests__/MoneyInput.behavior.test.js +124 -0
  172. package/dist/components/forms/__tests__/NumberInput.behavior.test.js +141 -0
  173. package/dist/components/forms/__tests__/PhoneInput.behavior.test.js +96 -0
  174. package/dist/components/forms/__tests__/SearchInput.test.js +79 -0
  175. package/dist/components/forms/__tests__/Select.test.js +37 -0
  176. package/dist/components/forms/__tests__/SelectInput.behavior.test.js +132 -0
  177. package/dist/components/forms/__tests__/TextInput.behavior.test.js +131 -0
  178. package/dist/components/forms/__tests__/Textarea.test.js +39 -0
  179. package/dist/components/forms/__tests__/TextareaInput.behavior.test.js +96 -0
  180. package/dist/components/forms/__tests__/Toggle.test.js +87 -0
  181. package/dist/components/forms/__tests__/composite-inputs-a11y.test.js +69 -0
  182. package/dist/components/forms/__tests__/form-group-input.fixture.svelte +16 -0
  183. package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts +9 -0
  184. package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts.map +1 -0
  185. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte +33 -0
  186. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts +12 -0
  187. package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts.map +1 -0
  188. package/dist/components/forms/__tests__/rich-inputs-a11y.test.js +87 -0
  189. package/dist/components/forms/index.d.ts +25 -0
  190. package/dist/components/forms/index.d.ts.map +1 -0
  191. package/dist/components/forms/index.js +25 -0
  192. package/dist/components/forms/types.d.ts +33 -0
  193. package/dist/components/forms/types.d.ts.map +1 -0
  194. package/dist/components/forms/types.js +4 -0
  195. package/dist/components/module/ModulePanel.svelte +134 -0
  196. package/dist/components/module/ModulePanel.svelte.d.ts +22 -0
  197. package/dist/components/module/ModulePanel.svelte.d.ts.map +1 -0
  198. package/dist/components/module/index.d.ts +5 -0
  199. package/dist/components/module/index.d.ts.map +1 -0
  200. package/dist/components/module/index.js +4 -0
  201. package/dist/components/workspace/Breadcrumbs.svelte +141 -0
  202. package/dist/components/workspace/Breadcrumbs.svelte.d.ts +21 -0
  203. package/dist/components/workspace/Breadcrumbs.svelte.d.ts.map +1 -0
  204. package/dist/components/workspace/NavTree.svelte +354 -0
  205. package/dist/components/workspace/NavTree.svelte.d.ts +45 -0
  206. package/dist/components/workspace/NavTree.svelte.d.ts.map +1 -0
  207. package/dist/components/workspace/README.md +34 -0
  208. package/dist/components/workspace/RoleShell.svelte +309 -0
  209. package/dist/components/workspace/RoleShell.svelte.d.ts +91 -0
  210. package/dist/components/workspace/RoleShell.svelte.d.ts.map +1 -0
  211. package/dist/components/workspace/WorkspaceShell.svelte +951 -0
  212. package/dist/components/workspace/WorkspaceShell.svelte.d.ts +112 -0
  213. package/dist/components/workspace/WorkspaceShell.svelte.d.ts.map +1 -0
  214. package/dist/components/workspace/__tests__/RoleShell.test.js +772 -0
  215. package/dist/components/workspace/__tests__/WorkspaceShell.test.js +630 -0
  216. package/dist/components/workspace/__tests__/breadcrumbs-helpers.test.js +141 -0
  217. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte +45 -0
  218. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts +21 -0
  219. package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts.map +1 -0
  220. package/dist/components/workspace/__tests__/define-tools-dock.test.js +1010 -0
  221. package/dist/components/workspace/__tests__/harness.svelte +25 -0
  222. package/dist/components/workspace/__tests__/harness.svelte.d.ts +14 -0
  223. package/dist/components/workspace/__tests__/harness.svelte.d.ts.map +1 -0
  224. package/dist/components/workspace/__tests__/index.test.js +37 -0
  225. package/dist/components/workspace/__tests__/manifest-nav-helpers.test.js +24 -0
  226. package/dist/components/workspace/__tests__/manifest-nav.test.js +599 -0
  227. package/dist/components/workspace/__tests__/nav-helpers.test.js +95 -0
  228. package/dist/components/workspace/__tests__/render-harness.svelte +66 -0
  229. package/dist/components/workspace/__tests__/render-harness.svelte.d.ts +32 -0
  230. package/dist/components/workspace/__tests__/render-harness.svelte.d.ts.map +1 -0
  231. package/dist/components/workspace/__tests__/render-tools-dock.test.js +243 -0
  232. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte +58 -0
  233. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts +16 -0
  234. package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts.map +1 -0
  235. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte +41 -0
  236. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts +13 -0
  237. package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts.map +1 -0
  238. package/dist/components/workspace/__tests__/test-icon.svelte +17 -0
  239. package/dist/components/workspace/__tests__/test-icon.svelte.d.ts +19 -0
  240. package/dist/components/workspace/__tests__/test-icon.svelte.d.ts.map +1 -0
  241. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte +38 -0
  242. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts +22 -0
  243. package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts.map +1 -0
  244. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts +65 -0
  245. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts.map +1 -0
  246. package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.js +115 -0
  247. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts +15 -0
  248. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts.map +1 -0
  249. package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.js +7 -0
  250. package/dist/components/workspace/__tests__/typed-tool-fixture.test.js +115 -0
  251. package/dist/components/workspace/__tests__/use-harness-orphan.svelte +9 -0
  252. package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts +19 -0
  253. package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts.map +1 -0
  254. package/dist/components/workspace/__tests__/use-harness.svelte +23 -0
  255. package/dist/components/workspace/__tests__/use-harness.svelte.d.ts +8 -0
  256. package/dist/components/workspace/__tests__/use-harness.svelte.d.ts.map +1 -0
  257. package/dist/components/workspace/__tests__/use-tools-dock.test.js +33 -0
  258. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte +43 -0
  259. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts +11 -0
  260. package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts.map +1 -0
  261. package/dist/components/workspace/breadcrumbs-helpers.d.ts +44 -0
  262. package/dist/components/workspace/breadcrumbs-helpers.d.ts.map +1 -0
  263. package/dist/components/workspace/breadcrumbs-helpers.js +88 -0
  264. package/dist/components/workspace/index.d.ts +16 -0
  265. package/dist/components/workspace/index.d.ts.map +1 -0
  266. package/dist/components/workspace/index.js +14 -0
  267. package/dist/components/workspace/manifest-nav.d.ts +200 -0
  268. package/dist/components/workspace/manifest-nav.d.ts.map +1 -0
  269. package/dist/components/workspace/manifest-nav.js +408 -0
  270. package/dist/components/workspace/nav-helpers.d.ts +36 -0
  271. package/dist/components/workspace/nav-helpers.d.ts.map +1 -0
  272. package/dist/components/workspace/nav-helpers.js +60 -0
  273. package/dist/components/workspace/server/__tests__/compose-availability.test.js +383 -0
  274. package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts +78 -0
  275. package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts.map +1 -0
  276. package/dist/components/workspace/server/__tests__/typed-context-fixture.js +104 -0
  277. package/dist/components/workspace/server/compose-availability.d.ts +73 -0
  278. package/dist/components/workspace/server/compose-availability.d.ts.map +1 -0
  279. package/dist/components/workspace/server/compose-availability.js +114 -0
  280. package/dist/components/workspace/server/index.d.ts +13 -0
  281. package/dist/components/workspace/server/index.d.ts.map +1 -0
  282. package/dist/components/workspace/server/index.js +11 -0
  283. package/dist/components/workspace/server/types.d.ts +108 -0
  284. package/dist/components/workspace/server/types.d.ts.map +1 -0
  285. package/dist/components/workspace/server/types.js +11 -0
  286. package/dist/components/workspace/tools-dock/ToolsDock.svelte +565 -0
  287. package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts +14 -0
  288. package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts.map +1 -0
  289. package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts +143 -0
  290. package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts.map +1 -0
  291. package/dist/components/workspace/tools-dock/define-tools-dock.svelte.js +487 -0
  292. package/dist/components/workspace/tools-dock/use-tools-dock.d.ts +41 -0
  293. package/dist/components/workspace/tools-dock/use-tools-dock.d.ts.map +1 -0
  294. package/dist/components/workspace/tools-dock/use-tools-dock.js +50 -0
  295. package/dist/components/workspace/types.d.ts +372 -0
  296. package/dist/components/workspace/types.d.ts.map +1 -0
  297. package/dist/components/workspace/types.js +6 -0
  298. package/dist/hooks/index.d.ts +11 -0
  299. package/dist/hooks/index.d.ts.map +1 -0
  300. package/dist/hooks/index.js +10 -0
  301. package/dist/hooks/useAppState.svelte.d.ts +46 -0
  302. package/dist/hooks/useAppState.svelte.d.ts.map +1 -0
  303. package/dist/hooks/useAppState.svelte.js +59 -0
  304. package/dist/hooks/useAuth.svelte.d.ts +41 -0
  305. package/dist/hooks/useAuth.svelte.d.ts.map +1 -0
  306. package/dist/hooks/useAuth.svelte.js +43 -0
  307. package/dist/hooks/useLLM.svelte.d.ts +69 -0
  308. package/dist/hooks/useLLM.svelte.d.ts.map +1 -0
  309. package/dist/hooks/useLLM.svelte.js +85 -0
  310. package/dist/hooks/useSTT.svelte.d.ts +68 -0
  311. package/dist/hooks/useSTT.svelte.d.ts.map +1 -0
  312. package/dist/hooks/useSTT.svelte.js +97 -0
  313. package/dist/hooks/useSocket.svelte.d.ts +45 -0
  314. package/dist/hooks/useSocket.svelte.d.ts.map +1 -0
  315. package/dist/hooks/useSocket.svelte.js +54 -0
  316. package/dist/hooks/useTTS.svelte.d.ts +65 -0
  317. package/dist/hooks/useTTS.svelte.d.ts.map +1 -0
  318. package/dist/hooks/useTTS.svelte.js +93 -0
  319. package/dist/hooks/useTheme.d.ts +13 -0
  320. package/dist/hooks/useTheme.d.ts.map +1 -0
  321. package/dist/hooks/useTheme.js +16 -0
  322. package/dist/i18n/__tests__/server.spec.js +50 -0
  323. package/dist/i18n/server.d.ts +47 -0
  324. package/dist/i18n/server.d.ts.map +1 -0
  325. package/dist/i18n/server.js +58 -0
  326. package/dist/i18n/strings.forms.d.ts +33 -0
  327. package/dist/i18n/strings.forms.d.ts.map +1 -0
  328. package/dist/i18n/strings.forms.js +54 -0
  329. package/dist/i18n/strings.workspace.d.ts +34 -0
  330. package/dist/i18n/strings.workspace.d.ts.map +1 -0
  331. package/dist/i18n/strings.workspace.js +40 -0
  332. package/dist/index.d.ts +18 -0
  333. package/dist/index.d.ts.map +1 -0
  334. package/dist/index.js +23 -0
  335. package/dist/state/__tests__/warm-clients.test.js +40 -0
  336. package/dist/state/app-state.d.ts +308 -0
  337. package/dist/state/app-state.d.ts.map +1 -0
  338. package/dist/state/app-state.js +64 -0
  339. package/dist/state/app-state.svelte.d.ts +196 -0
  340. package/dist/state/app-state.svelte.d.ts.map +1 -0
  341. package/dist/state/app-state.svelte.js +774 -0
  342. package/dist/state/context.d.ts +23 -0
  343. package/dist/state/context.d.ts.map +1 -0
  344. package/dist/state/context.js +32 -0
  345. package/dist/state/form-context.d.ts +59 -0
  346. package/dist/state/form-context.d.ts.map +1 -0
  347. package/dist/state/form-context.js +31 -0
  348. package/dist/state/form-group-context.d.ts +13 -0
  349. package/dist/state/form-group-context.d.ts.map +1 -0
  350. package/dist/state/form-group-context.js +28 -0
  351. package/dist/state/index.d.ts +9 -0
  352. package/dist/state/index.d.ts.map +1 -0
  353. package/dist/state/index.js +8 -0
  354. package/dist/state/warm-clients.d.ts +136 -0
  355. package/dist/state/warm-clients.d.ts.map +1 -0
  356. package/dist/state/warm-clients.js +231 -0
  357. package/package.json +137 -0
@@ -0,0 +1,53 @@
1
+ /**
2
+ * TTS adapter factory with type guards
3
+ *
4
+ * Uses discriminated unions and lazy loading following SDK patterns.
5
+ */
6
+ import type { BrowserSynthesisTTSOptions, TTSAdapter } from './types.js';
7
+ /**
8
+ * Options for getting a TTS adapter
9
+ */
10
+ export type GetTTSOptions = (BrowserSynthesisTTSOptions & {
11
+ type?: 'browser-synthesis';
12
+ }) | {
13
+ type: 'transformers';
14
+ };
15
+ /**
16
+ * Create a TTS adapter
17
+ *
18
+ * Uses lazy loading to only import the requested adapter.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // Browser Speech Synthesis (default)
23
+ * const tts = await getTTS();
24
+ *
25
+ * // Explicit Browser Synthesis
26
+ * const tts = await getTTS({ type: 'browser-synthesis' });
27
+ *
28
+ * // With custom defaults
29
+ * const tts = await getTTS({ defaultRate: 1.2, defaultVoice: 'Google US English' });
30
+ * ```
31
+ */
32
+ export declare function getTTS(options?: GetTTSOptions): Promise<TTSAdapter>;
33
+ /**
34
+ * Auto-detect and create the best available TTS adapter
35
+ *
36
+ * Selection priority:
37
+ * 1. Browser Speech Synthesis (no download, instant)
38
+ * 2. Transformers.js TTS (requires model download)
39
+ *
40
+ * @throws {Error} If no TTS adapter is available
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * const tts = await getTTSAuto();
45
+ * console.log(`Using ${tts.type} adapter`);
46
+ * ```
47
+ */
48
+ export declare function getTTSAuto(options?: Partial<Omit<GetTTSOptions, 'type'>>): Promise<TTSAdapter>;
49
+ /**
50
+ * Check if a specific TTS backend is available
51
+ */
52
+ export declare function isTTSAvailable(type: 'browser-synthesis' | 'transformers'): boolean;
53
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/browser-ai/adapters/tts/factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,CAAC,0BAA0B,GAAG;IAAE,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,GAC7D;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;AAoB7B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgB7E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAM,GACjD,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,mBAAmB,GAAG,cAAc,GACzC,OAAO,CAYT"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * TTS adapter factory with type guards
3
+ *
4
+ * Uses discriminated unions and lazy loading following SDK patterns.
5
+ */
6
+ import { detectCapabilities, getBestTTSBackend, } from '../../capabilities/detector.js';
7
+ import { UnsupportedAdapterError } from '../../core/errors.js';
8
+ /**
9
+ * Type guard for Browser Speech Synthesis options
10
+ */
11
+ function isBrowserSynthesisOptions(options) {
12
+ return !options.type || options.type === 'browser-synthesis';
13
+ }
14
+ /**
15
+ * Type guard for Transformers.js TTS options
16
+ */
17
+ function isTransformersOptions(options) {
18
+ return options.type === 'transformers';
19
+ }
20
+ /**
21
+ * Create a TTS adapter
22
+ *
23
+ * Uses lazy loading to only import the requested adapter.
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * // Browser Speech Synthesis (default)
28
+ * const tts = await getTTS();
29
+ *
30
+ * // Explicit Browser Synthesis
31
+ * const tts = await getTTS({ type: 'browser-synthesis' });
32
+ *
33
+ * // With custom defaults
34
+ * const tts = await getTTS({ defaultRate: 1.2, defaultVoice: 'Google US English' });
35
+ * ```
36
+ */
37
+ export async function getTTS(options = {}) {
38
+ if (isBrowserSynthesisOptions(options)) {
39
+ const { BrowserSynthesisTTSAdapter } = await import('./browser-synthesis.js');
40
+ return new BrowserSynthesisTTSAdapter(options);
41
+ }
42
+ if (isTransformersOptions(options)) {
43
+ // Transformers.js TTS not yet implemented
44
+ throw new UnsupportedAdapterError('transformers', ['browser-synthesis']);
45
+ }
46
+ throw new UnsupportedAdapterError(options.type, [
47
+ 'browser-synthesis',
48
+ ]);
49
+ }
50
+ /**
51
+ * Auto-detect and create the best available TTS adapter
52
+ *
53
+ * Selection priority:
54
+ * 1. Browser Speech Synthesis (no download, instant)
55
+ * 2. Transformers.js TTS (requires model download)
56
+ *
57
+ * @throws {Error} If no TTS adapter is available
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * const tts = await getTTSAuto();
62
+ * console.log(`Using ${tts.type} adapter`);
63
+ * ```
64
+ */
65
+ export async function getTTSAuto(options = {}) {
66
+ const caps = detectCapabilities();
67
+ const backend = getBestTTSBackend(caps);
68
+ if (!backend) {
69
+ throw new Error('No TTS capability available in this browser');
70
+ }
71
+ if (backend === 'browser-synthesis') {
72
+ return getTTS({
73
+ type: 'browser-synthesis',
74
+ ...options,
75
+ });
76
+ }
77
+ // Transformers.js TTS not yet implemented
78
+ throw new Error('Transformers.js TTS not yet implemented');
79
+ }
80
+ /**
81
+ * Check if a specific TTS backend is available
82
+ */
83
+ export function isTTSAvailable(type) {
84
+ const caps = detectCapabilities();
85
+ if (type === 'browser-synthesis') {
86
+ return caps.tts.browserSynthesisAPI;
87
+ }
88
+ if (type === 'transformers') {
89
+ return caps.tts.transformersTTS;
90
+ }
91
+ return false;
92
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Text-to-Speech adapters
3
+ */
4
+ export { BrowserSynthesisTTSAdapter } from './browser-synthesis.js';
5
+ export * from './factory.js';
6
+ export * from './types.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/browser-ai/adapters/tts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Text-to-Speech adapters
3
+ */
4
+ export { BrowserSynthesisTTSAdapter } from './browser-synthesis.js';
5
+ export * from './factory.js';
6
+ export * from './types.js';
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Text-to-Speech adapter types
3
+ */
4
+ import type { InitState, OnProgress } from '../../core/types.js';
5
+ /**
6
+ * Voice information
7
+ */
8
+ export interface TTSVoice {
9
+ /** Voice identifier */
10
+ id: string;
11
+ /** Display name */
12
+ name: string;
13
+ /** Language code (BCP-47) */
14
+ language: string;
15
+ /** Whether this is a local voice */
16
+ local: boolean;
17
+ /** Whether this is the default voice */
18
+ default: boolean;
19
+ }
20
+ /**
21
+ * TTS synthesis options
22
+ */
23
+ export interface TTSOptions {
24
+ /** Voice to use (by id or name) */
25
+ voice?: string;
26
+ /** Language code (BCP-47) */
27
+ language?: string;
28
+ /** Speech rate (0.1 to 10, default 1) */
29
+ rate?: number;
30
+ /** Pitch (0 to 2, default 1) */
31
+ pitch?: number;
32
+ /** Volume (0 to 1, default 1) */
33
+ volume?: number;
34
+ }
35
+ /**
36
+ * TTS adapter capabilities
37
+ */
38
+ export interface TTSCapabilities {
39
+ /** Available voices */
40
+ voices: TTSVoice[];
41
+ /** Supports SSML markup */
42
+ ssml: boolean;
43
+ /** Supports rate adjustment */
44
+ rateRange: {
45
+ min: number;
46
+ max: number;
47
+ };
48
+ /** Supports pitch adjustment */
49
+ pitchRange: {
50
+ min: number;
51
+ max: number;
52
+ };
53
+ /** Requires download */
54
+ requiresDownload: boolean;
55
+ }
56
+ /**
57
+ * Browser Speech Synthesis adapter options
58
+ */
59
+ export interface BrowserSynthesisTTSOptions {
60
+ /** Default language */
61
+ defaultLanguage?: string;
62
+ /** Default voice name */
63
+ defaultVoice?: string;
64
+ /** Default rate */
65
+ defaultRate?: number;
66
+ /** Default pitch */
67
+ defaultPitch?: number;
68
+ /** Default volume */
69
+ defaultVolume?: number;
70
+ }
71
+ /**
72
+ * TTS adapter interface
73
+ */
74
+ export interface TTSAdapter {
75
+ /** Adapter type identifier */
76
+ readonly type: 'browser-synthesis' | 'transformers';
77
+ /** Current initialization state */
78
+ readonly initState: InitState;
79
+ /**
80
+ * Ensure the adapter is initialized
81
+ * @param onProgress Optional progress callback for downloads
82
+ */
83
+ ensureInitialized(onProgress?: OnProgress): Promise<void>;
84
+ /**
85
+ * Get adapter capabilities
86
+ */
87
+ getCapabilities(): TTSCapabilities;
88
+ /**
89
+ * Get available voices
90
+ */
91
+ getVoices(): TTSVoice[];
92
+ /**
93
+ * Speak text
94
+ * @param text Text to speak
95
+ * @param options Synthesis options
96
+ * @returns Promise that resolves when speech is complete
97
+ */
98
+ speak(text: string, options?: TTSOptions): Promise<void>;
99
+ /**
100
+ * Stop current speech
101
+ */
102
+ stop(): void;
103
+ /**
104
+ * Pause current speech
105
+ */
106
+ pause(): void;
107
+ /**
108
+ * Resume paused speech
109
+ */
110
+ resume(): void;
111
+ /**
112
+ * Check if currently speaking
113
+ */
114
+ isSpeaking(): boolean;
115
+ /**
116
+ * Check if paused
117
+ */
118
+ isPaused(): boolean;
119
+ /**
120
+ * Register callback for when speech starts
121
+ */
122
+ onStart(callback: () => void): () => void;
123
+ /**
124
+ * Register callback for when speech ends
125
+ */
126
+ onEnd(callback: () => void): () => void;
127
+ /**
128
+ * Register callback for errors
129
+ */
130
+ onError(callback: (error: Error) => void): () => void;
131
+ /**
132
+ * Register callback for word boundary events
133
+ */
134
+ onBoundary(callback: (charIndex: number, charLength: number) => void): () => void;
135
+ /**
136
+ * Dispose of resources
137
+ */
138
+ dispose(): Promise<void>;
139
+ }
140
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/browser-ai/adapters/tts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Text-to-Speech adapter types
3
+ */
4
+ export {};
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Browser capability detection for AI features
3
+ */
4
+ import type { BrowserAICapabilities } from '../core/types.js';
5
+ /**
6
+ * Detect all browser AI capabilities
7
+ * This is synchronous and cheap to call - no network requests
8
+ */
9
+ export declare function detectCapabilities(): BrowserAICapabilities;
10
+ /**
11
+ * Check if any STT capability is available
12
+ */
13
+ export declare function hasSTT(caps: BrowserAICapabilities): boolean;
14
+ /**
15
+ * Check if any TTS capability is available
16
+ */
17
+ export declare function hasTTS(caps: BrowserAICapabilities): boolean;
18
+ /**
19
+ * Check if any LLM capability is available
20
+ */
21
+ export declare function hasLLM(caps: BrowserAICapabilities): boolean;
22
+ /**
23
+ * Check if "smrt" mode can be enabled (at least one AI capability available)
24
+ */
25
+ export declare function canEnableSmrtMode(caps: BrowserAICapabilities): boolean;
26
+ /**
27
+ * Get the best available STT backend
28
+ */
29
+ export declare function getBestSTTBackend(caps: BrowserAICapabilities): 'whisper-wasm' | 'browser-speech' | null;
30
+ /**
31
+ * Get the best available TTS backend
32
+ */
33
+ export declare function getBestTTSBackend(caps: BrowserAICapabilities): 'browser-synthesis' | 'transformers' | null;
34
+ /**
35
+ * Get the best available LLM backend
36
+ */
37
+ export declare function getBestLLMBackend(caps: BrowserAICapabilities): 'webllm' | 'transformers-llm' | null;
38
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/browser-ai/capabilities/detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,CAS1D;AAqJD;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAE3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,GAC1B,cAAc,GAAG,gBAAgB,GAAG,IAAI,CAY1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,GAC1B,mBAAmB,GAAG,cAAc,GAAG,IAAI,CAS7C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,qBAAqB,GAC1B,QAAQ,GAAG,kBAAkB,GAAG,IAAI,CAYtC"}
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Browser capability detection for AI features
3
+ */
4
+ /**
5
+ * Detect all browser AI capabilities
6
+ * This is synchronous and cheap to call - no network requests
7
+ */
8
+ export function detectCapabilities() {
9
+ const browser = detectBrowserCapabilities();
10
+ return {
11
+ stt: detectSTTCapabilities(browser),
12
+ tts: detectTTSCapabilities(browser),
13
+ llm: detectLLMCapabilities(browser),
14
+ browser,
15
+ };
16
+ }
17
+ /**
18
+ * Detect general browser capabilities
19
+ */
20
+ function detectBrowserCapabilities() {
21
+ // Check if we're in a browser environment
22
+ const isBrowser = typeof window !== 'undefined';
23
+ if (!isBrowser) {
24
+ return {
25
+ sharedArrayBuffer: false,
26
+ webWorkers: false,
27
+ indexedDB: false,
28
+ wasmSupport: false,
29
+ wasmSimd: false,
30
+ };
31
+ }
32
+ return {
33
+ sharedArrayBuffer: typeof SharedArrayBuffer !== 'undefined',
34
+ webWorkers: typeof Worker !== 'undefined',
35
+ indexedDB: typeof indexedDB !== 'undefined',
36
+ wasmSupport: typeof WebAssembly !== 'undefined',
37
+ wasmSimd: detectWasmSimd(),
38
+ };
39
+ }
40
+ /**
41
+ * Detect WASM SIMD support
42
+ */
43
+ function detectWasmSimd() {
44
+ if (typeof WebAssembly === 'undefined')
45
+ return false;
46
+ try {
47
+ // SIMD detection via a minimal WASM module that uses SIMD
48
+ // This is the standard way to detect SIMD support
49
+ const simdTest = new Uint8Array([
50
+ 0x00,
51
+ 0x61,
52
+ 0x73,
53
+ 0x6d, // WASM magic
54
+ 0x01,
55
+ 0x00,
56
+ 0x00,
57
+ 0x00, // Version 1
58
+ 0x01,
59
+ 0x05,
60
+ 0x01,
61
+ 0x60,
62
+ 0x00,
63
+ 0x01,
64
+ 0x7b, // Type section: () -> v128
65
+ 0x03,
66
+ 0x02,
67
+ 0x01,
68
+ 0x00, // Function section
69
+ 0x0a,
70
+ 0x0a,
71
+ 0x01,
72
+ 0x08,
73
+ 0x00,
74
+ 0xfd,
75
+ 0x0c, // Code with v128.const
76
+ 0x00,
77
+ 0x00,
78
+ 0x00,
79
+ 0x00,
80
+ 0x00,
81
+ 0x00,
82
+ 0x00,
83
+ 0x00,
84
+ 0x00,
85
+ 0x00,
86
+ 0x00,
87
+ 0x00,
88
+ 0x00,
89
+ 0x00,
90
+ 0x00,
91
+ 0x00,
92
+ 0x0b,
93
+ ]);
94
+ return WebAssembly.validate(simdTest);
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Detect STT capabilities
102
+ */
103
+ function detectSTTCapabilities(browser) {
104
+ const isBrowser = typeof window !== 'undefined';
105
+ return {
106
+ // Web Speech API
107
+ browserSpeechAPI: isBrowser &&
108
+ ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window),
109
+ // Whisper WASM requires WASM support
110
+ // SharedArrayBuffer is nice for threading but not strictly required
111
+ whisperWasm: browser.wasmSupport,
112
+ };
113
+ }
114
+ /**
115
+ * Detect TTS capabilities
116
+ */
117
+ function detectTTSCapabilities(browser) {
118
+ const isBrowser = typeof window !== 'undefined';
119
+ return {
120
+ // Speech Synthesis API
121
+ browserSynthesisAPI: isBrowser && 'speechSynthesis' in window,
122
+ // Transformers.js TTS requires WASM
123
+ transformersTTS: browser.wasmSupport,
124
+ };
125
+ }
126
+ /**
127
+ * Detect LLM capabilities
128
+ */
129
+ function detectLLMCapabilities(browser) {
130
+ const isBrowser = typeof window !== 'undefined';
131
+ // Check for WebGPU
132
+ const webgpu = isBrowser && 'gpu' in navigator;
133
+ return {
134
+ // WebLLM requires WebGPU for good performance
135
+ // Can fall back to WASM but very slow
136
+ webllm: webgpu || browser.wasmSupport,
137
+ // Transformers.js can use WASM
138
+ transformersLLM: browser.wasmSupport,
139
+ // WebGPU for acceleration
140
+ webgpu,
141
+ };
142
+ }
143
+ /**
144
+ * Check if any STT capability is available
145
+ */
146
+ export function hasSTT(caps) {
147
+ return caps.stt.browserSpeechAPI || caps.stt.whisperWasm;
148
+ }
149
+ /**
150
+ * Check if any TTS capability is available
151
+ */
152
+ export function hasTTS(caps) {
153
+ return caps.tts.browserSynthesisAPI || caps.tts.transformersTTS;
154
+ }
155
+ /**
156
+ * Check if any LLM capability is available
157
+ */
158
+ export function hasLLM(caps) {
159
+ return caps.llm.webllm || caps.llm.transformersLLM;
160
+ }
161
+ /**
162
+ * Check if "smrt" mode can be enabled (at least one AI capability available)
163
+ */
164
+ export function canEnableSmrtMode(caps) {
165
+ return hasSTT(caps) || hasTTS(caps) || hasLLM(caps);
166
+ }
167
+ /**
168
+ * Get the best available STT backend
169
+ */
170
+ export function getBestSTTBackend(caps) {
171
+ // Prefer Whisper for accuracy if available
172
+ if (caps.stt.whisperWasm && caps.llm.webgpu) {
173
+ return 'whisper-wasm';
174
+ }
175
+ if (caps.stt.browserSpeechAPI) {
176
+ return 'browser-speech';
177
+ }
178
+ if (caps.stt.whisperWasm) {
179
+ return 'whisper-wasm';
180
+ }
181
+ return null;
182
+ }
183
+ /**
184
+ * Get the best available TTS backend
185
+ */
186
+ export function getBestTTSBackend(caps) {
187
+ // Prefer browser synthesis (no download, instant)
188
+ if (caps.tts.browserSynthesisAPI) {
189
+ return 'browser-synthesis';
190
+ }
191
+ if (caps.tts.transformersTTS) {
192
+ return 'transformers';
193
+ }
194
+ return null;
195
+ }
196
+ /**
197
+ * Get the best available LLM backend
198
+ */
199
+ export function getBestLLMBackend(caps) {
200
+ // Prefer WebLLM with WebGPU for performance
201
+ if (caps.llm.webllm && caps.llm.webgpu) {
202
+ return 'webllm';
203
+ }
204
+ if (caps.llm.transformersLLM) {
205
+ return 'transformers-llm';
206
+ }
207
+ if (caps.llm.webllm) {
208
+ return 'webllm';
209
+ }
210
+ return null;
211
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Error classes for browser AI capabilities
3
+ */
4
+ /**
5
+ * Base error class for browser AI operations
6
+ */
7
+ export declare class BrowserAIError extends Error {
8
+ code: string;
9
+ adapter?: string | undefined;
10
+ constructor(message: string, code: string, adapter?: string | undefined);
11
+ }
12
+ /**
13
+ * Thrown when an adapter fails to initialize
14
+ */
15
+ export declare class InitializationError extends BrowserAIError {
16
+ constructor(adapter: string, reason?: string);
17
+ }
18
+ /**
19
+ * Thrown when a required capability is not available
20
+ */
21
+ export declare class CapabilityNotAvailableError extends BrowserAIError {
22
+ constructor(capability: string, adapter?: string);
23
+ }
24
+ /**
25
+ * Thrown when a model download fails
26
+ */
27
+ export declare class DownloadError extends BrowserAIError {
28
+ url: string;
29
+ constructor(url: string, reason?: string, adapter?: string);
30
+ }
31
+ /**
32
+ * Thrown when model loading fails
33
+ */
34
+ export declare class ModelLoadError extends BrowserAIError {
35
+ model: string;
36
+ constructor(model: string, reason?: string, adapter?: string);
37
+ }
38
+ /**
39
+ * Thrown when an operation times out
40
+ */
41
+ export declare class TimeoutError extends BrowserAIError {
42
+ constructor(operation: string, timeoutMs: number, adapter?: string);
43
+ }
44
+ /**
45
+ * Thrown when user denies permission (e.g., microphone access)
46
+ */
47
+ export declare class PermissionDeniedError extends BrowserAIError {
48
+ constructor(permission: string, adapter?: string);
49
+ }
50
+ /**
51
+ * Thrown when an adapter is not in the correct state for an operation
52
+ */
53
+ export declare class InvalidStateError extends BrowserAIError {
54
+ constructor(expectedState: string, actualState: string, adapter?: string);
55
+ }
56
+ /**
57
+ * Thrown when an adapter type is not supported
58
+ */
59
+ export declare class UnsupportedAdapterError extends BrowserAIError {
60
+ constructor(adapterType: string, supportedTypes: string[]);
61
+ }
62
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/browser-ai/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAG9B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,MAAM;gBAFvB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,YAAA;CAK1B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;gBACzC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAQ7C;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,cAAc;gBACjD,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAQjD;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAEtC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM;CASnB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAEvC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM;CASnB;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,cAAc;gBAClC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAQnE;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc;gBAC3C,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAIjD;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;gBACvC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAQzE;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,cAAc;gBAC7C,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE;CAO1D"}