| # ๆ ธๅฟๆฐๆฎๆต |
|
|
| ๆฌๆๆกฃ่ฏฆ็ปๆ่ฟฐ Codev ็ๅ
ญๅคงๆ ธๅฟๆฐๆฎๆต๏ผๅ
ๅซ ASCII ๅบๅๅพๅๅ
ณ้ฎไปฃ็ ่ทฏๅพใ |
|
|
| --- |
|
|
| ## 1. ็จๆท่พๅ
ฅๆต |
|
|
| ็จๆท้่ฟ็ป็ซฏ่พๅ
ฅๆๆฌๅฐ AI ๅๅบ็ๅฎๆด้พ่ทฏใ |
|
|
| ``` |
| User (้ฎ็) |
| โ |
| โ ้ฎๅ
ฅๆๆฌ + Enter |
| โผ |
| PromptInput ็ปไปถ |
| (screens/PromptInput.tsx) |
| โ |
| โ handlePromptSubmit() |
| โผ |
| messageQueueManager.enqueue() |
| (utils/messageQueueManager.ts) |
| โ |
| โ ๅฝไปคๅ
ฅ้ (priority: 'now' | 'next' | 'later') |
| โ FIFO ๆไผๅ
็บงๆๅบ |
| โผ |
| useCommandQueue hook |
| (hooks/useCommandQueue.ts) |
| โ |
| โ ๅบ้ โ ไบค็ป REPL ไธปๅพช็ฏ |
| โผ |
| query() ๅฝๆฐ |
| (query.ts โ QueryEngine.ts) |
| โ |
| โโโ ็ป่ฃ
ๆถๆฏๅๅฒ |
| โโโ ่ทๅ็ณป็ปๆ็คบ่ฏ (src/context.ts) |
| โโโ ๅๅนถๅทฅๅ
ทๅ่กจ (assembleToolPool) |
| โโโ ้ๆฉ Provider |
| โ |
| โโโ [1P Anthropic] โโ Anthropic SDK โโ POST /v1/messages |
| โ |
| โโโ [3P Provider] โโ server/proxy/handler.ts |
| โ |
| โโโ anthropicToOpenaiChat.ts (่ฏทๆฑ่ฝฌๆข) |
| โโโ POST provider API (OpenAI/Groq/DeepSeek...) |
| โโโ openaiChatToAnthropic.ts (ๅๅบ่ฝฌๆข) |
| โ |
| โผ |
| ๆตๅผๅๅบๅๅฐ query() |
| โ |
| โผ |
| ๅทฅๅ
ท่ฐ็จๅๅ (Tool Execution) |
| โ |
| โผ |
| ๆธฒๆๅๅบๅฐ็ป็ซฏ (Ink UI) |
| ``` |
|
|
| ### ๅ
ณ้ฎไปฃ็ ่ทฏๅพ |
|
|
| | ๆญฅ้ชค | ๆไปถ | ๆ ธๅฟๅฝๆฐ | |
| |------|------|----------| |
| | ่พๅ
ฅ | `src/components/PromptInput/PromptInput.tsx` | `handlePromptSubmit()` | |
| | ้ๅ | `src/utils/messageQueueManager.ts` | `enqueue()`, `dequeue()` | |
| | ๆฅ่ฏข | `src/query.ts` | `query()` | |
| | ๅผๆ | `src/QueryEngine.ts` | `QueryEngine` ็ฑป | |
| | ๅทฅๅ
ท | `src/tools.ts` | `assembleToolPool()`, `getTools()` | |
| | ไปฃ็ | `src/server/proxy/handler.ts` | `handleProxyRequest()` | |
| | ๅๅบๆธฒๆ | `src/screens/REPL.tsx` | ๆถๆฏๅ่กจ + ๆตๅผๆธฒๆ | |
|
|
| ### ้ๅไผๅ
็บงๆบๅถ |
|
|
| ``` |
| ไผๅ
็บง: 'now' > 'next' > 'later' |
| ๅไธไผๅ
็บงๅ
FIFO |
| |
| โโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโ |
| โ 'now' โ โ 'next' โ โ 'later' โ |
| โ (็ดงๆฅ) โ โ (ๆญฃๅธธ) โ โ (้็ฅ) โ |
| โโโโโโโโโโโค โโโโโโโโโโโโค โโโโโโโโโโโค |
| โ โโโโถ โ โ โโโโถ โ โ โโโโถ โ |
| โ ๅบ้ไผๅ
โ โ โ โ โ |
| โโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโ |
| ``` |
|
|
| --- |
|
|
| ## 2. ่ฏญ้ณๆ่ทๆต |
|
|
| ไป้บฆๅ
้ฃๅฐ VRM ๅ็ซฏ่ฏญ้ณๆญๆพ็ๅฎๆด็ฎก้ใ |
|
|
| ### ่ฏญ้ณๆ่ทๆถๆ |
|
|
| Codev ไฝฟ็จ่ฟ็จๅ
้ณ้ขๆ่ท๏ผcpal Rust ๅบ๏ผ้่ฟ `native-modules/audio-capture-napi`๏ผ๏ผ่ไธๆฏไผ ็ป็ arecord/parecord ๅญ่ฟ็จใ |
|
|
| ``` |
| ้บฆๅ
้ฃ (็กฌไปถ) |
| โ |
| โ 16kHz S16LE PCM |
| โผ |
| cpal (Rust ๅ็ๆจกๅ) |
| (native-modules/audio-capture-napi) |
| โ |
| โ onData(chunk: Buffer) |
| โผ |
| FriendService.startVoiceCapture() |
| (friend/FriendService.ts) |
| โ |
| โโโโถ Silero VAD (่ฏญ้ณๆดปๅจๆฃๆต) |
| โ (friend/voice/vad-service.ts) |
| โ โ |
| โ โ onnxruntime-web WASM ๆจ็ |
| โ โ 512 samples/frame @ 16kHz (32ms) |
| โ โ |
| โ โโโ ่ฏด่ฏๅผๅง โ ๅผๅง็งฏ็ดฏ้ณ้ข |
| โ โโโ ๆฃๆตๆ็ปญ่ฏญ้ณ (โฅ10 ๅธง โ 320ms ๆฟๆดป) |
| โ โโโ ๆฃๆต้้ณ (โฅ20 ๅธง โ 640ms) โ onSpeechEnd |
| โ โ |
| โ โผ |
| โ ้ณ้ขๆฎต (Float32Array) |
| โ โ |
| โ โผ |
| โ STT (่ฏญ้ณ่ฝฌๆๅญ) |
| โ โโโ Doubao ASM (็ซๅฑฑๅผๆ) |
| โ โ (doubaoime-asr ๅ
) |
| โ โโโ Anthropic STT |
| โ โโโ Whisper (OpenAI) |
| โ โ |
| โ โผ |
| โ ่ฝฌๅฝๆๆฌ (transcript) |
| โ |
| โโโโถ messageQueueManager.enqueue() |
| โ |
| โ { value: transcript, mode: 'prompt', origin: { kind: 'channel', server: 'friend' } } |
| โผ |
| AI ๅค็ (ๅ็จๆท่พๅ
ฅๆต) |
| โ |
| โ AI ๅๅบๆๆฌ |
| โผ |
| TTS (ๆๆฌ่ฝฌ่ฏญ้ณ) |
| โโโ Edge TTS (node-edge-tts, ้ป่ฎค zh-CN-XiaoxiaoNeural) |
| โโโ Qwen TTS (DashScope API, qwen3-tts-flash) |
| โ |
| โ ็ๆ MP3 ๆไปถ |
| โผ |
| broadcastToVrm() |
| (friend/sse.ts) |
| โ |
| โ SSE โ { text, audioUrl, audioIndex } |
| โผ |
| VRM ๅ็ซฏ |
| โโโ ๆญๆพ้ณ้ข |
| โโโ ๆพ็คบๆๆฌๆฐๆณก |
| โโโ ่งฆๅๅฃๅๅๆญฅ |
| ``` |
|
|
| ### VAD ็ถๆๆบ |
|
|
| ``` |
| Silero VAD ๅ
้จ็ถๆ: |
| |
| [้้ณ] โโโโโโโโโโโโโโ ๅธงๆฆ็ < ๆญฃ้ๅผ โโโโโโโโโโโโโโโถ [้้ณ] |
| โ โฒ |
| โ ๅธงๆฆ็ โฅ positiveSpeechThreshold โ |
| โ (่ฟ็ปญ โฅ preSpeechTriggerFrames) โ ๅธงๆฆ็ < ่ด้ๅผ |
| โผ โ (่ฟ็ปญ โฅ redemptionFrames) |
| [ๅฏ่ฝ่ฏด่ฏ] โโโโโโ ๅธงๆฆ็ < ๆญฃ้ๅผ โโโโโโโถ [็กฎ่ฎค่ฏด่ฏ] โโโ |
| โ โ |
| โ onSpeechStart() โ onSpeechEnd(audio) |
| โผ โผ |
| [็งฏ็ดฏ้ณ้ขๅธง] [ๅ้้ณ้ขๆฎตๅฐ STT] |
| ``` |
|
|
| | ๅๆฐ | ้ป่ฎคๅผ | ๅซไน | |
| |------|--------|------| |
| | `positiveSpeechThreshold` | 0.75 | ๅคๅฎไธบ่ฏญ้ณ็็ฝฎไฟกๅบฆ้ๅผ | |
| | `negativeSpeechThreshold` | 0.50 | ๅคๅฎไธบ้้ณ็็ฝฎไฟกๅบฆ้ๅผ | |
| | `preSpeechTriggerFrames` | 10 | ๆฟๆดปๅ้่ฆ่ฟ็ปญ่ฏญ้ณๅธงๆฐ | |
| | `redemptionFrames` | 20 | ็ปๆๅ้่ฆ่ฟ็ปญ้้ณๅธงๆฐ | |
| | `minSpeechFrames` | 6 | ๆๅฐๆๆ่ฏญ้ณๅธงๆฐ | |
| | `rmsThreshold` | 0.004 | RMS ่ฝ้้ๅผ (-48dBFS)๏ผไฝไบๆญคๅผ่ทณ่ฟๆจ็ | |
|
|
| ### ๅๅฃฐๆถ้คๆบๅถ |
|
|
| ``` |
| FriendService ๅจ TTS ๆญๆพๆถ่ชๅจ้้ณ้บฆๅ
้ฃ: |
| |
| AI ๅๅบๆๆฌ |
| โ |
| โผ |
| TTS ๅผๅง็ๆ |
| โ |
| โผ |
| friend.muted = true |
| โ muteTimer = setTimeout(unmute, estimatedTtsDuration) |
| โ |
| โผ |
| TTS ๆญๆพๆ้ด: ้บฆๅ
้ฃๆฐๆฎ โ ไธขๅผ (ไธ้ VAD/STT) |
| โ |
| โผ |
| TTS ๆญๆพ็ปๆ (ๆไผฐ็ฎๆถ้ดๅฐ) |
| โ |
| โผ |
| friend.muted = false |
| โ |
| โผ |
| ๆขๅคๆญฃๅธธๆ่ท |
| ``` |
|
|
| --- |
|
|
| ## 3. ่ฟ็จๆกฅๆฅๆต |
|
|
| Local CLI ๅฐ `claude.ai` ่ฟ็จไผ่ฏ็ WebSocket ๆกฅๆฅใ |
|
|
| ``` |
| Local CLI (ไฝ ็ๆบๅจ) claude.ai ๆๅกๅจ |
| โโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโ |
| |
| claude --remote start |
| โ |
| โผ |
| bridgeMain() |
| (bridge/bridgeMain.ts) |
| โ |
| โ ๅๅปบๆฌๅฐ HTTP ๆๅก |
| โ ๅ่ตท OAuth ็ปๅฝ |
| โผ |
| WebSocket ่ฟๆฅ |
| (bridge/replBridgeTransport.ts) |
| โ โโโโโโโโโโโโบ claude.ai ่ฟ็จไผ่ฏ |
| โ wss://api.claude.ai/... |
| โ |
| โผ |
| replBridge.ts |
| โ |
| โโโ ไป่ฟ็จๆฅๆถ่พๅ
ฅ โ ๅ
ฅ้ๅฐๆฌๅฐ messageQueueManager |
| โโโ ๅฐๆฌๅฐ่พๅบ/ๅทฅๅ
ท็ปๆ โ ๅ้ๅ่ฟ็จ |
| โโโ ๅๆญฅๆฌๅฐๅฝไปคๅฐ่ฟ็จ็ฝๅๅ |
| (BRIDGE_SAFE_COMMANDS) |
| ``` |
|
|
| ### ๅฝไปค่ฟๆปค |
|
|
| ่ฟ็จๆจกๅผไธๅชๅ
่ฎธๅฎๅ
จๅฝไปคๆง่ก๏ผ |
|
|
| ``` |
| REMOTE_SAFE_COMMANDS = { |
| session, // ๆพ็คบ QR/URL |
| exit, // ้ๅบ |
| clear, // ๆธ
ๅฑ |
| help, // ๅธฎๅฉ |
| theme, // ไธป้ข |
| color, // ้ข่ฒ |
| vim, // Vim ๆจกๅผ |
| cost, // ่ฎก่ดน |
| usage, // ็จ้ |
| copy, // ๅคๅถ |
| btw, // ไพฟ็ญพ |
| feedback, // ๅ้ฆ |
| plan, // ่ฎกๅๆจกๅผ |
| keybindings, // ๅฟซๆท้ฎ |
| statusline, // ็ถๆๆ |
| stickers, // ่ดด็บธ |
| mobile, // ็งปๅจ็ซฏ |
| } |
| ``` |
|
|
| ๆกฅๆฅๅฎๅ
จๅฝไปค๏ผไป็งปๅจ็ซฏไนๅฏๆง่ก๏ผ๏ผ |
|
|
| ``` |
| BRIDGE_SAFE_COMMANDS = { |
| compact, // ๅ็ผฉไธไธๆ |
| clear, // ๆธ
ๅฑ |
| cost, // ่ฎก่ดน |
| summary, // ไผ่ฏๆป็ป |
| releaseNotes, // ๆดๆฐๆฅๅฟ |
| files, // ๆไปถๅ่กจ |
| } |
| ``` |
|
|
| --- |
|
|
| ## 4. Friend ่กจๆ
ๆต |
|
|
| LLM ่ฐ็จ `friend_emotion` ๅทฅๅ
ทๅฐ VRM ๅ็ซฏ 3D ่ง่ฒ่กจๆ
ๆธฒๆ็ๅฎๆด้พ่ทฏใ |
|
|
| ``` |
| LLM ๆจ็ |
| โ |
| โ ๆ่ไธไธๆๅ่ฐ็จ FriendEmotionTool |
| โผ |
| FriendEmotionTool.call({ emotion, intensity, mood_delta }) |
| (tools/FriendEmotionTool.ts) |
| โ |
| โโโ ๆดๆฐๅฟๆ
ๆๆฐ moodIndex (0-100, ๅบๅๅผ 60) |
| โ โโโ mood_delta > 0: moodIndex += delta (ไธ้ 100) |
| โ โโโ mood_delta < 0: moodIndex -= delta (ไธ้ 0) |
| โ |
| โโโ broadcastToVrm({ |
| โ emotion: 'happy'|'sad'|'angry'|..., |
| โ emotionIntensity: 0..1, |
| โ moodDelta: n, |
| โ moodIndex: n |
| โ }) |
| โ |
| โผ |
| broadcastToVrm() |
| (friend/sse.ts) |
| โ |
| โ SSE data: JSON.stringify(payload) + "\n\n" |
| โ ๅ้็ปๆๆๅทฒ่ฟๆฅ็ SSE ๅฎขๆท็ซฏ |
| โผ |
| VRM ๅ็ซฏ (Three.js / React Three Fiber) |
| โ |
| โโโ SSE ไบไปถ่งฃๆ |
| โ |
| โโโ VRMScene ็ปไปถ |
| โ โโโ EmoteController โ ่ฎพ็ฝฎ BlendShape ๆททๅๅฝข็ถ |
| โ โ (happy โ ๅด่งไธๆฌ, sad โ ็็ผไธๅ, ็ญ) |
| โ โโโ MotionController โ ่งฆๅ็็ๅจ็ป (ๅผๅธใ็จ็ผ) |
| โ โโโ TextBubble โ ๆพ็คบ่ๅคฉๆๆฌๆฐๆณก |
| โ |
| โโโ AudioPlayback (ๅฆๆๆ audioUrl) |
| โโโ ๆญๆพ TTS ้ณ้ข + ๅฃๅๅๆญฅ |
| ``` |
|
|
| ### ๅฏ็จ่กจๆ
ๅ่กจ |
|
|
| | ่กจๆ
| ่ฏดๆ | |
| |------|------| |
| | `happy` | ๅผๅฟ | |
| | `sad` | ๆฒไผค | |
| | `angry` | ็ๆฐ | |
| | `surprised` | ๆ่ฎถ | |
| | `think` | ๆ่ | |
| | `awkward` | ๅฐดๅฐฌ | |
| | `question` | ็้ฎ | |
| | `curious` | ๅฅฝๅฅ | |
| | `neutral` | ไธญๆง/้ป่ฎค | |
| | `love` | ๅ็ฑ | |
| | `flirty` | ่ฐๆ
| |
| | `greeting` | ๆๆๅผ | |
| | `relaxed` | ๆพๆพ | |
|
|
| ### ๅฟๆ
็ณป็ป |
|
|
| ``` |
| ๅฟๆ
ๆๆฐ (moodIndex) ่ๅด 0-100๏ผๅบๅๅผ 60 |
| |
| 0 โโโโโโโโโโโโโโ 60 โโโโโโโโโโโโโโ 100 |
| [ไฝ่ฝ] [ไธญๆง] [้ซๆถจ] |
| |
| ๆฏๆฌก mood_delta: -3 ๅฐ +3 (ๆๅฐ็ปๅฏนๅผ 1) |
| ้่ฟ prefs ๆไน
ๅ (friend/prefs.ts) |
| |
| moodIndex ๅฝฑๅ: |
| - ๆๆฌๆฐๆณก้ข่ฒ/ๆ ทๅผ |
| - ๅๅงฟๅงฟๆ (ๆพๆพ vs ็ดงๅผ ) |
| - ๆ่ๅจไฝๅน
ๅบฆ |
| ``` |
|
|
| ### SSE ๅนฟๆญไบไปถ็ฑปๅ |
|
|
| Friend SSE ้้้่ฟ `broadcastToVrm()` ๅ้ JSON ไบไปถ๏ผๆๆๅญๆฎตๅไธบๅฏ้๏ผ |
|
|
| ```typescript |
| type VrmBroadcastPayload = { |
| text?: string; // ๆพ็คบๆๆฌ |
| emotion?: string; // ่กจๆ
ๅ็งฐ |
| emotionIntensity?: number; // ่กจๆ
ๅผบๅบฆ 0-1 |
| audioUrl?: string; // TTS ้ณ้ข URL |
| audioIndex?: number; // ้ณ้ขๅบๅๅท |
| clearText?: boolean; // ๆธ
้คๅฝๅๆๆฌ |
| imageUrl?: string; // ๆพ็คบ็ๅพ็ URL |
| moodDelta?: number; // ๅฟๆ
ๅๅ้ |
| moodIndex?: number; // ๅฝๅๅฟๆ
ๆๆฐ |
| sendFirstTts?: boolean; // ๅ้็ฌฌไธไธช TTS ๆฎต |
| appendText?: boolean; // ่ฟฝๅ ๅฐๅทฒๆๆๆฌ |
| replyDone?: boolean; // ๅๅบ็ปๆๆ ่ฎฐ |
| }; |
| ``` |
|
|
| --- |
|
|
| ## 5. Provider ไปฃ็ๆต |
|
|
| CLI ้่ฟ็ปไธๆฅๅฃๅไธๅ LLM Provider ๅ้่ฏทๆฑ็ๅฎๆด่ทฏๅพใ |
|
|
| ### ๅ่ทฏ็ฑๆถๆ |
|
|
| ``` |
| CLI (Anthropic Messages API format) |
| โ |
| โ ้ๆฉ Provider |
| โผ |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| โ Provider ่ทฏ็ฑๅณ็ญ โ |
| โ โ |
| โ isFirstPartyAnthropicBaseUrl() โ |
| โ + isClaudeAISubscriber() โ |
| โ + !isUsing3PServices() โ |
| โ โ โ โ |
| โ ๆฏ/ โ ๅฆ โ |
| โ โ โ โ |
| โ โผ โผ โ |
| โ โโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ |
| โ โ Anthropicโ โ Proxy Handler โ โ |
| โ โ SDK ็ด่ฟ โ โ (server/proxy/ โ โ |
| โ โ โ โ handler.ts) โ โ |
| โ โPOST /v1/ โ โ โ โ |
| โ โmessages โ โ apiFormat? โ โ |
| โ โโโโโโโโโโโโ โ โ โ |
| โ โ โโโ 'openai' โโโถ โ โ |
| โ โ โ Anthropic โ โ โ |
| โ โ โ OpenAI Chat โ โ |
| โ โ โ Completions โ โ |
| โ โ โ โ โ |
| โ โ โโโ 'openai- โ โ |
| โ โ โ responses' โ โ |
| โ โ โ Anthropic โ โ โ |
| โ โ โ OpenAI โ โ |
| โ โ โ Responses API โ โ |
| โ โ โโโโโโโโโโโโโโโโโโ โ |
| โ โโโโโโโโโโโโโโโโโโโโ โ |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| ``` |
|
|
| ### ่ฏทๆฑ/ๅๅบ่ฝฌๆขๆต็จ |
|
|
| ``` |
| Anthropic Messages API ่ฏทๆฑ |
| { |
| model: "claude-3-opus", |
| messages: [{role: "user", content: "Hello"}], |
| system: "You are helpful", |
| max_tokens: 1024, |
| stream: true |
| } |
| โ |
| โผ |
| anthropicToOpenaiChat.ts / anthropicToOpenaiResponses.ts |
| โ |
| โ ่ฝฌๆข้ป่พ: |
| โ - system โ system message (prefix) |
| โ - messages[] โ messages[] (role ๆ ๅฐ) |
| โ - max_tokens โ max_tokens |
| โ - stream โ stream |
| โ - tools โ tools (ๆ ผๅผ้้
) |
| โ |
| โผ |
| OpenAI Chat/Responses API ่ฏทๆฑ |
| { |
| model: "gpt-4", |
| messages: [ |
| {role: "system", content: "You are helpful"}, |
| {role: "user", content: "Hello"} |
| ], |
| max_tokens: 1024, |
| stream: true |
| } |
| โ |
| โ POST ๅฐไธๆธธ Provider URL |
| โผ |
| OpenAI ๆตๅผๅๅบ |
| โ |
| โผ |
| openaiChatToAnthropic.ts / openaiResponsesToAnthropic.ts (ๆตๅผ) |
| โ |
| โ ่ฝฌๆข้ป่พ: |
| โ - delta.content โ delta.text |
| โ - tool_calls โ content_block / tool_use |
| โ - finish_reason โ stop_reason |
| โ |
| โผ |
| Anthropic ๆ ผๅผๆตๅผไบไปถๅ CLI |
| ``` |
|
|
| ### Provider ้
็ฝฎ |
|
|
| ้่ฟ ProviderService (`src/server/services/providerService.ts`) ็ฎก็๏ผ |
|
|
| ```typescript |
| type ProviderConfig = { |
| id: string; |
| name: string; |
| apiFormat: 'openai' | 'openai-responses' | 'anthropic'; |
| baseUrl: string; |
| apiKey: string; |
| models: string[]; |
| }; |
| ``` |
|
|
| ๆฏๆ็ๅ
็ฝฎ Provider๏ผ้จๅ๏ผ๏ผ |
| - OpenAI (GPT-4, GPT-4o) |
| - Groq (Llama, Mixtral) |
| - DeepSeek |
| - ่ชๅฎไน OpenAI ๅ
ผๅฎน API |
|
|
| --- |
|
|
| ## ๆฐๆฎๆตๆฑๆปๅพ |
|
|
| ``` |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| โ ็จๆท็่พๅ
ฅๆฅๆบ โ |
| โโโโโโโฌโโโโโโฌโโโโโโโฌโโโโโโโค |
| โ้ฎ็ โ่ฏญ้ณ โ่ฟ็จ โ Bot โ |
| โ โ โWebSocket โ |
| โโโโฌโโโดโโโฌโโโดโโโฌโโโโดโโโฌโโโ |
| โ โ โ โ |
| โผ โ โ โ |
| โโโโโโโโโโโโ โ โ โ |
| โ message โโโ โ โ |
| โ Queue โโโโโโโโโ โ |
| โ Manager โโโโโโโโโโโโโโโโ |
| โโโโโโโฌโโโโโ |
| โ |
| โผ |
| โโโโโโโโโโโโ |
| โ query() โ |
| โ AI ๅผๆ โ |
| โโโโฌโโโโโฌโโโ |
| โ โ |
| โโโโโโโโโโโโ โโโโโโโโโโโโ |
| โผ โผ |
| โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ |
| โ Tool ๆง่ก โ โ LLM ๆๆฌๅๅบ โ |
| โ (Bash/Read/ โ โโโโโโโโโฌโโโโโโโโโ |
| โ Edit/... โ โ |
| โโโโโโโโโโโโโโโโ โโโโโโโโโดโโโโโโโโโ |
| โ ๅๅๅฐๆถ่ดน่
โ |
| โโโโโโฌโโโโโฌโโโโโโโค |
| โTUI โTTS โSSE โ |
| โๆพ็คบ โๆญๆพ โๆจ้ โ |
| โโโโโโดโโโโโดโโโโโโโ |
| ``` |
|
|
| --- |
|
|
| ## ๅ่ๆไปถ่ทฏๅพ |
|
|
| | ๆไปถ | ่ฏดๆ | |
| |------|------| |
| | `src/utils/messageQueueManager.ts` | ็ปไธๅฝไปค้ๅ | |
| | `src/query.ts` | AI ๆฅ่ฏขๅ
ฅๅฃ | |
| | `src/QueryEngine.ts` | ๆฅ่ฏขๅผๆๅฎ็ฐ | |
| | `src/friend/FriendService.ts` | Friend ่ฏญ้ณ/ๆๆฌๆๅก | |
| | `src/friend/voice/vad-service.ts` | Silero VAD ๅฎ็ฐ | |
| | `src/friend/tts.ts` | Edge TTS / Qwen TTS | |
| | `src/friend/sse.ts` | SSE ๅนฟๆญไธๅฎขๆท็ซฏ็ฎก็ | |
| | `src/friend/server.ts` | Friend HTTP ๆๅก (Bun.serve) | |
| | `src/tools/FriendEmotionTool.ts` | VRM ่กจๆ
ๅทฅๅ
ท | |
| | `src/friend/constants.ts` | ๆ
็ปชๅ่กจๅธธ้ | |
| | `src/server/proxy/handler.ts` | Provider ไปฃ็ๅฅๆ | |
| | `src/server/proxy/transform/` | ๅ่ฎฎ่ฝฌๆขๅจ | |
| | `src/server/proxy/streaming/` | ๆตๅผๅๅบ่ฝฌๆข | |
| | `src/server/services/providerService.ts` | Provider ้
็ฝฎ็ฎก็ | |
| | `src/bridge/bridgeMain.ts` | ่ฟ็จๆกฅๆฅไธปๅ
ฅๅฃ | |
| | `src/bridge/replBridgeTransport.ts` | WebSocket ไผ ่พๅฑ | |
| | `src/bridge/replBridge.ts` | REPL ๆกฅๆฅ้ป่พ | |
|
|