@runanywhere/core 0.16.11 → 0.17.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 (217) hide show
  1. package/README.md +427 -0
  2. package/RunAnywhereCore.podspec +4 -4
  3. package/cpp/HybridRunAnywhereCore.cpp +10 -4
  4. package/cpp/bridges/TelemetryBridge.cpp +10 -3
  5. package/ios/.testlocal +0 -0
  6. package/nitrogen/generated/shared/c++/HybridRunAnywhereCoreSpec.hpp +1 -1
  7. package/package.json +12 -11
  8. package/src/Features/VoiceSession/AudioCaptureManager.ts +274 -109
  9. package/src/Features/VoiceSession/AudioPlaybackManager.ts +247 -59
  10. package/src/Features/VoiceSession/VoiceSessionHandle.ts +200 -133
  11. package/src/Public/Extensions/RunAnywhere+Audio.ts +688 -0
  12. package/src/Public/Extensions/RunAnywhere+VoiceSession.ts +15 -11
  13. package/src/Public/Extensions/index.ts +25 -0
  14. package/src/Public/RunAnywhere.ts +36 -14
  15. package/android/src/main/include/rac/backends/rac_llm_llamacpp.h +0 -218
  16. package/android/src/main/include/rac/backends/rac_stt_onnx.h +0 -99
  17. package/android/src/main/include/rac/backends/rac_stt_whispercpp.h +0 -153
  18. package/android/src/main/include/rac/backends/rac_tts_onnx.h +0 -71
  19. package/android/src/main/include/rac/backends/rac_vad_onnx.h +0 -84
  20. package/android/src/main/include/rac/core/capabilities/rac_lifecycle.h +0 -290
  21. package/android/src/main/include/rac/core/rac_analytics_events.h +0 -610
  22. package/android/src/main/include/rac/core/rac_audio_utils.h +0 -88
  23. package/android/src/main/include/rac/core/rac_component_types.h +0 -160
  24. package/android/src/main/include/rac/core/rac_core.h +0 -331
  25. package/android/src/main/include/rac/core/rac_error.h +0 -469
  26. package/android/src/main/include/rac/core/rac_events.h +0 -334
  27. package/android/src/main/include/rac/core/rac_logger.h +0 -416
  28. package/android/src/main/include/rac/core/rac_platform_adapter.h +0 -340
  29. package/android/src/main/include/rac/core/rac_sdk_state.h +0 -292
  30. package/android/src/main/include/rac/core/rac_structured_error.h +0 -594
  31. package/android/src/main/include/rac/core/rac_types.h +0 -264
  32. package/android/src/main/include/rac/features/llm/rac_llm.h +0 -17
  33. package/android/src/main/include/rac/features/llm/rac_llm_analytics.h +0 -188
  34. package/android/src/main/include/rac/features/llm/rac_llm_component.h +0 -228
  35. package/android/src/main/include/rac/features/llm/rac_llm_events.h +0 -215
  36. package/android/src/main/include/rac/features/llm/rac_llm_metrics.h +0 -402
  37. package/android/src/main/include/rac/features/llm/rac_llm_service.h +0 -163
  38. package/android/src/main/include/rac/features/llm/rac_llm_structured_output.h +0 -141
  39. package/android/src/main/include/rac/features/llm/rac_llm_types.h +0 -384
  40. package/android/src/main/include/rac/features/platform/rac_llm_platform.h +0 -204
  41. package/android/src/main/include/rac/features/platform/rac_tts_platform.h +0 -197
  42. package/android/src/main/include/rac/features/stt/rac_stt.h +0 -17
  43. package/android/src/main/include/rac/features/stt/rac_stt_analytics.h +0 -204
  44. package/android/src/main/include/rac/features/stt/rac_stt_component.h +0 -162
  45. package/android/src/main/include/rac/features/stt/rac_stt_events.h +0 -62
  46. package/android/src/main/include/rac/features/stt/rac_stt_service.h +0 -154
  47. package/android/src/main/include/rac/features/stt/rac_stt_types.h +0 -389
  48. package/android/src/main/include/rac/features/tts/rac_tts.h +0 -17
  49. package/android/src/main/include/rac/features/tts/rac_tts_analytics.h +0 -181
  50. package/android/src/main/include/rac/features/tts/rac_tts_component.h +0 -158
  51. package/android/src/main/include/rac/features/tts/rac_tts_events.h +0 -54
  52. package/android/src/main/include/rac/features/tts/rac_tts_service.h +0 -162
  53. package/android/src/main/include/rac/features/tts/rac_tts_types.h +0 -374
  54. package/android/src/main/include/rac/features/vad/rac_vad.h +0 -17
  55. package/android/src/main/include/rac/features/vad/rac_vad_analytics.h +0 -236
  56. package/android/src/main/include/rac/features/vad/rac_vad_component.h +0 -185
  57. package/android/src/main/include/rac/features/vad/rac_vad_energy.h +0 -443
  58. package/android/src/main/include/rac/features/vad/rac_vad_events.h +0 -76
  59. package/android/src/main/include/rac/features/vad/rac_vad_service.h +0 -167
  60. package/android/src/main/include/rac/features/vad/rac_vad_types.h +0 -244
  61. package/android/src/main/include/rac/features/voice_agent/rac_voice_agent.h +0 -612
  62. package/android/src/main/include/rac/infrastructure/device/rac_device_manager.h +0 -176
  63. package/android/src/main/include/rac/infrastructure/download/rac_download.h +0 -418
  64. package/android/src/main/include/rac/infrastructure/events/rac_events.h +0 -177
  65. package/android/src/main/include/rac/infrastructure/model_management/rac_model_assignment.h +0 -169
  66. package/android/src/main/include/rac/infrastructure/model_management/rac_model_paths.h +0 -258
  67. package/android/src/main/include/rac/infrastructure/model_management/rac_model_registry.h +0 -357
  68. package/android/src/main/include/rac/infrastructure/model_management/rac_model_strategy.h +0 -374
  69. package/android/src/main/include/rac/infrastructure/model_management/rac_model_types.h +0 -613
  70. package/android/src/main/include/rac/infrastructure/network/rac_api_types.h +0 -335
  71. package/android/src/main/include/rac/infrastructure/network/rac_auth_manager.h +0 -252
  72. package/android/src/main/include/rac/infrastructure/network/rac_dev_config.h +0 -85
  73. package/android/src/main/include/rac/infrastructure/network/rac_endpoints.h +0 -102
  74. package/android/src/main/include/rac/infrastructure/network/rac_environment.h +0 -220
  75. package/android/src/main/include/rac/infrastructure/network/rac_http_client.h +0 -233
  76. package/android/src/main/include/rac/infrastructure/storage/rac_storage_analyzer.h +0 -286
  77. package/android/src/main/include/rac/infrastructure/telemetry/rac_telemetry_manager.h +0 -206
  78. package/android/src/main/include/rac/infrastructure/telemetry/rac_telemetry_types.h +0 -234
  79. package/android/src/main/jniLibs/arm64-v8a/libc++_shared.so +0 -0
  80. package/android/src/main/jniLibs/arm64-v8a/libomp.so +0 -0
  81. package/android/src/main/jniLibs/arm64-v8a/librac_commons.so +0 -0
  82. package/android/src/main/jniLibs/arm64-v8a/librunanywhere_jni.so +0 -0
  83. package/ios/Frameworks/RACommons.xcframework/Info.plist +0 -44
  84. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/RACommons.h +0 -67
  85. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_analytics_events.h +0 -610
  86. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_api_types.h +0 -335
  87. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_audio_utils.h +0 -88
  88. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_auth_manager.h +0 -252
  89. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_component_types.h +0 -160
  90. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_core.h +0 -331
  91. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_dev_config.h +0 -85
  92. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_device_manager.h +0 -176
  93. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_download.h +0 -418
  94. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_endpoints.h +0 -102
  95. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_environment.h +0 -220
  96. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_error.h +0 -469
  97. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_events.h +0 -177
  98. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_http_client.h +0 -233
  99. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_lifecycle.h +0 -290
  100. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm.h +0 -17
  101. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_analytics.h +0 -188
  102. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_component.h +0 -228
  103. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_events.h +0 -215
  104. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_llamacpp.h +0 -218
  105. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_metrics.h +0 -402
  106. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_platform.h +0 -204
  107. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_service.h +0 -163
  108. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_structured_output.h +0 -141
  109. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_llm_types.h +0 -384
  110. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_logger.h +0 -416
  111. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_assignment.h +0 -169
  112. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_paths.h +0 -258
  113. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_registry.h +0 -357
  114. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_strategy.h +0 -374
  115. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_model_types.h +0 -613
  116. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_platform_adapter.h +0 -340
  117. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_sdk_state.h +0 -292
  118. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_storage_analyzer.h +0 -286
  119. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_structured_error.h +0 -594
  120. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt.h +0 -17
  121. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_analytics.h +0 -204
  122. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_component.h +0 -162
  123. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_events.h +0 -62
  124. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_onnx.h +0 -99
  125. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_service.h +0 -154
  126. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_types.h +0 -389
  127. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_stt_whispercpp.h +0 -153
  128. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_telemetry_manager.h +0 -206
  129. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_telemetry_types.h +0 -234
  130. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts.h +0 -17
  131. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_analytics.h +0 -181
  132. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_component.h +0 -158
  133. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_events.h +0 -54
  134. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_onnx.h +0 -71
  135. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_platform.h +0 -197
  136. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_service.h +0 -162
  137. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_tts_types.h +0 -374
  138. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_types.h +0 -264
  139. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad.h +0 -17
  140. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_analytics.h +0 -236
  141. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_component.h +0 -185
  142. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_energy.h +0 -443
  143. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_events.h +0 -76
  144. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_onnx.h +0 -84
  145. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_service.h +0 -167
  146. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_vad_types.h +0 -244
  147. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Headers/rac_voice_agent.h +0 -612
  148. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Info.plist +0 -11
  149. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/Modules/module.modulemap +0 -5
  150. package/ios/Frameworks/RACommons.xcframework/ios-arm64/RACommons.framework/RACommons +0 -0
  151. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/RACommons.h +0 -67
  152. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_analytics_events.h +0 -610
  153. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_api_types.h +0 -335
  154. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_audio_utils.h +0 -88
  155. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_auth_manager.h +0 -252
  156. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_component_types.h +0 -160
  157. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_core.h +0 -331
  158. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_dev_config.h +0 -85
  159. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_device_manager.h +0 -176
  160. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_download.h +0 -418
  161. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_endpoints.h +0 -102
  162. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_environment.h +0 -220
  163. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_error.h +0 -469
  164. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_events.h +0 -177
  165. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_http_client.h +0 -233
  166. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_lifecycle.h +0 -290
  167. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm.h +0 -17
  168. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_analytics.h +0 -188
  169. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_component.h +0 -228
  170. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_events.h +0 -215
  171. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_llamacpp.h +0 -218
  172. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_metrics.h +0 -402
  173. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_platform.h +0 -204
  174. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_service.h +0 -163
  175. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_structured_output.h +0 -141
  176. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_llm_types.h +0 -384
  177. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_logger.h +0 -416
  178. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_assignment.h +0 -169
  179. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_paths.h +0 -258
  180. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_registry.h +0 -357
  181. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_strategy.h +0 -374
  182. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_model_types.h +0 -613
  183. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_platform_adapter.h +0 -340
  184. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_sdk_state.h +0 -292
  185. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_storage_analyzer.h +0 -286
  186. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_structured_error.h +0 -594
  187. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt.h +0 -17
  188. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_analytics.h +0 -204
  189. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_component.h +0 -162
  190. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_events.h +0 -62
  191. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_onnx.h +0 -99
  192. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_service.h +0 -154
  193. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_types.h +0 -389
  194. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_stt_whispercpp.h +0 -153
  195. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_telemetry_manager.h +0 -206
  196. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_telemetry_types.h +0 -234
  197. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts.h +0 -17
  198. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_analytics.h +0 -181
  199. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_component.h +0 -158
  200. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_events.h +0 -54
  201. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_onnx.h +0 -71
  202. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_platform.h +0 -197
  203. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_service.h +0 -162
  204. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_tts_types.h +0 -374
  205. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_types.h +0 -264
  206. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad.h +0 -17
  207. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_analytics.h +0 -236
  208. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_component.h +0 -185
  209. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_energy.h +0 -443
  210. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_events.h +0 -76
  211. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_onnx.h +0 -84
  212. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_service.h +0 -167
  213. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_vad_types.h +0 -244
  214. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Headers/rac_voice_agent.h +0 -612
  215. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Info.plist +0 -11
  216. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/Modules/module.modulemap +0 -5
  217. package/ios/Frameworks/RACommons.xcframework/ios-arm64_x86_64-simulator/RACommons.framework/RACommons +0 -0
