@pipedog/core 0.0.0 → 0.2.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 (736) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE +9 -0
  3. package/dist/adapters/base_llm_adapter.d.ts +266 -0
  4. package/dist/adapters/base_llm_adapter.js +489 -0
  5. package/dist/adapters/index.d.ts +2 -0
  6. package/dist/adapters/index.js +8 -0
  7. package/dist/adapters/schemas/direct_function.d.ts +202 -0
  8. package/dist/adapters/schemas/direct_function.js +302 -0
  9. package/dist/adapters/schemas/function_schema.d.ts +67 -0
  10. package/dist/adapters/schemas/function_schema.js +72 -0
  11. package/dist/adapters/schemas/index.d.ts +2 -0
  12. package/dist/adapters/schemas/index.js +8 -0
  13. package/dist/adapters/schemas/tools_schema.d.ts +57 -0
  14. package/dist/adapters/schemas/tools_schema.js +79 -0
  15. package/dist/adapters/services/index.d.ts +2 -0
  16. package/dist/adapters/services/index.js +8 -0
  17. package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
  18. package/dist/adapters/services/open_ai_adapter.js +250 -0
  19. package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
  20. package/dist/audio/dtmf/dtmf_data.js +22 -0
  21. package/dist/audio/dtmf/index.d.ts +2 -0
  22. package/dist/audio/dtmf/index.js +8 -0
  23. package/dist/audio/dtmf/types.d.ts +31 -0
  24. package/dist/audio/dtmf/types.js +35 -0
  25. package/dist/audio/dtmf/utils.d.ts +13 -0
  26. package/dist/audio/dtmf/utils.js +62 -0
  27. package/dist/audio/filters/base_audio_filter.d.ts +51 -0
  28. package/dist/audio/filters/base_audio_filter.js +17 -0
  29. package/dist/audio/filters/index.d.ts +2 -0
  30. package/dist/audio/filters/index.js +8 -0
  31. package/dist/audio/index.d.ts +2 -0
  32. package/dist/audio/index.js +8 -0
  33. package/dist/audio/krisp_instance.d.ts +95 -0
  34. package/dist/audio/krisp_instance.js +229 -0
  35. package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
  36. package/dist/audio/mixers/base_audio_mixer.js +16 -0
  37. package/dist/audio/mixers/index.d.ts +2 -0
  38. package/dist/audio/mixers/index.js +8 -0
  39. package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
  40. package/dist/audio/resamplers/base_audio_resampler.js +35 -0
  41. package/dist/audio/resamplers/engine.d.ts +60 -0
  42. package/dist/audio/resamplers/engine.js +89 -0
  43. package/dist/audio/resamplers/index.d.ts +2 -0
  44. package/dist/audio/resamplers/index.js +8 -0
  45. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  46. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  47. package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
  48. package/dist/audio/resamplers/sinc_engine.js +235 -0
  49. package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
  50. package/dist/audio/resamplers/soxr_resampler.js +79 -0
  51. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
  52. package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
  53. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  54. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  55. package/dist/audio/turn/index.d.ts +2 -0
  56. package/dist/audio/turn/index.js +8 -0
  57. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  58. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  59. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  60. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  61. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  62. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
  63. package/dist/audio/utils.d.ts +224 -0
  64. package/dist/audio/utils.js +634 -0
  65. package/dist/audio/vad/data/index.d.ts +2 -0
  66. package/dist/audio/vad/data/index.js +8 -0
  67. package/dist/audio/vad/index.d.ts +2 -0
  68. package/dist/audio/vad/index.js +8 -0
  69. package/dist/audio/vad/vad_analyzer.d.ts +134 -0
  70. package/dist/audio/vad/vad_analyzer.js +249 -0
  71. package/dist/audio/vad/vad_controller.d.ts +143 -0
  72. package/dist/audio/vad/vad_controller.js +228 -0
  73. package/dist/audio/volume.d.ts +38 -0
  74. package/dist/audio/volume.js +75 -0
  75. package/dist/bus/adapters/base.d.ts +35 -0
  76. package/dist/bus/adapters/base.js +19 -0
  77. package/dist/bus/adapters/index.d.ts +10 -0
  78. package/dist/bus/adapters/index.js +15 -0
  79. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  80. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  81. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  82. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  83. package/dist/bus/bridge_processor.d.ts +111 -0
  84. package/dist/bus/bridge_processor.js +166 -0
  85. package/dist/bus/bus.d.ts +110 -0
  86. package/dist/bus/bus.js +200 -0
  87. package/dist/bus/index.d.ts +22 -0
  88. package/dist/bus/index.js +27 -0
  89. package/dist/bus/local/async_queue.d.ts +12 -0
  90. package/dist/bus/local/async_queue.js +21 -0
  91. package/dist/bus/local/index.d.ts +3 -0
  92. package/dist/bus/local/index.js +8 -0
  93. package/dist/bus/messages.d.ts +378 -0
  94. package/dist/bus/messages.js +357 -0
  95. package/dist/bus/network/index.d.ts +16 -0
  96. package/dist/bus/network/index.js +21 -0
  97. package/dist/bus/queue.d.ts +27 -0
  98. package/dist/bus/queue.js +51 -0
  99. package/dist/bus/serializers/base.d.ts +25 -0
  100. package/dist/bus/serializers/base.js +14 -0
  101. package/dist/bus/serializers/index.d.ts +9 -0
  102. package/dist/bus/serializers/index.js +14 -0
  103. package/dist/bus/serializers/json.d.ts +77 -0
  104. package/dist/bus/serializers/json.js +367 -0
  105. package/dist/bus/subscriber.d.ts +46 -0
  106. package/dist/bus/subscriber.js +27 -0
  107. package/dist/bus/ui/index.d.ts +3 -0
  108. package/dist/bus/ui/index.js +8 -0
  109. package/dist/bus/ui/messages.d.ts +186 -0
  110. package/dist/bus/ui/messages.js +171 -0
  111. package/dist/classifiers/base_classifier.d.ts +263 -0
  112. package/dist/classifiers/base_classifier.js +346 -0
  113. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  114. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  115. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  116. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  117. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  118. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  119. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  120. package/dist/classifiers/cloudflare/index.js +8 -0
  121. package/dist/classifiers/http_client.d.ts +70 -0
  122. package/dist/classifiers/http_client.js +161 -0
  123. package/dist/classifiers/index.d.ts +2 -0
  124. package/dist/classifiers/index.js +8 -0
  125. package/dist/classifiers/jev/classifier.d.ts +8 -0
  126. package/dist/classifiers/jev/classifier.js +13 -0
  127. package/dist/classifiers/jev/client.d.ts +8 -0
  128. package/dist/classifiers/jev/client.js +13 -0
  129. package/dist/classifiers/jev/index.d.ts +2 -0
  130. package/dist/classifiers/jev/index.js +8 -0
  131. package/dist/classifiers/llm/classifier.d.ts +72 -0
  132. package/dist/classifiers/llm/classifier.js +304 -0
  133. package/dist/classifiers/llm/index.d.ts +2 -0
  134. package/dist/classifiers/llm/index.js +8 -0
  135. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  136. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  137. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  138. package/dist/classifiers/openai/decisions/client.js +234 -0
  139. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  140. package/dist/classifiers/openai/decisions/index.js +8 -0
  141. package/dist/classifiers/openai/index.d.ts +2 -0
  142. package/dist/classifiers/openai/index.js +8 -0
  143. package/dist/classifiers/typesafe/index.d.ts +2 -0
  144. package/dist/classifiers/typesafe/index.js +8 -0
  145. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  146. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  147. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  148. package/dist/classifiers/typesafe/jev/client.js +233 -0
  149. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  150. package/dist/classifiers/typesafe/jev/index.js +8 -0
  151. package/dist/clocks/base_clock.d.ts +13 -0
  152. package/dist/clocks/base_clock.js +14 -0
  153. package/dist/clocks/index.d.ts +2 -0
  154. package/dist/clocks/index.js +8 -0
  155. package/dist/clocks/system_clock.d.ts +15 -0
  156. package/dist/clocks/system_clock.js +25 -0
  157. package/dist/frames/frames.d.ts +2533 -0
  158. package/dist/frames/frames.js +2485 -0
  159. package/dist/frames/index.d.ts +2 -0
  160. package/dist/frames/index.js +8 -0
  161. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  162. package/dist/frames/protobufs/frames_pb2.js +466 -0
  163. package/dist/index.d.ts +11 -0
  164. package/dist/index.js +56 -0
  165. package/dist/metrics/index.d.ts +2 -0
  166. package/dist/metrics/index.js +8 -0
  167. package/dist/metrics/metrics.d.ts +276 -0
  168. package/dist/metrics/metrics.js +254 -0
  169. package/dist/observers/base_observer.d.ts +173 -0
  170. package/dist/observers/base_observer.js +151 -0
  171. package/dist/observers/error_observer.d.ts +75 -0
  172. package/dist/observers/error_observer.js +87 -0
  173. package/dist/observers/function_call_observer.d.ts +157 -0
  174. package/dist/observers/function_call_observer.js +222 -0
  175. package/dist/observers/index.d.ts +2 -0
  176. package/dist/observers/index.js +8 -0
  177. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  178. package/dist/observers/loggers/debug_log_observer.js +228 -0
  179. package/dist/observers/loggers/index.d.ts +2 -0
  180. package/dist/observers/loggers/index.js +8 -0
  181. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  182. package/dist/observers/loggers/llm_log_observer.js +110 -0
  183. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  184. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  185. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  186. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  187. package/dist/observers/service_metrics_observer.d.ts +168 -0
  188. package/dist/observers/service_metrics_observer.js +236 -0
  189. package/dist/observers/speaking_observer.d.ts +104 -0
  190. package/dist/observers/speaking_observer.js +150 -0
  191. package/dist/observers/startup_timing_observer.d.ts +221 -0
  192. package/dist/observers/startup_timing_observer.js +365 -0
  193. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  194. package/dist/observers/turn_tracking_observer.js +189 -0
  195. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  196. package/dist/observers/user_bot_latency_observer.js +974 -0
  197. package/dist/pipeline/base_pipeline.d.ts +49 -0
  198. package/dist/pipeline/base_pipeline.js +101 -0
  199. package/dist/pipeline/capabilities.d.ts +76 -0
  200. package/dist/pipeline/capabilities.js +97 -0
  201. package/dist/pipeline/index.d.ts +2 -0
  202. package/dist/pipeline/index.js +8 -0
  203. package/dist/pipeline/job_context.d.ts +317 -0
  204. package/dist/pipeline/job_context.js +450 -0
  205. package/dist/pipeline/job_decorator.d.ts +54 -0
  206. package/dist/pipeline/job_decorator.js +92 -0
  207. package/dist/pipeline/llm_switcher.d.ts +84 -0
  208. package/dist/pipeline/llm_switcher.js +107 -0
  209. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  210. package/dist/pipeline/llm_with_backend.js +806 -0
  211. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  212. package/dist/pipeline/parallel_pipeline.js +200 -0
  213. package/dist/pipeline/pipeline.d.ts +126 -0
  214. package/dist/pipeline/pipeline.js +196 -0
  215. package/dist/pipeline/service_switcher.d.ts +287 -0
  216. package/dist/pipeline/service_switcher.js +509 -0
  217. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  218. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  219. package/dist/pipeline/worker.d.ts +821 -0
  220. package/dist/pipeline/worker.js +1656 -0
  221. package/dist/pipeline/worker_observer.d.ts +131 -0
  222. package/dist/pipeline/worker_observer.js +274 -0
  223. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  224. package/dist/pipeline/worker_ready_decorator.js +76 -0
  225. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  226. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  227. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  228. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  229. package/dist/processors/aggregators/gated.d.ts +43 -0
  230. package/dist/processors/aggregators/gated.js +86 -0
  231. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  232. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  233. package/dist/processors/aggregators/index.d.ts +2 -0
  234. package/dist/processors/aggregators/index.js +8 -0
  235. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  236. package/dist/processors/aggregators/llm_context.js +580 -0
  237. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  238. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  239. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  240. package/dist/processors/aggregators/llm_response.js +71 -0
  241. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  242. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  243. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  244. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  245. package/dist/processors/aggregators/sentence.d.ts +39 -0
  246. package/dist/processors/aggregators/sentence.js +69 -0
  247. package/dist/processors/async_generator.d.ts +42 -0
  248. package/dist/processors/async_generator.js +76 -0
  249. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  250. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  251. package/dist/processors/audio/index.d.ts +2 -0
  252. package/dist/processors/audio/index.js +8 -0
  253. package/dist/processors/audio/vad_processor.d.ts +67 -0
  254. package/dist/processors/audio/vad_processor.js +103 -0
  255. package/dist/processors/consumer_processor.d.ts +49 -0
  256. package/dist/processors/consumer_processor.js +85 -0
  257. package/dist/processors/filters/frame_filter.d.ts +39 -0
  258. package/dist/processors/filters/frame_filter.js +52 -0
  259. package/dist/processors/filters/function_filter.d.ts +59 -0
  260. package/dist/processors/filters/function_filter.js +78 -0
  261. package/dist/processors/filters/identity_filter.d.ts +33 -0
  262. package/dist/processors/filters/identity_filter.js +37 -0
  263. package/dist/processors/filters/index.d.ts +2 -0
  264. package/dist/processors/filters/index.js +8 -0
  265. package/dist/processors/filters/null_filter.d.ts +34 -0
  266. package/dist/processors/filters/null_filter.js +47 -0
  267. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  268. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  269. package/dist/processors/frame_processor.d.ts +360 -0
  270. package/dist/processors/frame_processor.js +932 -0
  271. package/dist/processors/frameworks/index.d.ts +2 -0
  272. package/dist/processors/frameworks/index.js +8 -0
  273. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  274. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  275. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  276. package/dist/processors/frameworks/rtvi/index.js +11 -0
  277. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  278. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  279. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  280. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  281. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  282. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  283. package/dist/processors/idle_frame_processor.d.ts +44 -0
  284. package/dist/processors/idle_frame_processor.js +86 -0
  285. package/dist/processors/index.d.ts +2 -0
  286. package/dist/processors/index.js +8 -0
  287. package/dist/processors/logger.d.ts +42 -0
  288. package/dist/processors/logger.js +87 -0
  289. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  290. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  291. package/dist/processors/metrics/index.d.ts +2 -0
  292. package/dist/processors/metrics/index.js +8 -0
  293. package/dist/processors/producer_processor.d.ts +68 -0
  294. package/dist/processors/producer_processor.js +78 -0
  295. package/dist/processors/text_transformer.d.ts +30 -0
  296. package/dist/processors/text_transformer.js +48 -0
  297. package/dist/registry/index.d.ts +3 -0
  298. package/dist/registry/index.js +8 -0
  299. package/dist/registry/registry.d.ts +69 -0
  300. package/dist/registry/registry.js +149 -0
  301. package/dist/registry/types.d.ts +47 -0
  302. package/dist/registry/types.js +39 -0
  303. package/dist/serializers/base_serializer.d.ts +94 -0
  304. package/dist/serializers/base_serializer.js +82 -0
  305. package/dist/serializers/index.d.ts +2 -0
  306. package/dist/serializers/index.js +8 -0
  307. package/dist/services/ai_service.d.ts +145 -0
  308. package/dist/services/ai_service.js +262 -0
  309. package/dist/services/anthropic/index.d.ts +2 -0
  310. package/dist/services/anthropic/index.js +7 -0
  311. package/dist/services/assemblyai/index.d.ts +2 -0
  312. package/dist/services/assemblyai/index.js +7 -0
  313. package/dist/services/asyncai/index.d.ts +2 -0
  314. package/dist/services/asyncai/index.js +7 -0
  315. package/dist/services/aws/index.d.ts +2 -0
  316. package/dist/services/aws/index.js +7 -0
  317. package/dist/services/azure/index.d.ts +2 -0
  318. package/dist/services/azure/index.js +7 -0
  319. package/dist/services/baseten/index.d.ts +2 -0
  320. package/dist/services/baseten/index.js +7 -0
  321. package/dist/services/bland/index.d.ts +2 -0
  322. package/dist/services/bland/index.js +7 -0
  323. package/dist/services/camb/index.d.ts +2 -0
  324. package/dist/services/camb/index.js +7 -0
  325. package/dist/services/cartesia/index.d.ts +2 -0
  326. package/dist/services/cartesia/index.js +7 -0
  327. package/dist/services/cerebras/index.d.ts +2 -0
  328. package/dist/services/cerebras/index.js +7 -0
  329. package/dist/services/crusoe/index.d.ts +2 -0
  330. package/dist/services/crusoe/index.js +7 -0
  331. package/dist/services/deepgram/index.d.ts +2 -0
  332. package/dist/services/deepgram/index.js +7 -0
  333. package/dist/services/deepseek/index.d.ts +2 -0
  334. package/dist/services/deepseek/index.js +7 -0
  335. package/dist/services/elevenlabs/index.d.ts +2 -0
  336. package/dist/services/elevenlabs/index.js +7 -0
  337. package/dist/services/fal/index.d.ts +2 -0
  338. package/dist/services/fal/index.js +7 -0
  339. package/dist/services/fireworks/index.d.ts +2 -0
  340. package/dist/services/fireworks/index.js +7 -0
  341. package/dist/services/fish/index.d.ts +2 -0
  342. package/dist/services/fish/index.js +7 -0
  343. package/dist/services/funasr/index.d.ts +3 -0
  344. package/dist/services/funasr/index.js +8 -0
  345. package/dist/services/gladia/index.d.ts +2 -0
  346. package/dist/services/gladia/index.js +7 -0
  347. package/dist/services/google/index.d.ts +2 -0
  348. package/dist/services/google/index.js +7 -0
  349. package/dist/services/gradium/index.d.ts +2 -0
  350. package/dist/services/gradium/index.js +7 -0
  351. package/dist/services/grok/index.d.ts +2 -0
  352. package/dist/services/grok/index.js +7 -0
  353. package/dist/services/groq/index.d.ts +2 -0
  354. package/dist/services/groq/index.js +7 -0
  355. package/dist/services/heygen/index.d.ts +2 -0
  356. package/dist/services/heygen/index.js +7 -0
  357. package/dist/services/hume/index.d.ts +2 -0
  358. package/dist/services/hume/index.js +7 -0
  359. package/dist/services/image_service.d.ts +52 -0
  360. package/dist/services/image_service.js +60 -0
  361. package/dist/services/inception/index.d.ts +2 -0
  362. package/dist/services/inception/index.js +7 -0
  363. package/dist/services/index.d.ts +2 -0
  364. package/dist/services/index.js +8 -0
  365. package/dist/services/inworld/index.d.ts +2 -0
  366. package/dist/services/inworld/index.js +7 -0
  367. package/dist/services/keenable/index.d.ts +2 -0
  368. package/dist/services/keenable/index.js +7 -0
  369. package/dist/services/kokoro/index.d.ts +2 -0
  370. package/dist/services/kokoro/index.js +7 -0
  371. package/dist/services/llm_service.d.ts +1106 -0
  372. package/dist/services/llm_service.js +2231 -0
  373. package/dist/services/mem0/index.d.ts +2 -0
  374. package/dist/services/mem0/index.js +7 -0
  375. package/dist/services/meta/index.d.ts +2 -0
  376. package/dist/services/meta/index.js +7 -0
  377. package/dist/services/minimax/index.d.ts +2 -0
  378. package/dist/services/minimax/index.js +7 -0
  379. package/dist/services/mistral/index.d.ts +2 -0
  380. package/dist/services/mistral/index.js +7 -0
  381. package/dist/services/moondream/index.d.ts +2 -0
  382. package/dist/services/moondream/index.js +7 -0
  383. package/dist/services/moonshine/index.d.ts +2 -0
  384. package/dist/services/moonshine/index.js +7 -0
  385. package/dist/services/nebius/index.d.ts +2 -0
  386. package/dist/services/nebius/index.js +7 -0
  387. package/dist/services/neuphonic/index.d.ts +2 -0
  388. package/dist/services/neuphonic/index.js +7 -0
  389. package/dist/services/novita/index.d.ts +2 -0
  390. package/dist/services/novita/index.js +7 -0
  391. package/dist/services/nvidia/index.d.ts +2 -0
  392. package/dist/services/nvidia/index.js +11 -0
  393. package/dist/services/ollama/index.d.ts +2 -0
  394. package/dist/services/ollama/index.js +7 -0
  395. package/dist/services/openai/index.d.ts +2 -0
  396. package/dist/services/openai/index.js +7 -0
  397. package/dist/services/openclaw/index.d.ts +14 -0
  398. package/dist/services/openclaw/index.js +19 -0
  399. package/dist/services/openrouter/index.d.ts +2 -0
  400. package/dist/services/openrouter/index.js +7 -0
  401. package/dist/services/perplexity/index.d.ts +2 -0
  402. package/dist/services/perplexity/index.js +7 -0
  403. package/dist/services/piper/index.d.ts +2 -0
  404. package/dist/services/piper/index.js +7 -0
  405. package/dist/services/pocket_tts/index.d.ts +2 -0
  406. package/dist/services/pocket_tts/index.js +7 -0
  407. package/dist/services/qwen/index.d.ts +2 -0
  408. package/dist/services/qwen/index.js +7 -0
  409. package/dist/services/resembleai/index.d.ts +2 -0
  410. package/dist/services/resembleai/index.js +7 -0
  411. package/dist/services/rime/index.d.ts +2 -0
  412. package/dist/services/rime/index.js +7 -0
  413. package/dist/services/sambanova/index.d.ts +2 -0
  414. package/dist/services/sambanova/index.js +7 -0
  415. package/dist/services/sarvam/index.d.ts +2 -0
  416. package/dist/services/sarvam/index.js +7 -0
  417. package/dist/services/settings.d.ts +356 -0
  418. package/dist/services/settings.js +437 -0
  419. package/dist/services/simli/index.d.ts +2 -0
  420. package/dist/services/simli/index.js +7 -0
  421. package/dist/services/smallest/index.d.ts +2 -0
  422. package/dist/services/smallest/index.js +7 -0
  423. package/dist/services/soniox/index.d.ts +2 -0
  424. package/dist/services/soniox/index.js +7 -0
  425. package/dist/services/speechify/index.d.ts +2 -0
  426. package/dist/services/speechify/index.js +7 -0
  427. package/dist/services/speechmatics/index.d.ts +2 -0
  428. package/dist/services/speechmatics/index.js +7 -0
  429. package/dist/services/stt_latency.d.ts +62 -0
  430. package/dist/services/stt_latency.js +71 -0
  431. package/dist/services/stt_service.d.ts +601 -0
  432. package/dist/services/stt_service.js +1044 -0
  433. package/dist/services/tavus/index.d.ts +2 -0
  434. package/dist/services/tavus/index.js +7 -0
  435. package/dist/services/together/index.d.ts +2 -0
  436. package/dist/services/together/index.js +7 -0
  437. package/dist/services/tts_service.d.ts +909 -0
  438. package/dist/services/tts_service.js +2018 -0
  439. package/dist/services/ultravox/index.d.ts +2 -0
  440. package/dist/services/ultravox/index.js +9 -0
  441. package/dist/services/vision_service.d.ts +56 -0
  442. package/dist/services/vision_service.js +62 -0
  443. package/dist/services/websocket_service.d.ts +213 -0
  444. package/dist/services/websocket_service.js +654 -0
  445. package/dist/services/whisper/index.d.ts +2 -0
  446. package/dist/services/whisper/index.js +9 -0
  447. package/dist/services/xai/index.d.ts +2 -0
  448. package/dist/services/xai/index.js +9 -0
  449. package/dist/services/xtts/index.d.ts +2 -0
  450. package/dist/services/xtts/index.js +9 -0
  451. package/dist/tests/index.d.ts +2 -0
  452. package/dist/tests/index.js +8 -0
  453. package/dist/tests/utils.d.ts +123 -0
  454. package/dist/tests/utils.js +212 -0
  455. package/dist/transcriptions/index.d.ts +2 -0
  456. package/dist/transcriptions/index.js +8 -0
  457. package/dist/transcriptions/language.d.ts +376 -0
  458. package/dist/transcriptions/language.js +543 -0
  459. package/dist/transports/base_input.d.ts +149 -0
  460. package/dist/transports/base_input.js +338 -0
  461. package/dist/transports/base_output.d.ts +432 -0
  462. package/dist/transports/base_output.js +1231 -0
  463. package/dist/transports/base_transport.d.ts +223 -0
  464. package/dist/transports/base_transport.js +167 -0
  465. package/dist/transports/daily/index.d.ts +2 -0
  466. package/dist/transports/daily/index.js +9 -0
  467. package/dist/transports/heygen/index.d.ts +2 -0
  468. package/dist/transports/heygen/index.js +9 -0
  469. package/dist/transports/index.d.ts +2 -0
  470. package/dist/transports/index.js +8 -0
  471. package/dist/transports/lemonslice/index.d.ts +2 -0
  472. package/dist/transports/lemonslice/index.js +9 -0
  473. package/dist/transports/livekit/index.d.ts +2 -0
  474. package/dist/transports/livekit/index.js +9 -0
  475. package/dist/transports/local/index.d.ts +2 -0
  476. package/dist/transports/local/index.js +9 -0
  477. package/dist/transports/moq/index.d.ts +2 -0
  478. package/dist/transports/moq/index.js +9 -0
  479. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  480. package/dist/transports/smallwebrtc/index.js +9 -0
  481. package/dist/transports/tavus/index.d.ts +2 -0
  482. package/dist/transports/tavus/index.js +9 -0
  483. package/dist/transports/video_in_sampler.d.ts +157 -0
  484. package/dist/transports/video_in_sampler.js +258 -0
  485. package/dist/transports/vonage/index.d.ts +2 -0
  486. package/dist/transports/vonage/index.js +9 -0
  487. package/dist/transports/websocket/index.d.ts +2 -0
  488. package/dist/transports/websocket/index.js +9 -0
  489. package/dist/transports/whatsapp/index.d.ts +2 -0
  490. package/dist/transports/whatsapp/index.js +9 -0
  491. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  492. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  493. package/dist/turns/empty_user_turn.d.ts +55 -0
  494. package/dist/turns/empty_user_turn.js +53 -0
  495. package/dist/turns/index.d.ts +2 -0
  496. package/dist/turns/index.js +8 -0
  497. package/dist/turns/speculation_gate.d.ts +169 -0
  498. package/dist/turns/speculation_gate.js +294 -0
  499. package/dist/turns/types.d.ts +33 -0
  500. package/dist/turns/types.js +35 -0
  501. package/dist/turns/user_idle_controller.d.ts +94 -0
  502. package/dist/turns/user_idle_controller.js +187 -0
  503. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  504. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  505. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  506. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  507. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  508. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  509. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  510. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  511. package/dist/turns/user_mute/index.d.ts +6 -0
  512. package/dist/turns/user_mute/index.js +11 -0
  513. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  514. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  515. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  516. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  517. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  518. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  519. package/dist/turns/user_start/index.d.ts +8 -0
  520. package/dist/turns/user_start/index.js +16 -0
  521. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  522. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  523. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  524. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  525. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  526. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  527. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  528. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  529. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  530. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  531. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  532. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  533. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  534. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  535. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  536. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  537. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  538. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  539. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  540. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  541. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  542. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  543. package/dist/turns/user_stop/index.d.ts +10 -0
  544. package/dist/turns/user_stop/index.js +15 -0
  545. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  546. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  547. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  548. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  549. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  550. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  551. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  552. package/dist/turns/user_turn_completion_mixin.js +591 -0
  553. package/dist/turns/user_turn_controller.d.ts +134 -0
  554. package/dist/turns/user_turn_controller.js +335 -0
  555. package/dist/turns/user_turn_processor.d.ts +87 -0
  556. package/dist/turns/user_turn_processor.js +180 -0
  557. package/dist/turns/user_turn_strategies.d.ts +187 -0
  558. package/dist/turns/user_turn_strategies.js +222 -0
  559. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  560. package/dist/utils/async_tool_cancellation.js +78 -0
  561. package/dist/utils/asyncio/index.d.ts +2 -0
  562. package/dist/utils/asyncio/index.js +7 -0
  563. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  564. package/dist/utils/asyncio/task_manager.js +105 -0
  565. package/dist/utils/base_object.d.ts +76 -0
  566. package/dist/utils/base_object.js +154 -0
  567. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  568. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  569. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  570. package/dist/utils/context/audio_context_manager.js +233 -0
  571. package/dist/utils/context/index.d.ts +2 -0
  572. package/dist/utils/context/index.js +7 -0
  573. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  574. package/dist/utils/context/llm_context_summarization.js +511 -0
  575. package/dist/utils/context/text_segment_map.d.ts +611 -0
  576. package/dist/utils/context/text_segment_map.js +1132 -0
  577. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  578. package/dist/utils/context/word_completion_tracker.js +441 -0
  579. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  580. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  581. package/dist/utils/deprecation.d.ts +28 -0
  582. package/dist/utils/deprecation.js +75 -0
  583. package/dist/utils/env.d.ts +38 -0
  584. package/dist/utils/env.js +62 -0
  585. package/dist/utils/errors.d.ts +75 -0
  586. package/dist/utils/errors.js +202 -0
  587. package/dist/utils/file_resolver.d.ts +126 -0
  588. package/dist/utils/file_resolver.js +314 -0
  589. package/dist/utils/file_storage.d.ts +115 -0
  590. package/dist/utils/file_storage.js +178 -0
  591. package/dist/utils/frame_queue.d.ts +36 -0
  592. package/dist/utils/frame_queue.js +66 -0
  593. package/dist/utils/http.d.ts +39 -0
  594. package/dist/utils/http.js +53 -0
  595. package/dist/utils/image.d.ts +14 -0
  596. package/dist/utils/image.js +63 -0
  597. package/dist/utils/index.d.ts +2 -0
  598. package/dist/utils/index.js +8 -0
  599. package/dist/utils/jpeg_encoder.d.ts +14 -0
  600. package/dist/utils/jpeg_encoder.js +315 -0
  601. package/dist/utils/log_config.d.ts +34 -0
  602. package/dist/utils/log_config.js +76 -0
  603. package/dist/utils/logger.d.ts +40 -0
  604. package/dist/utils/logger.js +91 -0
  605. package/dist/utils/mixin.d.ts +14 -0
  606. package/dist/utils/mixin.js +63 -0
  607. package/dist/utils/network.d.ts +73 -0
  608. package/dist/utils/network.js +90 -0
  609. package/dist/utils/security/allowed_origins.d.ts +16 -0
  610. package/dist/utils/security/allowed_origins.js +34 -0
  611. package/dist/utils/security/index.d.ts +2 -0
  612. package/dist/utils/security/index.js +7 -0
  613. package/dist/utils/security/redaction.d.ts +27 -0
  614. package/dist/utils/security/redaction.js +123 -0
  615. package/dist/utils/security/ssrf.d.ts +79 -0
  616. package/dist/utils/security/ssrf.js +327 -0
  617. package/dist/utils/shared.d.ts +35 -0
  618. package/dist/utils/shared.js +136 -0
  619. package/dist/utils/startup.d.ts +17 -0
  620. package/dist/utils/startup.js +130 -0
  621. package/dist/utils/string.d.ts +116 -0
  622. package/dist/utils/string.js +460 -0
  623. package/dist/utils/sync/base_notifier.d.ts +25 -0
  624. package/dist/utils/sync/base_notifier.js +16 -0
  625. package/dist/utils/sync/event_notifier.d.ts +38 -0
  626. package/dist/utils/sync/event_notifier.js +51 -0
  627. package/dist/utils/sync/index.d.ts +2 -0
  628. package/dist/utils/sync/index.js +7 -0
  629. package/dist/utils/text/alnum_utils.d.ts +109 -0
  630. package/dist/utils/text/alnum_utils.js +262 -0
  631. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  632. package/dist/utils/text/base_text_aggregator.js +102 -0
  633. package/dist/utils/text/base_text_filter.d.ts +54 -0
  634. package/dist/utils/text/base_text_filter.js +50 -0
  635. package/dist/utils/text/index.d.ts +2 -0
  636. package/dist/utils/text/index.js +7 -0
  637. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  638. package/dist/utils/text/markdown_text_filter.js +522 -0
  639. package/dist/utils/text/markup_utils.d.ts +54 -0
  640. package/dist/utils/text/markup_utils.js +156 -0
  641. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  642. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  643. package/dist/utils/text/phonemes.d.ts +60 -0
  644. package/dist/utils/text/phonemes.js +172 -0
  645. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  646. package/dist/utils/text/simple_text_aggregator.js +254 -0
  647. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  648. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  649. package/dist/utils/text/transforms/acronyms.d.ts +21 -0
  650. package/dist/utils/text/transforms/acronyms.js +31 -0
  651. package/dist/utils/text/transforms/currency.d.ts +16 -0
  652. package/dist/utils/text/transforms/currency.js +56 -0
  653. package/dist/utils/text/transforms/dates.d.ts +18 -0
  654. package/dist/utils/text/transforms/dates.js +102 -0
  655. package/dist/utils/text/transforms/email.d.ts +17 -0
  656. package/dist/utils/text/transforms/email.js +35 -0
  657. package/dist/utils/text/transforms/index.d.ts +37 -0
  658. package/dist/utils/text/transforms/index.js +42 -0
  659. package/dist/utils/text/transforms/numbers.d.ts +25 -0
  660. package/dist/utils/text/transforms/numbers.js +59 -0
  661. package/dist/utils/text/transforms/percentages.d.ts +16 -0
  662. package/dist/utils/text/transforms/percentages.js +32 -0
  663. package/dist/utils/text/transforms/phone.d.ts +21 -0
  664. package/dist/utils/text/transforms/phone.js +39 -0
  665. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  666. package/dist/utils/text/transforms/pronunciations.js +112 -0
  667. package/dist/utils/text/transforms/replacements.d.ts +39 -0
  668. package/dist/utils/text/transforms/replacements.js +46 -0
  669. package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
  670. package/dist/utils/text/transforms/strip_markdown.js +60 -0
  671. package/dist/utils/text/transforms/units.d.ts +22 -0
  672. package/dist/utils/text/transforms/units.js +81 -0
  673. package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
  674. package/dist/utils/text/transforms/voice_formatter.js +98 -0
  675. package/dist/utils/text/unicode_digits.d.ts +3 -0
  676. package/dist/utils/text/unicode_digits.js +34 -0
  677. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  678. package/dist/utils/text/word_timestamp_utils.js +52 -0
  679. package/dist/utils/time.d.ts +13 -0
  680. package/dist/utils/time.js +31 -0
  681. package/dist/utils/tracing/index.d.ts +3 -0
  682. package/dist/utils/tracing/index.js +8 -0
  683. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  684. package/dist/utils/tracing/service_attributes.js +434 -0
  685. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  686. package/dist/utils/tracing/service_decorators.js +1662 -0
  687. package/dist/utils/tracing/setup.d.ts +107 -0
  688. package/dist/utils/tracing/setup.js +160 -0
  689. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  690. package/dist/utils/tracing/tracing_context.js +97 -0
  691. package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
  692. package/dist/utils/tracing/turn_trace_observer.js +233 -0
  693. package/dist/utils/types.d.ts +80 -0
  694. package/dist/utils/types.js +108 -0
  695. package/dist/utils/utils.d.ts +5 -0
  696. package/dist/utils/utils.js +22 -0
  697. package/dist/utils/yaml.d.ts +179 -0
  698. package/dist/utils/yaml.js +556 -0
  699. package/dist/version.d.ts +3 -0
  700. package/dist/version.js +7 -0
  701. package/dist/workers/base_worker.d.ts +772 -0
  702. package/dist/workers/base_worker.js +1298 -0
  703. package/dist/workers/index.d.ts +2 -0
  704. package/dist/workers/index.js +8 -0
  705. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  706. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  707. package/dist/workers/llm/index.d.ts +6 -0
  708. package/dist/workers/llm/index.js +11 -0
  709. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  710. package/dist/workers/llm/llm_context_worker.js +72 -0
  711. package/dist/workers/llm/llm_worker.d.ts +180 -0
  712. package/dist/workers/llm/llm_worker.js +323 -0
  713. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  714. package/dist/workers/llm/tool_decorator.js +60 -0
  715. package/dist/workers/proxy/index.d.ts +3 -0
  716. package/dist/workers/proxy/index.js +9 -0
  717. package/dist/workers/proxy/websocket/client.d.ts +110 -0
  718. package/dist/workers/proxy/websocket/client.js +196 -0
  719. package/dist/workers/proxy/websocket/index.d.ts +3 -0
  720. package/dist/workers/proxy/websocket/index.js +10 -0
  721. package/dist/workers/runner.d.ts +268 -0
  722. package/dist/workers/runner.js +489 -0
  723. package/dist/workers/ui/index.d.ts +22 -0
  724. package/dist/workers/ui/index.js +27 -0
  725. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  726. package/dist/workers/ui/ui_event_decorator.js +75 -0
  727. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  728. package/dist/workers/ui/ui_job_context.js +17 -0
  729. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  730. package/dist/workers/ui/ui_prompts.js +41 -0
  731. package/dist/workers/ui/ui_tools.d.ts +32 -0
  732. package/dist/workers/ui/ui_tools.js +112 -0
  733. package/dist/workers/ui/ui_worker.d.ts +571 -0
  734. package/dist/workers/ui/ui_worker.js +1156 -0
  735. package/package.json +61 -3
  736. package/README.md +0 -5
