dsh-plugin-mobile-gateway 0.9.0 → 0.10.1

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 (45) hide show
  1. package/PROTOCOL.md +79 -2
  2. package/README.md +32 -2
  3. package/docs/voice-input-hold-thresholds.md +35 -0
  4. package/docs/voice-input-implementation.md +219 -0
  5. package/docs/voice-input-ipa-analysis.md +150 -0
  6. package/docs/voice-input-ipa-evidence/deepseek-asr-constructor.asm +338 -0
  7. package/docs/voice-input-ipa-evidence/deepseek-extraction.json +5154 -0
  8. package/docs/voice-input-ipa-evidence/deepseek-focused-context.txt +210 -0
  9. package/docs/voice-input-ipa-evidence/deepseek-localization.json +29 -0
  10. package/docs/voice-input-ipa-evidence/deepseek-voice-strings.txt +206 -0
  11. package/docs/voice-input-ipa-evidence/doubao/address-map.txt +11 -0
  12. package/docs/voice-input-ipa-evidence/doubao/code-string-refs.txt +22 -0
  13. package/docs/voice-input-ipa-evidence/doubao/end-longpress-disasm.txt +149 -0
  14. package/docs/voice-input-ipa-evidence/doubao/focused-context.txt +271 -0
  15. package/docs/voice-input-ipa-evidence/doubao/locate_string_refs.py +42 -0
  16. package/docs/voice-input-ipa-evidence/doubao/network-candidates.txt +39 -0
  17. package/docs/voice-input-ipa-evidence/doubao/objc-msgsend-stub.txt +1 -0
  18. package/docs/voice-input-ipa-evidence/doubao/ranges.txt +858 -0
  19. package/docs/voice-input-ipa-evidence/doubao/recognizer-recorder.txt +134 -0
  20. package/docs/voice-input-ipa-evidence/doubao/result-disasm.txt +189 -0
  21. package/docs/voice-input-ipa-evidence/doubao/settext-selector.txt +2 -0
  22. package/docs/voice-input-ipa-evidence/doubao/start-stop-disasm.txt +358 -0
  23. package/docs/voice-input-ipa-evidence/doubao/strings.txt +3536 -0
  24. package/docs/voice-input-ipa-evidence/doubao-extraction.json +7418 -0
  25. package/docs/voice-input-ipa-evidence/doubao-findings.md +52 -0
  26. package/docs/voice-input-ipa-evidence/hold-threshold-rea-evidence.json +1 -0
  27. package/docs/voice-input-ipa-evidence/hold-thresholds/deepseek-hold-callback-refs.txt +1 -0
  28. package/docs/voice-input-ipa-evidence/hold-thresholds/deepseek-input-area-metadata.txt +31 -0
  29. package/docs/voice-input-ipa-evidence/hold-thresholds/deepseek-input-gesture-init.asm +267 -0
  30. package/docs/voice-input-ipa-evidence/hold-thresholds/deepseek-static-summary.json +42 -0
  31. package/docs/voice-input-ipa-evidence/hold-thresholds/deepseek-voice-gesture-constructor.asm +371 -0
  32. package/docs/voice-input-ipa-evidence/hold-thresholds/doubao-findings.md +31 -0
  33. package/docs/voice-input-ipa-evidence/hold-thresholds/doubao-text-mask-objc-metadata.txt +119 -0
  34. package/docs/voice-input-ipa-evidence/hold-thresholds/doubao-text-mask-threshold-evidence.asm +156 -0
  35. package/docs/voice-input-ipa-evidence/hold-thresholds/doubao-text-mask-voice-view-getter.asm +14 -0
  36. package/docs/voice-input-ipa-evidence/rea-evidence.json +1 -0
  37. package/lib/client.js +412 -132
  38. package/lib/cloudflare-tunnel.mjs +29 -2
  39. package/lib/devices.js +23 -7
  40. package/lib/dsh-host-adapter.mjs +10 -0
  41. package/lib/gateway-probe.mjs +6 -0
  42. package/lib/index.mjs +32 -7
  43. package/lib/public-endpoint-check.mjs +61 -0
  44. package/lib/speech-input.mjs +192 -0
  45. package/package.json +3 -3