@@ -7,11 +7,34 @@
7
7
  * Reference: sdk/runanywhere-swift/Sources/RunAnywhere/Features/TTS/Services/AudioPlaybackManager.swift
8
8
  */
9
9
 
10
+ import { Platform, NativeModules } from 'react-native';
10
11
  import { EventBus } from '../../Public/Events';
11
12
  import { SDKLogger } from '../../Foundation/Logging/Logger/SDKLogger';
12
13
 
13
14
  const logger = new SDKLogger('AudioPlaybackManager');
14
15
 
16
+ // Native iOS Audio Module
17
+ const NativeAudioModule = Platform.OS === 'ios' ? NativeModules.NativeAudioModule : null;
18
+
19
+ // Lazy load react-native-sound for Android
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ let Sound: any = null;
22
+
23
+ function getSound() {
24
+ if (Platform.OS === 'ios') return null;
25
+ if (!Sound) {
26
+ try {
27
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
28
+ Sound = require('react-native-sound').default;
29
+ Sound.setCategory('Playback');
30
+ } catch {
31
+ logger.warning('react-native-sound not available');
32
+ return null;
33
+ }
34
+ }
35
+ return Sound;
36
+ }
37
+
15
38
  /**
16
39
  * Playback state
17
40
  */
@@ -33,7 +56,6 @@ export type PlaybackErrorCallback = (error: Error) => void;
33
56
  export interface PlaybackConfig {
34
57
  /** Volume (0.0 - 1.0) */
35
58
  volume?: number;
36
-
37
59
  /** Playback rate multiplier */
38
60
  rate?: number;
39
61
  }