@@ -0,0 +1,522 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/utils/text/markdown_text_filter.py
6
+ /**
7
+ * Markdown text filter for removing Markdown formatting from text.
8
+ *
9
+ * This module provides a text filter that converts Markdown content to plain
10
+ * text while preserving structure and handling special cases like code blocks
11
+ * and tables.
12
+ *
13
+ * DIVERGENCE: upstream converts Markdown to HTML with the Python-Markdown
14
+ * package. Core takes no runtime dependencies, so `markdownToHtml` below is a
15
+ * small built-in converter that follows Python-Markdown's rules for the
16
+ * constructs that matter here (paragraphs, headers, rules, lists, quotes,
17
+ * indented code, tables, code spans, links, images, emphasis, escapes and raw
18
+ * HTML). Exotic Markdown (reference links, nested lists) may convert
19
+ * differently.
20
+ */
21
+ import { BaseTextFilter } from "./base_text_filter.js";
22
+ /**
23
+ * Configuration parameters for Markdown text filtering
24
+ * (`MarkdownTextFilter.InputParams` upstream).
25
+ *
26
+ * - `enableTextFilter`: whether to apply Markdown filtering. Defaults to true.
27
+ * - `filterCode`: whether to remove code blocks from the text. Defaults to false.
28
+ * - `filterTables`: whether to remove table content from the text. Defaults to false.
29
+ * - `filterRepeatedSequences`: whether to remove repeated sequences from the
30
+ * text. Defaults to true.
31
+ */
32
+ export class MarkdownTextFilterInputParams {
33
+ enableTextFilter;
34
+ filterCode;
35
+ filterTables;
36
+ filterRepeatedSequences;
37
+ constructor(options = {}) {
38
+ this.enableTextFilter =
39
+ options.enableTextFilter !== undefined ? options.enableTextFilter : true;
40
+ this.filterCode = options.filterCode !== undefined ? options.filterCode : false;
41
+ this.filterTables = options.filterTables !== undefined ? options.filterTables : false;
42
+ this.filterRepeatedSequences =
43
+ options.filterRepeatedSequences !== undefined ? options.filterRepeatedSequences : true;
44
+ }
45
+ }
46
+ /** `snake_case` -> `camelCase`, so settings keyed either way are accepted. */
47
+ function camelCase(key) {
48
+ return key.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());
49
+ }
50
+ /**
51
+ * Text filter that removes Markdown formatting from text content.
52
+ *
53
+ * Converts Markdown to plain text while preserving the overall structure,
54
+ * including leading and trailing spaces. Handles special cases like asterisks
55
+ * and table formatting. Supports selective filtering of code blocks and
56
+ * tables based on configuration.
57
+ */
58
+ export class MarkdownTextFilter extends BaseTextFilter {
59
+ /** Configuration parameters for Markdown text filtering. */
60
+ static InputParams = MarkdownTextFilterInputParams;
61
+ _settings;
62
+ _inCodeBlock = false;
63
+ _inTable = false;
64
+ _interrupted = false;
65
+ /**
66
+ * Initialize the Markdown text filter.
67
+ *
68
+ * @param options.params Configuration parameters for filtering behavior.
69
+ */
70
+ constructor(options = {}) {
71
+ super(options);
72
+ this._settings = options.params ?? new MarkdownTextFilterInputParams();
73
+ }
74
+ /**
75
+ * Update the filter's configuration settings.
76
+ *
77
+ * Keys may be given as upstream writes them (`enable_text_filter`) or in
78
+ * camelCase (`enableTextFilter`).
79
+ *
80
+ * @param settings Dictionary of setting names to values for configuration.
81
+ */
82
+ async updateSettings(settings) {
83
+ const target = this._settings;
84
+ for (const [key, value] of Object.entries(settings)) {
85
+ const name = camelCase(key);
86
+ if (Object.hasOwn(target, name)) {
87
+ target[name] = value;
88
+ }
89
+ }
90
+ }
91
+ /**
92
+ * Apply Markdown filtering transformations to the input text.
93
+ *
94
+ * @param text The input text containing Markdown formatting to be filtered.
95
+ * @returns The filtered text with Markdown formatting removed or converted.
96
+ */
97
+ async filter(text) {
98
+ if (this._settings.enableTextFilter) {
99
+ // Strip markdown headers to plain text before the newline collapse
100
+ // below. The converter can't recognize a header once the collapse
101
+ // injects a leading space, so we normalize headers ourselves.
102
+ // First, drop blank lines before a header (keeping the marker) so
103
+ // the collapse doesn't turn them into a leading space.
104
+ let filteredText = text.replace(/\n\s*\n(#{1,6}[ \t])/g, "\n$1");
105
+ // Then strip the leading marker and any "closed" trailing marker
106
+ // (e.g. ## Title ##), leaving just the header text. The trailing
107
+ // marker's surrounding spaces are absorbed only when the marker is
108
+ // present, so genuine trailing whitespace (needed for word-by-word
109
+ // streaming) is preserved on open headers.
110
+ filteredText = filteredText.replace(/^#{1,6}[ \t]+(.*?)(?:[ \t]+#+[ \t]*)?$/gm, "$1");
111
+ // Remove newlines and replace with a space only when there's no text before or after
112
+ filteredText = filteredText.replace(/^\s*\n/gm, " ");
113
+ // Remove backticks from inline code, but not from code blocks
114
+ filteredText = filteredText.replace(/(?<!`)`([^`\n]+)`(?!`)/g, "$1");
115
+ // Remove repeated sequences of 5 or more characters
116
+ if (this._settings.filterRepeatedSequences) {
117
+ filteredText = filteredText.replace(/(\S)(\1{4,})/gu, "");
118
+ }
119
+ // Preserve numbered list items with a unique marker, §NUM§
120
+ filteredText = filteredText.replace(/^(\p{Nd}+\.)\s/u, "§NUM§$1 ");
121
+ // Preserve leading/trailing spaces with a unique marker, §
122
+ // Critical for word-by-word streaming in bot-tts-text
123
+ filteredText = filteredText.replace(/^( +)|\s+$/gm, (m) => "§".repeat(m.length));
124
+ // Remove space placeholders before tables, so that tables are converted to HTML
125
+ // correctly
126
+ filteredText = filteredText.replace(/§\| /g, "| ");
127
+ // Convert markdown to HTML
128
+ filteredText = markdownToHtml(filteredText, { tables: !!this._settings.filterTables });
129
+ // Remove tables
130
+ if (this._settings.filterTables) {
131
+ filteredText = this.removeTables(filteredText);
132
+ }
133
+ // Remove HTML tags
134
+ filteredText = filteredText.replace(/<[^<]+?>/g, "");
135
+ // Replace HTML entities
136
+ filteredText = filteredText.replaceAll("&nbsp;", " ");
137
+ filteredText = filteredText.replaceAll("&lt;", "<");
138
+ filteredText = filteredText.replaceAll("&gt;", ">");
139
+ filteredText = filteredText.replaceAll("&amp;", "&");
140
+ // Remove double asterisks (consecutive without any exceptions)
141
+ filteredText = filteredText.replace(/\*\*/g, "");
142
+ // Remove single asterisks at the start or end of words
143
+ filteredText = filteredText.replace(/(^|\s)\*|\*($|\s)/g, "$1$2");
144
+ // Remove Markdown table formatting
145
+ filteredText = filteredText.replace(/\|/g, "");
146
+ filteredText = filteredText.replace(/^\s*[-:]+\s*$/gm, "");
147
+ // Remove code blocks
148
+ if (this._settings.filterCode) {
149
+ filteredText = this._removeCodeBlocks(filteredText);
150
+ }
151
+ // Restore numbered list items
152
+ filteredText = filteredText.replaceAll("§NUM§", "");
153
+ // Restore leading and trailing spaces
154
+ filteredText = filteredText.replace(/§/g, " ");
155
+ // Make links more readable
156
+ filteredText = filteredText.replace(/https?:\/\//g, "");
157
+ return filteredText;
158
+ }
159
+ return text;
160
+ }
161
+ /**
162
+ * Handle interruption events in the processing pipeline.
163
+ *
164
+ * Resets the filter state and clears any tracking variables for code
165
+ * blocks and tables.
166
+ */
167
+ async handleInterruption() {
168
+ this._interrupted = true;
169
+ this._inCodeBlock = false;
170
+ this._inTable = false;
171
+ }
172
+ /**
173
+ * Reset the filter state after an interruption has been handled.
174
+ *
175
+ * Clears the interrupted flag to restore normal operation.
176
+ */
177
+ async resetInterruption() {
178
+ this._interrupted = false;
179
+ }
180
+ //
181
+ // Filter code
182
+ //
183
+ /**
184
+ * Remove code blocks from the input text.
185
+ *
186
+ * Handles interruptions and delegates to specific methods based on the
187
+ * current state.
188
+ */
189
+ _removeCodeBlocks(text) {
190
+ if (this._interrupted) {
191
+ this._inCodeBlock = false;
192
+ return text;
193
+ }
194
+ // Pattern to match three consecutive backticks (code block delimiter)
195
+ const codeBlockPattern = "```";
196
+ const index = text.indexOf(codeBlockPattern);
197
+ const match = index === -1 ? null : { start: index, end: index + codeBlockPattern.length };
198
+ if (this._inCodeBlock) {
199
+ return this._handleInCodeBlock(match, text);
200
+ }
201
+ return this._handleNotInCodeBlock(match, text, codeBlockPattern);
202
+ }
203
+ /**
204
+ * Handle text when currently inside a code block.
205
+ *
206
+ * If we find the end of the block, return text after it. Otherwise, skip
207
+ * the content.
208
+ */
209
+ _handleInCodeBlock(match, text) {
210
+ if (match) {
211
+ this._inCodeBlock = false;
212
+ return text.slice(match.end).trim();
213
+ }
214
+ return ""; // Skip content inside code block
215
+ }
216
+ /** Handle text when not currently inside a code block. */
217
+ _handleNotInCodeBlock(match, text, codeBlockPattern) {
218
+ if (!match) {
219
+ return text; // No code block found, return original text
220
+ }
221
+ const startIndex = match.start;
222
+ if (startIndex === 0 || /^\s+$/.test(text.slice(0, startIndex))) {
223
+ return this._handleStartOfCodeBlock(text, startIndex);
224
+ }
225
+ return this._handleCodeBlockWithinText(text, codeBlockPattern);
226
+ }
227
+ /**
228
+ * Handle the case where a code block starts.
229
+ *
230
+ * Return any text before the code block and set the state to inside a code
231
+ * block.
232
+ */
233
+ _handleStartOfCodeBlock(text, startIndex) {
234
+ this._inCodeBlock = true;
235
+ return text.slice(0, startIndex).trim();
236
+ }
237
+ /**
238
+ * Handle code blocks found within text content.
239
+ *
240
+ * If it's a complete code block, remove it and return surrounding text. If
241
+ * it's the start of a code block, return text before it and set state.
242
+ */
243
+ _handleCodeBlockWithinText(text, codeBlockPattern) {
244
+ const parts = text.split(codeBlockPattern);
245
+ if (parts.length > 2) {
246
+ return `${parts[0]} ${parts[parts.length - 1]}`.trim();
247
+ }
248
+ this._inCodeBlock = true;
249
+ return parts[0].trim();
250
+ }
251
+ //
252
+ // Filter tables
253
+ //
254
+ /**
255
+ * Remove HTML tables from the input text.
256
+ *
257
+ * Handles cases where both start and end tags are in the same input, as
258
+ * well as tables that span multiple text chunks.
259
+ *
260
+ * @param text The text containing HTML tables to remove.
261
+ * @returns The text with tables removed.
262
+ */
263
+ removeTables(text) {
264
+ if (this._interrupted) {
265
+ this._inTable = false;
266
+ return text;
267
+ }
268
+ // Remove complete tables
269
+ text = text.replace(/<table>[\s\S]*?<\/table>/gi, "");
270
+ // Handle partial tables at the start
271
+ if (this._inTable) {
272
+ const match = /^[\s\S]*<\/table>/i.exec(text);
273
+ if (match) {
274
+ this._inTable = false;
275
+ return text.slice(match[0].length).trim();
276
+ }
277
+ return ""; // Still inside a table, remove all content
278
+ }
279
+ // Handle partial tables at the end
280
+ const match = /<table>[\s\S]*/i.exec(text);
281
+ if (match) {
282
+ this._inTable = true;
283
+ return text.slice(0, match.index).trim();
284
+ }
285
+ return text.trim();
286
+ }
287
+ }
288
+ //
289
+ // Markdown -> HTML (a small stand-in for Python-Markdown's `Markdown.convert`).
290
+ //
291
+ const STX = "\u0002";
292
+ const ETX = "\u0003";
293
+ function escapeHtml(text) {
294
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
295
+ }
296
+ /** Characters Python-Markdown lets a backslash escape. */
297
+ const ESCAPED_CHARS = new Set("\\`*_{}[]()>#+-.!".split(""));
298
+ /** Inline Markdown -> HTML, applied pattern by pattern as Python-Markdown does. */
299
+ function inlineToHtml(text) {
300
+ const stash = [];
301
+ const put = (html) => {
302
+ stash.push(html);
303
+ return `${STX}${stash.length - 1}${ETX}`;
304
+ };
305
+ // Code spans (highest priority): the content is literal.
306
+ text = text.replace(/(?<!\\)(`+)([\s\S]+?)(?<!`)\1(?!`)/g, (_, _ticks, code) => put(`<code>${escapeHtml(code.trim())}</code>`));
307
+ // Backslash escapes.
308
+ text = text.replace(/\\([\s\S])/g, (m, ch) => ESCAPED_CHARS.has(ch) ? put(escapeHtml(ch)) : m);
309
+ // Automatic links and e-mail addresses.
310
+ text = text.replace(/<((?:[Ff]|[Hh][Tt])[Tt][Pp][Ss]?:\/\/[^<>]*)>/g, (_, url) => put(`<a href="${escapeHtml(url)}">${escapeHtml(url)}</a>`));
311
+ // Python-Markdown obfuscates e-mail addresses as numeric character
312
+ // references; they survive tag stripping as such.
313
+ text = text.replace(/<([^<> !]+@[^@<> ]+)>/g, (_, email) => {
314
+ const names = { 34: "quot", 38: "amp", 60: "lt", 62: "gt" };
315
+ const obfuscated = [...email]
316
+ .map((ch) => {
317
+ const cp = ch.codePointAt(0);
318
+ return `&${names[cp] ?? `#${cp}`};`;
319
+ })
320
+ .join("");
321
+ return put(`<a href="mailto:${obfuscated}">${obfuscated}</a>`);
322
+ });
323
+ // Raw inline HTML and entities pass through untouched.
324
+ text = text.replace(/<(\/?[a-zA-Z][^<>@ ]*( [^<>]*)?|!--(?:(?!<!--|-->)[\s\S])*--)>/g, (m) => put(m));
325
+ text = text.replace(/&(?:#[0-9]+|#x[0-9a-fA-F]+|[a-zA-Z0-9]+);/g, (m) => put(m));
326
+ // Everything left is text.
327
+ text = escapeHtml(text);
328
+ // Lone asterisks and underscores surrounded by space are not emphasis.
329
+ text = text.replace(/(^|(?<=\s))(\*{1,3}|_{1,3})(?=\s|$)/g, (m) => put(m));
330
+ // Images, then links.
331
+ text = text.replace(/!\[([^\]]*)\]\(\s*<?([^)\s>]*)>?(?:\s+(?:"[^"]*"|'[^']*'))?\s*\)/g, (_, alt, src) => put(`<img alt="${alt}" src="${src}" />`));
332
+ text = text.replace(/\[([^\]]*)\]\(\s*<?([^)\s>]*)>?(?:\s+(?:"[^"]*"|'[^']*'))?\s*\)/g, (_, label, href) => `<a href="${href}">${label}</a>`);
333
+ // Emphasis, asterisks first (they work mid-word), then "smart" underscores.
334
+ text = text.replace(/\*\*\*([\s\S]+?)\*\*\*/g, "<strong><em>$1</em></strong>");
335
+ text = text.replace(/\*\*([\s\S]+?)\*\*/g, "<strong>$1</strong>");
336
+ text = text.replace(/\*([^*]+)\*/g, "<em>$1</em>");
337
+ text = text.replace(/(?<![\p{L}\p{N}_])___(?!_)([\s\S]+?)(?<!_)___(?![\p{L}\p{N}_])/gu, "<strong><em>$1</em></strong>");
338
+ text = text.replace(/(?<![\p{L}\p{N}_])__(?!_)([\s\S]+?)(?<!_)__(?![\p{L}\p{N}_])/gu, "<strong>$1</strong>");
339
+ text = text.replace(/(?<![\p{L}\p{N}_])_(?!_)([\s\S]+?)(?<!_)_(?![\p{L}\p{N}_])/gu, "<em>$1</em>");
340
+ // Hard line breaks.
341
+ text = text.replace(/ {2,}\n/g, "<br />\n");
342
+ // Put the stashed pieces back (they may nest).
343
+ const placeholder = new RegExp(`${STX}(\\d+)${ETX}`, "g");
344
+ while (placeholder.test(text)) {
345
+ placeholder.lastIndex = 0;
346
+ text = text.replace(placeholder, (_, i) => stash[Number(i)] ?? "");
347
+ }
348
+ return text;
349
+ }
350
+ /** Split a table row into cells, dropping the border pipes. */
351
+ function splitTableRow(row) {
352
+ let r = row.trim();
353
+ if (r.startsWith("|"))
354
+ r = r.slice(1);
355
+ if (r.endsWith("|") && !r.endsWith("\\|"))
356
+ r = r.slice(0, -1);
357
+ return r.split(/(?<!\\)\|/).map((c) => c.trim());
358
+ }
359
+ function isTable(block) {
360
+ const rows = block.split("\n").map((r) => r.replace(/^ +| +$/g, ""));
361
+ if (rows.length < 2)
362
+ return false;
363
+ const header0 = rows[0];
364
+ const border = header0.startsWith("|") || /(?<!\\)\|$/.test(header0);
365
+ const columns = splitTableRow(header0).length;
366
+ if (columns <= 1 && !border)
367
+ return false;
368
+ const separator = splitTableRow(rows[1]);
369
+ return separator.length === columns && /^[|:\- ]*$/.test(separator.join("")) && rows[1] !== "";
370
+ }
371
+ function tableToHtml(block) {
372
+ const rows = block.split("\n");
373
+ const header = splitTableRow(rows[0]);
374
+ const cell = (tag, text) => `<${tag}>${inlineToHtml(text)}</${tag}>`;
375
+ const out = ["<table>", "<thead>", "<tr>"];
376
+ for (const h of header)
377
+ out.push(cell("th", h));
378
+ out.push("</tr>", "</thead>", "<tbody>");
379
+ for (const row of rows.slice(2)) {
380
+ const cells = splitTableRow(row);
381
+ out.push("<tr>");
382
+ for (let i = 0; i < header.length; i++)
383
+ out.push(cell("td", cells[i] ?? ""));
384
+ out.push("</tr>");
385
+ }
386
+ out.push("</tbody>", "</table>");
387
+ return out.join("\n");
388
+ }
389
+ const LIST_ITEM_RE = /^[ ]{0,3}(?:\d+\.|[*+-])[ ]+([\s\S]*)$/;
390
+ const OLIST_RE = /^[ ]{0,3}\d+\.[ ]+/;
391
+ const ULIST_RE = /^[ ]{0,3}[*+-][ ]+/;
392
+ const HR_RE = /^[ ]{0,3}(?:(?:-+[ ]{0,2}){3,}|(?:_+[ ]{0,2}){3,}|(?:\*+[ ]{0,2}){3,})[ ]*$/m;
393
+ const HASH_HEADER_RE = /(?:^|\n)(#{1,6})((?:\\[\s\S]|[^\\])*?)#*(?:\n|$)/;
394
+ const SETEXT_RE = /^.*?\n[=-]+[ ]*(?:\n|$)/;
395
+ const QUOTE_RE = /(^|\n)[ ]{0,3}>[ ]?(.*)/;
396
+ function listToHtml(block, ordered) {
397
+ const items = [];
398
+ for (const line of block.split("\n")) {
399
+ const m = LIST_ITEM_RE.exec(line);
400
+ if (m && !line.startsWith(" ")) {
401
+ items.push(m[1]);
402
+ }
403
+ else if (items.length > 0) {
404
+ const continuation = line.startsWith(" ") ? line.slice(4) : line;
405
+ items[items.length - 1] = `${items[items.length - 1]}\n${continuation}`;
406
+ }
407
+ else {
408
+ items.push(line);
409
+ }
410
+ }
411
+ const tag = ordered ? "ol" : "ul";
412
+ return [`<${tag}>`, ...items.map((item) => `<li>${inlineToHtml(item)}</li>`), `</${tag}>`].join("\n");
413
+ }
414
+ /** Block-level Markdown -> HTML for one block (text between blank lines). */
415
+ function blockToHtml(block, options, out) {
416
+ if (!block.trim())
417
+ return;
418
+ if (options.tables && isTable(block)) {
419
+ out.push(tableToHtml(block));
420
+ return;
421
+ }
422
+ if (block.startsWith(" ")) {
423
+ const code = block
424
+ .split("\n")
425
+ .map((l) => (l.startsWith(" ") ? l.slice(4) : l))
426
+ .join("\n");
427
+ out.push(`<pre><code>${escapeHtml(code.replace(/\n+$/, ""))}\n</code></pre>`);
428
+ return;
429
+ }
430
+ const hash = HASH_HEADER_RE.exec(block);
431
+ if (hash) {
432
+ const before = block.slice(0, hash.index);
433
+ const after = block.slice(hash.index + hash[0].length);
434
+ if (before)
435
+ blockToHtml(before, options, out);
436
+ const level = hash[1].length;
437
+ out.push(`<h${level}>${inlineToHtml(hash[2].trim())}</h${level}>`);
438
+ if (after)
439
+ blockToHtml(after, options, out);
440
+ return;
441
+ }
442
+ if (SETEXT_RE.test(block)) {
443
+ const lines = block.split("\n");
444
+ const level = lines[1].startsWith("=") ? 1 : 2;
445
+ out.push(`<h${level}>${inlineToHtml(lines[0].trim())}</h${level}>`);
446
+ const rest = lines.slice(2).join("\n");
447
+ if (rest)
448
+ blockToHtml(rest, options, out);
449
+ return;
450
+ }
451
+ const hr = HR_RE.exec(block);
452
+ if (hr) {
453
+ const before = block.slice(0, hr.index).replace(/\n$/, "");
454
+ const after = block.slice(hr.index + hr[0].length).replace(/^\n/, "");
455
+ if (before)
456
+ blockToHtml(before, options, out);
457
+ out.push("<hr />");
458
+ if (after)
459
+ blockToHtml(after, options, out);
460
+ return;
461
+ }
462
+ if (OLIST_RE.test(block) || ULIST_RE.test(block)) {
463
+ out.push(listToHtml(block, OLIST_RE.test(block)));
464
+ return;
465
+ }
466
+ const quote = QUOTE_RE.exec(block);
467
+ if (quote) {
468
+ const before = block.slice(0, quote.index);
469
+ if (before)
470
+ blockToHtml(before, options, out);
471
+ const quoted = block
472
+ .slice(quote.index)
473
+ .replace(/^\n/, "")
474
+ .split("\n")
475
+ .map((l) => l.replace(/^[ ]{0,3}>[ ]?/, ""))
476
+ .join("\n");
477
+ const inner = [];
478
+ for (const b of quoted.split(/\n[ ]*\n/))
479
+ blockToHtml(b, options, inner);
480
+ out.push(["<blockquote>", ...inner, "</blockquote>"].join("\n"));
481
+ return;
482
+ }
483
+ out.push(`<p>${inlineToHtml(block.replace(/^\s+/, ""))}</p>`);
484
+ }
485
+ /**
486
+ * Convert Markdown to HTML following Python-Markdown's rules for the common
487
+ * constructs. With `tables`, pipe tables become `<table>` elements (the
488
+ * "tables" extension upstream).
489
+ */
490
+ function markdownToHtml(source, options) {
491
+ if (!source.trim())
492
+ return "";
493
+ source = source.replace(new RegExp(`[${STX}${ETX}]`, "g"), "");
494
+ source = source.replace(/\r\n?/g, "\n");
495
+ // Expand tabs to 4-column stops.
496
+ source = source
497
+ .split("\n")
498
+ .map((line) => {
499
+ let col = 0;
500
+ let res = "";
501
+ for (const ch of line) {
502
+ if (ch === "\t") {
503
+ const n = 4 - (col % 4);
504
+ res += " ".repeat(n);
505
+ col += n;
506
+ }
507
+ else {
508
+ res += ch;
509
+ col += 1;
510
+ }
511
+ }
512
+ return res;
513
+ })
514
+ .join("\n");
515
+ source = source.replace(/(?<=\n) +\n/g, "\n");
516
+ const out = [];
517
+ for (const block of source.split(/\n\n+/)) {
518
+ blockToHtml(block.replace(/^\n+|\n+$/g, ""), options, out);
519
+ }
520
+ return out.join("\n").trim();
521
+ }
522
+ //# sourceMappingURL=markdown_text_filter.js.map
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Remove XML/SSML-like markup from a possibly-truncated text fragment.
3
+ *
4
+ * Syntax-based, not tag-name based: treats anything between '<' and '>' as
5
+ * markup and preserves text outside it. An unclosed '<' swallows the rest of
6
+ * `text`, matching how a raw word-timestamp token can arrive mid-tag.
7
+ *
8
+ * For a *complete* text, use `stripCompleteMarkup` instead.
9
+ *
10
+ * Used by `TextSegmentMap` to match a word against a segment, where the
11
+ * incoming word may be a fragment of a still-open tag.
12
+ */
13
+ export declare function stripMarkup(text: string): string;
14
+ /**
15
+ * Remove well-formed '<...>' markup from a complete, static text.
16
+ *
17
+ * Unlike `stripMarkup`, only strips matched '<...>' pairs -- a lone '<' with
18
+ * no later '>' is left in place as real content rather than swallowing the
19
+ * rest of `text`, since there is no streamed fragment here that could be
20
+ * mid-tag.
21
+ *
22
+ * Used by `TextSegment.isTransformed`, by `alnumOnly`, and by
23
+ * `WordCompletionTracker` to default `userFacingText` to a tag-free string.
24
+ */
25
+ export declare function stripCompleteMarkup(text: string): string;
26
+ /**
27
+ * Return the raw offset into `text` just past its `n`-th markup-stripped char.
28
+ *
29
+ * Inverse of `stripMarkup` for a prefix: where `stripMarkup` collects every
30
+ * non-markup char, this finds the raw index one past the `n`-th of them --
31
+ * converting a match measured in markup-stripped space back to a raw offset.
32
+ * Returns `text.length` when `text` has fewer than `n` non-markup chars.
33
+ */
34
+ export declare function rawOffsetAfterCleanChars(text: string, n: number): number;
35
+ /**
36
+ * Split `text` into alternating runs of tagged and untagged words.
37
+ *
38
+ * A word is considered tagged if it overlaps a complete `'<...>'` pair. A lone
39
+ * `'<'` is treated as content, not as the start of a tag (see
40
+ * `stripCompleteMarkup`). Consecutive words with the same classification form
41
+ * a single run, so whitespace inside a tag such as `<phoneme alphabet="ipa">`
42
+ * never splits the words it spans across runs.
43
+ *
44
+ * Text with no markup yields a single run, unchanged.
45
+ *
46
+ * Used by `TextSegmentMap` when it builds its segments, to give a tag one of
47
+ * its own.
48
+ *
49
+ * @example
50
+ * splitMarkupRuns("I love to count <spell>1234</spell>.");
51
+ * // -> ["I love to count ", "<spell>1234</spell>."]
52
+ */
53
+ export declare function splitMarkupRuns(text: string): string[];
54
+ //# sourceMappingURL=markup_utils.d.ts.map