@@ -0,0 +1,271 @@
1
+ 0xb359e00 VoiceInputError.Recorder(
2
+ 0xb359e20 flow_audio_asr_opt
3
+ 0xb359e40 flow_audio_minutes_opt
4
+ 0xb359e60 should retry error code
5
+ 0xb359e80 /Users/q5qtxbc19ghz4dqi/73334/Modules/FlowAudio/Sources/Application/VoiceInput/VoiceInputSessionImpl.swift
6
+ 0xb359ef0 shouldEorrorRetry(_:)
7
+ 0xb359f10 disable retry error code prefix
8
+ 0xb359f30 start voice input session
9
+ 0xb359f50 stop voice input session
10
+ 0xb359f70 voice input session cancel
11
+ 0xb359f90 _TtC9FlowAudio21VoiceInputSessionImpl
12
+ 0xb359fc0 recognizerConfig
13
+ 0xb359fe0 recorderStartTime
14
+ 0xb35a000 recorderStartError
15
+ 0xb35a020 recorderStartCondition
16
+ 0xb35a040 recorderStopCondition
17
+ 0xb35a056 asrTask
18
+ 0xb35a05e cancelReason
19
+ 0xb35a079 maxRetryTimes
20
+ 0xb35a087 voiceRecognizer
21
+ 0xb35a0a0 _TtC9FlowAudioP33_CF9FCBB61586E24BBFDFF893F65FB5D514AsyncCondition
22
+ 0xb35a0f0 continuation
23
+ 0xb35a100 signal condition
24
+ 0xb35a120 begin wait condition
25
+ 0xb35a140 finish wait condition
26
+ 0xb35a160 taskStop(reason:)
27
+ 0xb35a180 voice input did finish recording
28
+ 0xb35a1b0 recording time < min recording time cancel asr
29
+ 0xb35a1e0 min_recording_time
30
+ 0xb35a200 recorder start failed, no need to stop
31
+ 0xb35a230 asr task terminated
32
+ 0xb35a250 voice input did start
33
+ 0xb35a270 voice input did fail
34
+ 0xb35a290 voice input did start recording
35
+ 0xb35a2b0 voice input did finish
36
+ 0xb35a2d0 voice input did cancel
37
+ 0xb35a2f0 delete audio file
38
+ 0xb35a310 max retry times < 0
39
+ 0xb35a330 audioFileMissing
40
+ 0xb35a350 voice input failed retrying
41
+ 0xb35a370 voice input failed, after retry
42
+ 0xb35a3a0 disable_retry_error_code_with_prefix_match
43
+ 0xb35a3d0 enable_retry_error_code_with_complete_match
44
+ 0xb35a400 start
45
+ 0xb35a406 interrupt
46
+ 0xb35a410 touchDownToRecordingStart
47
+ 0xb35a430 touchUpToRecordingStop
48
+ 0xb35a450 touchUpToReceiveASRResult
49
+ 0xb35a470 enable_upload_audio
50
+ 0xb35a490 FlowAudio.VoiceInputSessionTracker
51
+ 0xb35a4c0 _TtC9FlowAudio24VoiceInputSessionTracker
52
+ 0xb35a505 stereo
53
+ 0xb35a510 Flow.Audio.AVAudioEngineBasedVoicePlayer.Schedule
54
+ 0xb35a550 Flow.Audio.AVAudioEngineBasedVoicePlayer.Play
55
+ 0xb35a580 fail to start audio engine. err =
56
+ 0xb35a5b0 /Users/q5qtxbc19ghz4dqi/73334/Modules/FlowAudio/Sources/Foundation/VoicePlayer/VoicePlayer+AVAudioEngine.swift
57
+ 0xb35a620 uncache unplayed voice data, id =
58
+ 0xb35a650 reset unPlayed data
59
+ 0xb35a670 resetUnPlayedData()
60
+ 0xb35a690 audio engine is not running, isRunning:
61
+ 0xb35a6c0 audioEngine.isRunning:
62
+ 0xb35a6e0 isDoraInterrupt:
63
+ 0xb35a700 isMediaServiceLost:
64
+ 0xb35a720 realPlay(voiceData:completion:)
65
+ 0xb35a740 engineNotRunning
66
+ 0xb35a760 cache unplayed voice data, id =
67
+ 0xb35a790 fail to create pcm buffer
68
+ 0xb35a7b0 failToCreatePCMBuffer
69
+ 0xb35a7d0 schedule voice data for playing, id =
70
+ 0xb35a800 fail to resume audio engine, err =
71
+ 0xb35a830 player duck to:
72
+ 0xb35a850 duck(to:animate:completion:)
73
+ 0xb35a870 player duck no action
74
+ 0xb35a890 resumeWhenConfigChanged
75
+ 0xb35a8b0 resumeWhenConfigChanged()
76
+ 0xb35a8d0 stopFromMediaServiceLost
77
+ 0xb35a8f0 stopFromMediaServiceLost()
78
+ 0xb35a910 resumeFromMediaServiceLost
79
+ 0xb35a930 resumeFromMediaServiceLost()
80
+ 0xb35a950 init safe voice player
81
+ 0xb35a970 init(id:config:saveToFile:)
82
+ 0xb35a990 play(voiceData:completion:)
83
+ 0xb35a9b0 _TtC9FlowAudio29AVAudioEngineBasedVoicePlayer
84
+ 0xb35a9e0 _outputAmplitude
85
+ 0xb35a9f3 _lastComsumeId
86
+ 0xb35aa10 _leftLastComsumeId
87
+ 0xb35aa30 _rightLastComsumeId
88
+ 0xb35aa44 _isInterrupt
89
+ 0xb35aa51 _fromStop
90
+ 0xb35aa5b _saveAudioData
91
+ 0xb35aa6a isCacheEnable
92
+ 0xb35aa87 audioFile
93
+ 0xb35aaa0 leftDumpAudioFile
94
+ 0xb35aac0 rightDumpAudioFile
95
+ 0xb35aada leftPlayerNode
96
+ 0xb35aae9 rightPlayerNode
97
+ 0xb35aaf9 stereoMixer
98
+ 0xb35ab05 timePitch
99
+ 0xb35ab12 scheduleQueue
100
+ 0xb35ab20 scheduleIndex
101
+ 0xb35ab2e scheduleCache
102
+ 0xb35ab40 unPlayedVoiceData
103
+ 0xb35ab52 enginePrepared
104
+ 0xb35ab70 cachedDataMapMediaLost
105
+ 0xb35ab90 isMediaServiceLost
106
+ 0xb35aba3 playQueue
107
+ 0xb35abb6 lastVolume
108
+ 0xb35abd0 playbackFrameCount
109
+ 0xb35abf0 _TtC9FlowAudio33SafeAVAudioEngineBasedVoicePlayer
110
+ 0xb35ac30 yyyy_MM_dd_HH_mm_ss
111
+ 0xb35ac50 consume voice data. continue with id:
112
+ 0xb35ac80 consume(voiceData:)
113
+ 0xb35aca0 consume voice data. interrupt with id:
114
+ 0xb35acd0 consume voice data. id =
115
+ 0xb35acf0 failed with no index
116
+ 0xb35ad10 v24@?0@"AVAudioPCMBuffer"8@"AVAudioTime"16
117
+ 0xb35ad40 catchException(function:completion:)
118
+ 0xb35ad70 resumeFromMediaServiceLost dataids:
119
+ 0xb35ada0 resetCacheFromMediaServiceLost
120
+ 0xb35adc0 resetCacheFromMediaServiceLost()
121
+ 0xb35adf0 consume voice data. resume with id:
122
+ 0xb35ae20 update playback speed:
123
+ 0xb35ae40 updatePlaybackSpeed(_:)
124
+ 0xb35ae60 animate(duration:change:completion:)
125
+ 0xb35ae90 change volume finished
126
+ 0xb35aeb0 change volume with animation,
127
+ 0xb35aed0 finish playing voice data. id =
128
+ 0xb35af00 , channelName =
129
+ 0xb35af20 store voice data. id =
130
+ 0xb35af40 store(voiceData:completion:)
131
+ 0xb35af60 player is deallocating, skip
132
+ 0xb35af80 prepare audio engine, timeElapsed =
133
+ 0xb35afb0 playbackMode =
134
+ 0xb35afd0 prepareAudioEngine()
135
+ 0xb35aff0 prepareVoicePlayer
136
+ 0xb35b010 fail to start audio engine, retrying for the
137
+ 0xb35b040 startAudioEngine()
138
+ 0xb35b060 status changed:
139
+ 0xb35b080 failToStart
140
+ 0xb35b090 failToCreateBuffer
141
+ 0xb35b0a3 started
142
+ 0xb35b0b0 _TtC9FlowAudio18VoicePlayerTracker
143
+ 0xb35b0e0 Flow.SAMIMixedVoiceDataStreamProcessor
144
+ 0xb35b110 _TtC9FlowAudio23SAMIMixedVoiceProcessor
145
+ 0xb35b140 mixedPreviewSession
146
+ 0xb35b160 mixedResultCallback
147
+ 0xb35b180 mixedFinishCallback
148
+ 0xb35b194 ttsQueue
149
+ 0xb35b1a0 Failed to receive audio data, status =
150
+ 0xb35b1d0 /Users/q5qtxbc19ghz4dqi/73334/Modules/FlowAudio/
151
+ 0xbbbdd3f format:not recognized
152
+ 0xbbbe5f6 zface load model failed, unrecognized model version
153
+ 0xbbbea5c load model failed, unrecognized model
154
+ 0xbbc40a1 ios-recognized-gesture-class
155
+ 0xbbc40be setIosRecognizedGestureClass
156
+ 0xbbc4105 UIScrollViewPanGestureRecognizer
157
+ 0xbbc6cd6 -//W3C//DTD HTML 3.2 Draft//
158
+ 0xbbc6d27 -//W3C//DTD HTML 3.2S Draft//
159
+ 0xbbd0e81 convertASRAudioInfo
160
+ 0xbbd0e96 convertASRAudioInfo
161
+ 0xbbd0ed3 convertAudioASRConfig
162
+ 0xbbd15da set need compensate endAsr
163
+ 0xbbd15f5 sent endAsr
164
+ 0xbbd1996 session started, compensate endAsr event
165
+ 0xbbd1ab6 speechDumpPath
166
+ 0xbbd1b74 speech_config
167
+ 0xbbd1c62 speech_aec_config
168
+ 0xbbd2867 ","style_id":"zh_female_wenroutaozi_uranus_bigtts","style_name":"","language_code":"zh","language_key":"chinese_language","preview":{"version":"","preview_text":"","preview_audio":"op_voice/1765853242941191145.mp3","md5":"812ddac59a43e2ce535203563f0c8af7"},"creator_id":"4427048924229208","status":1,"private_status":1,"ugc_voice":false,"create_time":0,"creator_username":"","icon":{"uri":"FileBizType.BIZ_BOT_ICON/1166209_1705411537442891198.png","url":""},"name_status":1,"audio_metrics":"{\"audio_params\":{\"num_channel\":1,\"sample_rate\":24000},\"loudness\":{\"delta_loudness\":1.2942790985107422,\"integrated_loudness\":-19.264503479003906,\"loudness_range\":2.6000003814697266,\"lra_end\":-18.399999618530273,\"lra_start\":-21,\"max_mom_loud\":-14.812909126281738,\"max_short_term_loud\":-17.970224380493164},\"rms_stats\":{\"background_noise_left\":-76.7090835571289,\"dc_offset_left\":-0.00067029445199295878,\"dynamic_range_left\":73.8992156982422,\"estimated_snr_left\":65.4081573486328,\"left_right_diff\":0,\"left_total\":-19.125986099243164,\"minimum\":-300,\"normed_std_left\":-7.16160774230957,\"peak\":-1.0746761560440063,\"std_left\":-26.287593841552734},\"version\":\"1.4.2\"}","voice_conf_status":0,"mix_voice_list":[],"pitch":0,"speech_rate":10,"style_id_phone_call":"zh_female_wenroutaozi_v2_mars_bigtts","pitch_f64":0,"speech_rate_f64":10,"extra":"{\"post_process\":{\"pitch\":0,\"speech_rate\":1}}"},"percentage":100,"is_enable":true}],"pitch":0,"speech_rate":10,"style_id_phone_call":"zh_female_wenroutaozi_v2_mars_bigtts","pitch_f64":0,"speech_rate_f64":10,"extra":"{\"post_process\":{\"pitch\":0,\"speech_rate\":1}}"},"edit_pos":"{\"name\":true,\"description_for_model\":true,\"description_for_human\":true,\"icon_uri\":true,\"model_type\":false,\"voice_type\":true,\"delete\":true,\"bot_language\":true}","create_time":1684483451,"update_time":1765876762,"icon_uri":"FileBizType.BIZ_BOT_ICON/female_spring_2025_1.png","disabled":false,"recommend_index":0,"disabled_tag":"normal","muted":false,"bot_type":1,"share_info":{"share_status":"shareable","share_url":"https://www.doubao.com/download/","is_show_share_tab":true,"is_show_message_share":true,"qr_code_url":"https://www.doubao.com/download/"},"icon_image":{"uri":"FileBizType.BIZ_BOT_ICON/female_spring_2025_1.png","tiny_url":"https://p3-flow-op.byteimg.com/tos-cn-i-55yens32bg/tiny_url.png~tplv-55yens32bg-image.image","origin_url":"https://p3-flow-op.byteimg.com/tos-cn-i-55yens32bg/icon_url.png~tplv-55yens32bg-image.image","image_720":""},"creator_info":{"creator_id":"0"},"private_status":3,"bot_id":"7234781073513644036","has_conversation":false,"onboarding":{"prologue":"","suggests":null,"content":"","version":2,"message_list":[{"conversation_id":null,"section_id":null,"message_id":null,"index":1,"reply_id":null,"status":1,"message_type":1,"content_type":1,"content":"{\"text\":\"
169
+ 0xbbddfbf av.AudioASRInfo.question_id
170
+ 0xbbddfdb av.AudioASRInfo.asr_task_id
171
+ 0xbbddff7 av.AudioASRInfo.local_message_id
172
+ 0xbbde018 av.AudioASRInfo
173
+ 0xbbde028 av.AudioAsrResponse_Result.text
174
+ 0xbbde048 av.AudioAsrResponse_Extra.semantic_integrity_seg
175
+ 0xbbde079 av.AudioAsrResponse_Extra.sv_result
176
+ 0xbbde09d av.AudioAsrEnd
177
+ 0xbbde362 av.AudioTTSSentenceStart.speech_hello_type
178
+ 0xbbde65f av.StartSession.sami_header
179
+ 0xbbde6fa av.ASRStatus
180
+ 0xbbde902 av.AudioASRConfig.extra
181
+ 0xbbde91a av.AudioASRConfig.lang
182
+ 0xbbde931 av.ASRAudioInfo.format
183
+ 0xbbde948 av.ASRAudioInfo
184
+ 0xbbdec91 av.AudioEndAsr
185
+ 0xbbdedb7 av.DownlinkMessage.speech_event
186
+ 0xbbdefef av.UplinkMessage.speech_event
187
+ 0xbbdfb8b SPEECH_FLOW_GATEWAY_MESSAGE_EVENT
188
+ 0xbbdfc09 SPEECH_FLOW_GATEWAY_MESSAGE_NET_CONNECTED
189
+ 0xbbdfc33 SPEECH_FLOW_GATEWAY_MESSAGE_NET_ERRORED
190
+ 0xbbdfc5b SPEECH_FLOW_GATEWAY_MESSAGE_NET_ERRORED:
191
+ 0xbbdfd8f speech context init failed
192
+ 0xbbdfde7 speech handle create failed
193
+ 0xbbef8ce So8SAMICoreCSg
194
+ 0xbbef98e So8SAMICoreC
195
+ 0xbbefa32 $s9FlowAudio28SAMIAssistantSessionDelegateP
196
+ 0xbbefc40 $s9FlowAudio26SAMIAssistantEventListenerP
197
+ 0xbbefd3e So25SAMICoreOCVopAudioCheckerC
198
+ 0xbbefdf2 So8SAMICoreCSg_Sit
199
+ 0xbbefe06 ScCySo8SAMICoreCSg_Sit
200
+ 0xbbeffc8 $s9FlowAudio010VoiceInputB12DataInjecterP
201
+ 0xbbf0088 $s9FlowAudio25VoiceInputSessionDelegateP
202
+ 0xbbf00b8 $s9FlowAudio17VoiceInputContextP
203
+ 0xbbf00da $s9FlowAudio17VoiceInputSessionP
204
+ 0xbbf06f8 $s9FlowAudio15VoiceRecognizerP
205
+ 0xbbf0718 $s9FlowAudio23VoiceRecognizerListenerP
206
+ 0xbbf6e42 So27UIGestureRecognizerDelegate_So22UINavigationControllerCXcSgXw
207
+ 0xbbf6e84 So27UIGestureRecognizerDelegate_So22UINavigationControllerCXcSgXwz_Xx
208
+ 0xbbfa8c6 So22UITapGestureRecognizerC
209
+ 0xbbfaba4 So22UITapGestureRecognizerCSg
210
+ 0xbbfabc2 So28UILongPressGestureRecognizerCSg
211
+ 0xbbfac13 ySo19UIGestureRecognizerCG
212
+ 0xbbfadd2 So22UIPanGestureRecognizerCSg
213
+ 0xbbfb7f6 So24UISwipeGestureRecognizerCSg
214
+ 0xbbfbd1c So27UIGestureRecognizerDelegate_So22UINavigationControllerCXc
215
+ 0xbbfc806 $s7FlowKit38MessagingDraftComponentContextProviderP
216
+ 0xbbffea4 So27UIGestureRecognizerDelegate_So16UIViewControllerCXcSgXw
217
+ 0xbbffee0 So22UIPanGestureRecognizerCSgXw
218
+ 0xbbfff00 So27UIGestureRecognizerDelegate_So16UIViewControllerCXcSgXwz_Xx
219
+ 0xbbfff40 So22UIPanGestureRecognizerCSgXwz_Xx
220
+ 0xbc0125a So28UILongPressGestureRecognizerC
221
+ 0xbc0213a $s5AISDK28AIFloatingSpeakerASRDelegateP
222
+ 0xbc04414 So27UIGestureRecognizerDelegate_pSgXw
223
+ 0xbc0fb8a $s9FlowAVSDK17SpeechAECDelegateP
224
+ 0xbc0fbb8 9FlowAVSDK17SpeechAECDelegate_pSgXw
225
+ 0xbc0fbe2 $s9FlowAVSDK28SpeechProcessorEventDelegateP
226
+ 0xbc0fc0e $s9FlowAVSDK27SpeechProcessorDataDelegateP
227
+ 0xbc0fc46 9FlowAVSDK27SpeechProcessorDataDelegate_pSgXw
228
+ 0xbc0fc74 9FlowAVSDK28SpeechProcessorEventDelegate_pSgXw
229
+ 0xbc0fca4 So21OSpeechSessionManagerCSg
230
+ 0xbc0fcc2 So23OSpeechRealtimeCallTaskCSg
231
+ 0xbc0fce2 So16OSpeechLinkLayerCSg
232
+ 0xbc14342 SS17asrLocalMessageID_
233
+ 0xbc14366 SS17asrLocalMessageID_
234
+ 0xbc149a4 So25SAMICore_AudioMetricsLiteC
235
+ 0xbc1553e $s14FlowAudioUtils26VoiceInputInjecterProtocolP
236
+ 0xbc170f2 So24UISwipeGestureRecognizerC
237
+ 0xbc1a4e8 ySo22UIPanGestureRecognizerC_SbtcSg
238
+ 0xbc1aa90 ySo24UIPinchGestureRecognizerCcSg
239
+ 0xbc1f36a So28UILongPressGestureRecognizerC7gesture_
240
+ 0xbc1f3f4 $s12FlowChatCore21MessagingDraftServiceP
241
+ 0xbc22566 So32UIScreenEdgePanGestureRecognizerCSg
242
+ 0xbc29872 So19UIGestureRecognizerC
243
+ 0xbc42624 $s14FlowDocKitImpl0B18VoiceInputDelegateP
244
+ 0xbc46684 $s10FlowDocSDK0aB17VoiceInputSessionP
245
+ 0xbc4a6cf So8SAMICoreCG
246
+ 0xbc4e8e6 $s11FlowDoraKit28SAMIWakeupVoicePrintObserverP
247
+ 0xbc51662 $s14FlowHardixImpl30DoraSamiConnectionToolDelegateP
248
+ 0xbc5fe30 $s17FlowInputBizModel09MessagingB12DraftServiceP
249
+ 0xbc77224 So19UIGestureRecognizerCSg
250
+ 0xbc7e042 So24UIPinchGestureRecognizerCSg
251
+ 0xbc80aee SbSo19UIGestureRecognizerCcSg
252
+ 0xbc838ea So22UIPanGestureRecognizerC
253
+ 0xbc8390c So32UIScreenEdgePanGestureRecognizerC
254
+ 0xbc88880 $s13FlowSocialBiz26ChatVoiceInputViewDelegateP
255
+ 0xbc8f284 So22UITapGestureRecognizerCSgXw
256
+ 0xbc8fbef ySo22UITapGestureRecognizerCG
257
+ 0xbc92480 $s14FlowVoiceInput0abC8ProviderP
258
+ 0xbc924a2 $s14FlowVoiceInput0bC15SessionProviderP
259
+ 0xbc924ca $s14FlowVoiceInput0bC17ViewModelListenerP
260
+ 0xbc924f4 $s14FlowVoiceInput0abC8ProtocolP
261
+ 0xbc92516 $s14FlowVoiceInput21MessageRecordListenerP
262
+ 0xbc92542 $s14FlowVoiceInput27MessageRecordCenterProviderP
263
+ 0xbc92574 $s14FlowVoiceInput23MessagingAVSessionEventP
264
+ 0xbc925be $s14FlowVoiceInput25MessagingAVSessionServiceP
265
+ 0xbc925ee $s14FlowVoiceInput31MessagingContinuousSpeakServiceP
266
+ 0xbc92624 $s14FlowVoiceInput35MessagingContinuousSpeakModeServiceP
267
+ 0xbc9265e $s14FlowVoiceInput39MessagingContinuousSpeakServiceDelegateP
268
+ 0xbc926c0 $s14FlowVoiceInput09MessagingbC7ServiceP
269
+ 0xbc926ea $s14FlowVoiceInput09Messagingc4ViewB17ToCompleteServiceP
270
+ 0xbc927f6 $s19FlowVoiceInputBizUI05BasiccB16MaskViewDelegateP
271
+ 0xbc92882 $s19FlowVoiceInputBizUI05BasiccB12ViewDelegateP
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python3
2
+ """python3 locate_string_refs.py MACH_O HEX_FILE_OFFSET ...
3
+ Conservative raw ADRP+ADD candidate scanner; it does not validate register liveness.
4
+ """
5
+ import struct,re,bisect,sys
6
+ from pathlib import Path
7
+ b=Path(sys.argv[1]).read_bytes();pos=32;secs=[];segs=[];foff=fsize=None
8
+ for i in range(struct.unpack_from('<I',b,16)[0]):
9
+ c,z=struct.unpack_from('<II',b,pos)
10
+ if c==0x26:foff,fsize=struct.unpack_from('<II',b,pos+8)
11
+ if c==0x19:
12
+ va,vs,fo,fs=struct.unpack_from('<QQQQ',b,pos+24);segs.append((va,fo,fs))
13
+ for j in range(struct.unpack_from('<I',b,pos+64)[0]):
14
+ q=pos+72+j*80;name=b[q:q+16].rstrip(b'\0').decode();v,s,f=struct.unpack_from('<QQI',b,q+32);secs.append((name,v,s,f))
15
+ pos+=z
16
+ def addr(off):return next(v+off-f for v,f,s in segs if f<=off<f+s)
17
+ targs={addr(int(x,16)):x for x in sys.argv[2:]};starts=[]
18
+ if foff is not None:
19
+ cur=next(v for v,f,s in segs if f==0 and s);p=foff
20
+ while p<foff+fsize:
21
+ val=0;shift=0
22
+ while True:
23
+ x=b[p];p+=1;val|=(x&127)<<shift;shift+=7
24
+ if x<128:break
25
+ if not val:break
26
+ cur+=val;starts.append(cur)
27
+ for n,v,s,f in secs:
28
+ if n!='__text':continue
29
+ for off in range(f,f+s-28,4):
30
+ a=struct.unpack_from('<I',b,off)[0]
31
+ if a&0x9f000000!=0x90000000:continue
32
+ imm=((a>>5)&0x7ffff)<<2|((a>>29)&3)
33
+ if imm&(1<<20):imm-=1<<21
34
+ page=((v+off-f)&~4095)+(imm<<12);reg=a&31
35
+ for d in range(4,28,4):
36
+ ins=struct.unpack_from('<I',b,off+d)[0]
37
+ if ins&0xffc00000==0x91000000 and (ins>>5)&31==reg:
38
+ target=page+((ins>>10)&4095)
39
+ if target in targs:
40
+ pc=v+off+d-f;index=bisect.bisect_right(starts,pc)-1
41
+ fs=hex(starts[index]) if index>=0 else 'unknown'
42
+ print(f'string_file_offset={targs[target]}, adrp_va={hex(v+off-f)}, add_va={hex(pc)}, enclosing_function_start={fs}')
@@ -0,0 +1,39 @@
1
+ 0xac0bd65 N4sami19HostStrategyServiceE
2
+ 0xac0dff4 N4sami16VoiceAssistantV219HostTransportClientE
3
+ 0xb3d3088 wss://sami.bytedance.com/internal/api/v1/ws
4
+ 0xb51c130 /Users/3uyyquden7f5wc85e0k2lu3wq/18614/sami_core/common_util/net/sami_core_ttnet_url_request_callback.cc
5
+ 0xb51c34f [SAMICORE: %s@%s,%d] Cronet_UrlRequest_InitWithParams error:%d
6
+ 0xb51c38f [SAMICORE: %s@%s,%d] Cronet_UrlRequest_Start error:%d
7
+ 0xb51ca5e [SAMICORE: %s@%s,%d] websocket init failed, url: %s
8
+ 0xb51cb07 [SAMICORE: %s@%s,%d] socket connect success with url: %s
9
+ 0xb52062b [SAMICORE: %s@%s,%d] not request, because url appkey or token is empty
10
+ 0xb5207a3 [SAMICORE: %s@%s,%d] url: %s, connect timeout: %d
11
+ 0xb521d30 [SAMICORE: %s@%s,%d] asr parameter url: %s, appkey: %s, task_id: %s, connect timeout: %d, retry mode: %d, retry count: %d, max buffer count: %d, finish wait timeout: %d
12
+ 0xb523f1c [SAMICORE: %s@%s,%d] url is null
13
+ 0xb532451 /Users/3uyyquden7f5wc85e0k2lu3wq/18614/sami_core/bindings/oc/speechaudiosdk/src/session/task/OSpeechHostInjectionRealtimeCallTask.mm
14
+ 0xb53aa57 asr_url
15
+ 0xb53abaf [SAMICORE: %s@%s,%d] appkey or url or token_type or token is not set
16
+ 0xb53ae2c [SAMICORE: %s@%s,%d] url: %s
17
+ 0xb54fd37 [SAMICORE: %s@%s,%d] onHostBinaryMessageReceived data is null
18
+ 0xb5527db [SAMICORE: %s@%s,%d] HostStrategyService called %lld
19
+ 0xb552826 /Users/3uyyquden7f5wc85e0k2lu3wq/18614/sami_core/sami_voice_assistant/strategy/HostStrategyService.cpp
20
+ 0xb55288d [SAMICORE: %s@%s,%d] ~HostStrategyService called %lld
21
+ 0xb553f51 [SAMICORE: %s@%s,%d] business_type: %s, url: %s
22
+ 0xb5576be [SAMICORE: %s@%s,%d] appkey: %s, business_type: %s, url: %s
23
+ 0xb55a4ec [SAMICORE: %s@%s,%d] SID_LOG url: %s
24
+ 0xb55a74f [SAMICORE: %s@%s,%d] SID_LOG FetchAudioWithTosUrl: %s
25
+ 0xb55a79b [SAMICORE: %s@%s,%d] SID_LOG FetchAudioWithTosUrl resp_str parse error
26
+ 0xb55a7e3 [SAMICORE: %s@%s,%d] SID_LOG FetchAudioWithTosUrl failed, status_code != 20000000
27
+ 0xb55a836 [SAMICORE: %s@%s,%d] SID_LOG FetchAudioWithTosUrl success, Base64 decode success
28
+ 0xb55a888 [SAMICORE: %s@%s,%d] SID_LOG FetchAudioWithTosUrl failed, Base64 decode failed
29
+ 0xb55c9c2 [SAMICORE: %s@%s,%d] client %llu: state %d url %s
30
+ 0xb55cb82 /Users/3uyyquden7f5wc85e0k2lu3wq/18614/sami_core/sami_voice_assistant/transportV2/HostTransportClient.cpp
31
+ 0xb55cdd8 [SAMICORE: %s@%s,%d] invalid url %s
32
+ 0xb55d4b7 [SAMICORE: %s@%s,%d] use host injection
33
+ 0xb55e0bd [SAMICORE: %s@%s,%d] HostTransport %p
34
+ 0xb55e0e5 /Users/3uyyquden7f5wc85e0k2lu3wq/18614/sami_core/speech_voice_assistant/transport/speech_host_transport.cpp
35
+ 0xb55e151 [SAMICORE: %s@%s,%d] ~HostTransport %p
36
+ 0xbb257c0 https://tosv.byted.org/obj/lab-speech-di-platform/speech_audio/tts/
37
+ 0xbb25810 https://tosv.byted.org/obj/lab-speech-di-platform/speech_audio/audio/
38
+ 0xbe3cd79 samiUrl
39
+ 0xc7c7071 SAMICoreHostCallBackListener
@@ -0,0 +1 @@
1
+ 0x000000010a7996f8 7907 _objc_msgSend