@@ -42,7 +64,9 @@ export interface PlaybackConfig {
42
64
  * AudioPlaybackManager
43
65
  *
44
66
  * Handles audio playback for TTS and other audio output needs.
45
- * Uses React Native's audio APIs or native modules for cross-platform support.
67
+ * Uses platform-native audio APIs:
68
+ * - iOS: NativeAudioModule (AVAudioPlayer)
69
+ * - Android: react-native-sound
46
70
  */
47
71
  export class AudioPlaybackManager {
48
72
  private state: PlaybackState = 'idle';
@@ -50,9 +74,10 @@ export class AudioPlaybackManager {
50
74
  private rate = 1.0;
51
75
  private completionCallback: PlaybackCompletionCallback | null = null;
52
76
  private errorCallback: PlaybackErrorCallback | null = null;
53
- private currentAudioData: ArrayBuffer | null = null;
54
77
  private playbackStartTime: number | null = null;
55
78
  private playbackDuration: number | null = null;
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ private currentSound: any = null;
56
81
 
57
82
  constructor(config: PlaybackConfig = {}) {
58
83
  this.volume = config.volume ?? 1.0;
@@ -95,11 +120,12 @@ export class AudioPlaybackManager {
95
120
  }
96
121
 
97
122
  /**
98
- * Play audio data
99
- * @param audioData Audio data to play (WAV format expected)
123
+ * Play audio data (base64 PCM float32 from TTS)
124
+ * @param audioData Base64 encoded audio data from TTS synthesis
125
+ * @param sampleRate Sample rate of the audio (default: 22050)
100
126
  * @returns Promise that resolves when playback completes
101
127
  */
102
- async play(audioData: ArrayBuffer | string): Promise<void> {
128
+ async play(audioData: ArrayBuffer | string, sampleRate = 22050): Promise<void> {
103
129
  if (this.state === 'playing') {
104
130
  this.stop();
105
131
  }
@@ -108,69 +134,47 @@ export class AudioPlaybackManager {
108
134
  logger.info('Loading audio for playback...');
109
135
 
110
136
  try {
111
- // Convert base64 string to ArrayBuffer if needed
112
- let data: ArrayBuffer;
137
+ // Convert base64 PCM to WAV file
138
+ let wavPath: string;
113
139
  if (typeof audioData === 'string') {
114
- // Decode base64
115
- const binaryString = atob(audioData);
116
- const bytes = new Uint8Array(binaryString.length);
117
- for (let i = 0; i < binaryString.length; i++) {
118
- bytes[i] = binaryString.charCodeAt(i);
119
- }
120
- data = bytes.buffer;
140
+ wavPath = await this.createWavFromPCMFloat32(audioData, sampleRate);
121
141
  } else {
122
- data = audioData;
142
+ // ArrayBuffer - convert to base64 first
143
+ const base64 = this.arrayBufferToBase64(audioData);
144
+ wavPath = await this.createWavFromPCMFloat32(base64, sampleRate);
123
145
  }
124
146
 
125
- this.currentAudioData = data;
126
- this.playbackStartTime = Date.now();
127
-
128
- // Estimate duration from audio data
129
- // Assuming 16-bit PCM at 22050 Hz (common TTS output)
130
- this.playbackDuration = data.byteLength / (22050 * 2);
131
-
132
- this.state = 'playing';
133
- logger.info(`Playing audio (${(data.byteLength / 1024).toFixed(1)} KB)`);
134
-
135
- EventBus.publish('Voice', {
136
- type: 'playbackStarted',
137
- duration: this.playbackDuration,
138
- });
139
-
140
- // In production, this would use actual audio playback APIs:
141
- // - expo-av Audio.Sound
142
- // - react-native-audio-api
143
- // - or a custom native module
144
-
145
- // For now, simulate playback completion after estimated duration
146
- return new Promise((resolve, reject) => {
147
- const timeoutMs = (this.playbackDuration ?? 1) * 1000 / this.rate;
148
-
149
- setTimeout(() => {
150
- if (this.state === 'playing') {
151
- this.handlePlaybackComplete();
152
- resolve();
153
- } else if (this.state === 'error') {
154
- reject(new Error('Playback failed'));
155
- } else {
156
- resolve(); // Stopped or paused
157
- }
158
- }, timeoutMs);
159
- });
147
+ // Play the WAV file
148
+ await this.playFile(wavPath);
160
149
 
161
150
  } catch (error) {
162
151
  this.state = 'error';
163
- logger.error(`Playback failed: ${error}`);
164
- EventBus.publish('Voice', { type: 'playbackFailed', error: String(error) });
152
+ const err = error instanceof Error ? error : new Error(String(error));
153
+ logger.error(`Playback failed: ${err.message}`);
154
+ EventBus.publish('Voice', { type: 'playbackFailed', error: err.message });
155
+
156
+ if (this.errorCallback) {
157
+ this.errorCallback(err);
158
+ }
165
159
  throw error;
166
160
  }
167
161
  }
168
162
 
169
163
  /**
170
- * Play audio from base64 string
164
+ * Play audio from file path
171
165
  */
172
- async playBase64(base64Audio: string): Promise<void> {
173
- return this.play(base64Audio);
166
+ async playFile(filePath: string): Promise<void> {
167
+ this.playbackStartTime = Date.now();
168
+ this.state = 'playing';
169
+
170
+ logger.info(`Playing audio file: ${filePath}`);
171
+ EventBus.publish('Voice', { type: 'playbackStarted' });
172
+
173
+ if (Platform.OS === 'ios') {
174
+ await this.playFileIOS(filePath);
175
+ } else {
176
+ await this.playFileAndroid(filePath);
177
+ }
174
178
  }
175
179
 
176
180
  /**
@@ -183,7 +187,14 @@ export class AudioPlaybackManager {
183
187
 
184
188
  logger.info('Stopping playback');
185
189
  this.state = 'stopped';
186
- this.currentAudioData = null;
190
+
191
+ if (Platform.OS === 'ios' && NativeAudioModule) {
192
+ NativeAudioModule.stopPlayback().catch(() => {});
193
+ } else if (this.currentSound) {
194
+ this.currentSound.stop();
195
+ this.currentSound.release();
196
+ this.currentSound = null;
197
+ }
187
198
 
188
199
  EventBus.publish('Voice', { type: 'playbackStopped' });
189
200
 
@@ -198,6 +209,13 @@ export class AudioPlaybackManager {
198
209
  pause(): void {
199
210
  if (this.state === 'playing') {
200
211
  this.state = 'paused';
212
+
213
+ if (Platform.OS === 'ios' && NativeAudioModule) {
214
+ NativeAudioModule.pausePlayback().catch(() => {});
215
+ } else if (this.currentSound) {
216
+ this.currentSound.pause();
217
+ }
218
+
201
219
  logger.info('Playback paused');
202
220
  EventBus.publish('Voice', { type: 'playbackPaused' });
203
221
  }
@@ -209,6 +227,13 @@ export class AudioPlaybackManager {
209
227
  resume(): void {
210
228
  if (this.state === 'paused') {
211
229
  this.state = 'playing';
230
+
231
+ if (Platform.OS === 'ios' && NativeAudioModule) {
232
+ NativeAudioModule.resumePlayback().catch(() => {});
233
+ } else if (this.currentSound) {
234
+ this.currentSound.play();
235
+ }
236
+
212
237
  logger.info('Playback resumed');
213
238
  EventBus.publish('Voice', { type: 'playbackResumed' });
214
239
  }
@@ -220,6 +245,9 @@ export class AudioPlaybackManager {
220
245
  */
221
246
  setVolume(volume: number): void {
222
247
  this.volume = Math.max(0, Math.min(1, volume));
248
+ if (this.currentSound) {
249
+ this.currentSound.setVolume(this.volume);
250
+ }
223
251
  logger.debug(`Volume set to ${this.volume}`);
224
252
  }
225
253
 
@@ -270,20 +298,93 @@ export class AudioPlaybackManager {
270
298
  this.stop();
271
299
  this.completionCallback = null;
272
300
  this.errorCallback = null;
273
- this.currentAudioData = null;
274
301
  this.state = 'idle';
275
302
  logger.info('AudioPlaybackManager cleaned up');
276
303
  }
277
304
 
278
305
  // Private methods
279
306
 
307
+ private async playFileIOS(filePath: string): Promise<void> {
308
+ if (!NativeAudioModule) {
309
+ throw new Error('NativeAudioModule not available');
310
+ }
311
+
312
+ return new Promise((resolve, reject) => {
313
+ NativeAudioModule.playAudio(filePath)
314
+ .then((result: { duration: number }) => {
315
+ this.playbackDuration = result.duration;
316
+
317
+ // Wait for playback to complete
318
+ const checkInterval = setInterval(async () => {
319
+ if (this.state !== 'playing') {
320
+ clearInterval(checkInterval);
321
+ resolve();
322
+ return;
323
+ }
324
+
325
+ try {
326
+ const status = await NativeAudioModule.getPlaybackStatus();
327
+ if (!status.isPlaying) {
328
+ clearInterval(checkInterval);
329
+ this.handlePlaybackComplete();
330
+ resolve();
331
+ }
332
+ } catch {
333
+ clearInterval(checkInterval);
334
+ this.handlePlaybackComplete();
335
+ resolve();
336
+ }
337
+ }, 100);
338
+ })
339
+ .catch((error: Error) => {
340
+ this.state = 'error';
341
+ reject(error);
342
+ });
343
+ });
344
+ }
345
+
346
+ private async playFileAndroid(filePath: string): Promise<void> {
347
+ const SoundClass = getSound();
348
+ if (!SoundClass) {
349
+ throw new Error('react-native-sound not available');
350
+ }
351
+
352
+ return new Promise((resolve, reject) => {
353
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
354
+ this.currentSound = new SoundClass(filePath, '', (error: any) => {
355
+ if (error) {
356
+ this.state = 'error';
357
+ reject(error);
358
+ return;
359
+ }
360
+
361
+ this.playbackDuration = this.currentSound.getDuration();
362
+ this.currentSound.setVolume(this.volume);
363
+
364
+ this.currentSound.play((success: boolean) => {
365
+ if (this.currentSound) {
366
+ this.currentSound.release();
367
+ this.currentSound = null;
368
+ }
369
+
370
+ if (success) {
371
+ this.handlePlaybackComplete();
372
+ resolve();
373
+ } else {
374
+ this.state = 'error';
375
+ reject(new Error('Playback failed'));
376
+ }
377
+ });
378
+ });
379
+ });
380
+ }
381
+
280
382
  private handlePlaybackComplete(): void {
281
383
  const duration = this.playbackStartTime
282
384
  ? (Date.now() - this.playbackStartTime) / 1000
283
385
  : 0;
284
386
 
285
387
  this.state = 'idle';
286
- this.currentAudioData = null;
287
388
  this.playbackStartTime = null;
288
389
 
289
390
  logger.info(`Playback completed (${duration.toFixed(2)}s)`);
@@ -297,4 +398,91 @@ export class AudioPlaybackManager {
297
398
  this.completionCallback();
298
399
  }
299
400
  }
401
+
402
+ /**
403
+ * Convert base64 PCM float32 audio to WAV file
404
+ * TTS output is base64-encoded float32 PCM samples
405
+ */
406
+ private async createWavFromPCMFloat32(audioBase64: string, sampleRate: number): Promise<string> {
407
+ // Decode base64 to get raw bytes
408
+ const binaryString = atob(audioBase64);
409
+ const bytes = new Uint8Array(binaryString.length);
410
+ for (let i = 0; i < binaryString.length; i++) {
411
+ bytes[i] = binaryString.charCodeAt(i);
412
+ }
413
+
414
+ // Convert float32 samples to int16 (WAV compatible)
415
+ const floatView = new Float32Array(bytes.buffer);
416
+ const numSamples = floatView.length;
417
+ const int16Samples = new Int16Array(numSamples);
418
+
419
+ for (let i = 0; i < numSamples; i++) {
420
+ const floatSample = floatView[i] ?? 0;
421
+ const sample = Math.max(-1, Math.min(1, floatSample));
422
+ int16Samples[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;
423
+ }
424
+
425
+ // Create WAV header (44 bytes)
426
+ const wavDataSize = int16Samples.length * 2;
427
+ const wavBuffer = new ArrayBuffer(44 + wavDataSize);
428
+ const wavView = new DataView(wavBuffer);
429
+
430
+ // RIFF header
431
+ this.writeString(wavView, 0, 'RIFF');
432
+ wavView.setUint32(4, 36 + wavDataSize, true);
433
+ this.writeString(wavView, 8, 'WAVE');
434
+
435
+ // fmt chunk
436
+ this.writeString(wavView, 12, 'fmt ');
437
+ wavView.setUint32(16, 16, true);
438
+ wavView.setUint16(20, 1, true); // PCM
439
+ wavView.setUint16(22, 1, true); // mono
440
+ wavView.setUint32(24, sampleRate, true);
441
+ wavView.setUint32(28, sampleRate * 2, true);
442
+ wavView.setUint16(32, 2, true);
443
+ wavView.setUint16(34, 16, true);
444
+
445
+ // data chunk
446
+ this.writeString(wavView, 36, 'data');
447
+ wavView.setUint32(40, wavDataSize, true);
448
+
449
+ // Copy audio data
450
+ const wavBytes = new Uint8Array(wavBuffer);
451
+ const int16Bytes = new Uint8Array(int16Samples.buffer);
452
+ for (let i = 0; i < int16Bytes.length; i++) {
453
+ wavBytes[44 + i] = int16Bytes[i]!;
454
+ }
455
+
456
+ // Write to file
457
+ try {
458
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
459
+ const RNFS = require('react-native-fs');
460
+ const fileName = `tts_${Date.now()}.wav`;
461
+ const filePath = `${RNFS.CachesDirectoryPath}/${fileName}`;
462
+
463
+ const wavBase64 = this.arrayBufferToBase64(wavBuffer);
464
+ await RNFS.writeFile(filePath, wavBase64, 'base64');
465
+
466
+ logger.info(`WAV file created: ${filePath}`);
467
+ return filePath;
468
+ } catch (error) {
469
+ logger.error(`Failed to create WAV file: ${error}`);
470
+ throw error;
471
+ }
472
+ }
473
+
474
+ private writeString(view: DataView, offset: number, str: string): void {
475
+ for (let i = 0; i < str.length; i++) {
476
+ view.setUint8(offset + i, str.charCodeAt(i));
477
+ }
478
+ }
479
+
480
+ private arrayBufferToBase64(buffer: ArrayBuffer): string {
481
+ const bytes = new Uint8Array(buffer);
482
+ let binary = '';
483
+ for (let i = 0; i < bytes.length; i++) {
484
+ binary += String.fromCharCode(bytes[i]!);
485
+ }
486
+ return btoa(binary);
487
+ }
300
488
  }