宿¹äº€æµçŸ€Q矀 ç¹å»éŸæ¥å å ¥çŸ€èãAetherLink 宿¹çŸ€ãïŒhttp://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=V-b46WoBNLIM4oc34JMULwoyJ3hyrKac&authKey=q%2FSwCcxda4e55ygtwp3h9adQXhqBLZ9wJdvM0QxTjXQkbxAa2tHoraOGy2fiibyY&noverify=0&group_code=930126592
AetherLinkç§»åšåºçšæ¯äžäžªåºäºç°ä»£Webææ¯æå»ºçè·šå¹³å°AI婿åºçšã该åºç𿝿äžå€ç§AIæš¡åïŒåŠOpenAIãGoogle GeminiãAnthropic ClaudeãGrokãç¡ åºæµåšãç«å±±æ¹èçïŒç亀äºïŒæäŸæµç ç对è¯äœéªïŒå¹¶æ¯æAndroidå¹³å°éšçœ²ãåºçšéçšReactãTypeScriptåCapacitoræ¡æ¶åŒåïŒå ·æé«åºŠå¯å®å¶çæš¡åé 眮ãå€äž»é¢è倩管çãAIæèè¿çšå¯è§åãè¯é³åæãè¯é³è¯å«ãMCPå·¥å ·æ¯æãç¥è¯åºç®¡ççç¹è²åèœã
- åç«¯æ¡æ¶: React 19ãMaterial UI 7
- æå»ºå·¥å ·: Vite 6ãSWCçŒè¯åš
- çŒçšè¯èš: TypeScript 5.8
- ç§»åšæ¡æ¶: Capacitor 7
- ç¶æç®¡ç: Redux & Redux Toolkit 2.8
- APIéæ: OpenAIãGoogle GeminiãAnthropic ClaudeãGrokãç¡ åºæµåšãç«å±±æ¹èçAIæš¡å
- ååš: IndexedDB (Dexie)ãlocalStorage
- æ ·åŒ: MUIç»ä»¶ + Tailwind CSS + èªå®ä¹CSS
- è¯é³ææ¯: ç¡ åºæµåšTTS APIãOpenAI TTSãAzure TTSãWeb Speech APIãCapacitorè¯é³è¯å«
- 代ç é«äº®: Shikiè¯æ³é«äº®åŒæ
- å·¥å ·æ¯æ: MCP (Model Context Protocol) å·¥å ·éæ
- Node.js: v22.x ææŽé«
- npm: v10.x ææŽé«
- Android Studio: çšäºAndroidå¹³å°åŒå
- JDK: Java 11 ææŽé«çæ¬
- Vite: 6.x ææŽé«çæ¬
- Capacitor CLI: 7.x ææŽé«çæ¬
- React: 19.x
- TypeScript: 5.8.x
- å éä»åº
git clone https://github.com/1600822305/AetherLink.git
cd AetherLink- å®è£ äŸèµ
npm install- åå§åCapacitor
npx cap initnpm run devnpm run build # å¿«éæå»ºïŒæšèïŒ
npm run build:ultra # å®æŽæå»ºïŒå
å«ç±»åæ£æ¥ïŒ# æå»ºå¹¶åæ¥å°Android
npm run build
npx cap sync android
npx cap open android- 倿š¡åAI对è¯ïŒæ¯æOpenAIãClaudeãGeminiãGrokçäž»æµAIæš¡å
- è¯é³äº€äºïŒè¯é³è¯å«èŸå ¥ + TTSè¯é³ææŸ
- ç§»åšç«¯äŒåïŒåçAndroidåºçšäœéª
- ç¥è¯åºç®¡çïŒææ¡£äžäŒ ãæºèœæ£çŽ¢
- MCPå·¥å ·éæïŒæ©å±AIèœåçå·¥å ·çæ
- Reactæ¶æïŒç°ä»£åçReact 19åºçšæ¶æ
# åšAndroid Studioäžæå»º
npx cap open android
# ç¶ååšAndroid Studioäž: Build > Build Bundle(s) / APK(s) > Build APK(s)APKå°ä¿ååš android/app/build/outputs/apk/debug/ ç®åœ
AetherLink éçšåå±è®žå¯æš¡åŒïŒæ ¹æ®äœ¿çšè è§æš¡æäŸäžåçè®žå¯æ¹æ¡ïŒ
- äžªäººçšæ·å8人以äžå¢éïŒéçš GNU Affero éçšå ¬å ±è®žå¯è¯ v3.0 (AGPLv3)
- 8人以äžçç»ç»æºæïŒå¿ é¡»è·ååäžäœ¿çšè®žå¯è¯
åŠææšçç»ç»è¶ è¿8äººïŒæéèŠè§é¿AGPLv3çåŒæºä¹å¡ïŒè¯·èç³»æä»¬è·ååäžè®žå¯è¯ïŒ
ð§ åäžææèç³»ïŒ1600822305@qq.com
诊ç»è®žå¯æ¡æ¬Ÿè¯·æ¥ç LICENSE æä»¶ã
- Forkæ¬ä»åº
- å建åèœåæ¯ (
git checkout -b feature/amazing-feature) - æäº€æŽæ¹ (
git commit -m 'æ·»å äžäºåèœ') - æšéå°åæ¯ (
git push origin feature/amazing-feature) - å建äžäžªPull Request
泚æïŒææä»£ç 莡ç®å°è¢«è§äžºåšAGPLv3讞å¯è¯äžæäŸã
AetherLinkæ¯æä»å倧AIæäŸåAPIèªåšè·åå¯çšæš¡åå衚ïŒ
- æ¯æOpenAIãClaude (Anthropic)ãGemini (Google)ãGrok (xAI)ãç¡ åºæµåšåç«å±±æ¹èçäž»æµAIæäŸå
- èªåšå€çäžåAPIæ ŒåŒå端ç¹è·¯åŸ
- æºèœéé èªå®ä¹äžèœ¬ç«API
- æäŸäŒé çåéæºå¶ïŒåœAPI请æ±å€±èŽ¥æ¶äœ¿çšé¢è®Ÿæš¡åå衚
- æ¯æçAPI端ç¹:
- OpenAI:
/v1/models - Claude:
/v1/models - Gemini:
/v1beta/models - Grok:
/v1/models - ç¡
åºæµåš:
/v1/models - ç«å±±æ¹è:
/api/v3/models - èªå®ä¹äžèœ¬ç«: èªå𿣿µå¹¶éé
- OpenAI:
AetherLinkæ¯æå€ç§è¯é³è¯å«æ¹æ¡ïŒ
- Capacitorè¯é³è¯å«ïŒç§»åšç«¯åçè¯é³è¯å«ïŒæ¯æå®æ¶èœ¬åœ
- OpenAI WhisperïŒé«ç²ŸåºŠè¯é³èœ¬ææ¬ïŒæ¯æå€è¯èš
- Web Speech APIïŒæµè§åšåçè¯é³è¯å«äœäžºå€éæ¹æ¡
- æºèœæäŸååæ¢ïŒæ ¹æ®ç¯å¢èªåšéæ©æäœ³è¯å«æ¹æ¡
- 宿¶åéŠïŒæ¯æéšåç»ææŸç€ºå宿¶ç¶ææŽæ°
- æäœè¯Žè¯ïŒçŽè§çè¯é³èŸå ¥äº€äºæ¹åŒ
AetherLinkæäŸå€å±çº§çè¯é³åæè§£å³æ¹æ¡ïŒ
- Azure TTSïŒåŸ®èœ¯Azureè®€ç¥æå¡ïŒæ¯æSSMLåé«èŽšéè¯é³
- OpenAI TTSïŒOpenAIè¯é³åæïŒæ¯ææµåŒåéæµåŒèŸåº
- ç¡ åºæµåšTTSïŒé«èŽšéäžæè¯é³åæ
- Web Speech APIïŒæµè§åšåçè¯é³åæäœäžºå€é
- æºèœé级ïŒèªåšå°è¯å€ç§TTSæå¡ïŒç¡®ä¿è¯é³ææŸæå
- è¯é³æ§å¶ïŒææŸ/æåãè¯éè°æŽãè¯é³éæ©çåèœ
éæModel Context Protocol (MCP)å·¥å ·çæïŒ
- Fetchå·¥å ·ïŒæ¯æçœç»è¯·æ±åæ°æ®è·å
- è·šå¹³å°å Œå®¹ïŒç§»åšç«¯äœ¿çšåçHTTPïŒWeb端䜿çšä»£ç
- å·¥å ·åæž²æïŒå¯è§åå·¥å ·æ§è¡ç»æ
- é误å€çïŒå®åçé误å€çåéè¯æºå¶
AetherLinké对移åšè®Ÿå€è¿è¡äºå€é¡¹äŒåïŒ
- è¿å鮿ºèœå€çïŒæ ¹æ®åœå页é¢äžäžææºèœå€çAndroidè¿åé®è¡äžº
- åšè倩忬¢è¿é¡µé¢æŸç€ºéåºç¡®è®€å¯¹è¯æ¡
- åšå ¶ä»é¡µé¢è¿åäžäžçº§é¡µé¢
- 鲿¢æå€éåºåºçš
- WebViewçæ¬æ£æµïŒèªå𿣿µWebViewçæ¬å¹¶æäŸå级建议
- ååºåŒåžå±ïŒèªéåºäžåå±å¹å°ºå¯žåæ¹å
- è§ŠæžäŒåïŒé对觊æžäº€äºäŒåçUIå çŽ åæå¿
- æ§èœäŒåïŒåå°äžå¿ èŠçæž²æå计ç®ïŒç¡®ä¿åšç§»åšè®Ÿå€äžæµç è¿è¡
- åçåèœéæïŒçžæºãæä»¶ç³»ç»ãåªèŽŽæ¿çåçåèœæ çŒéæ
- Reactäž»æ¡æ¶ïŒäœ¿çšReact 19äœäžºäž»èŠUIæ¡æ¶
- ç±»åå®å šïŒå®æŽçTypeScriptæ¯æ
- ææ¡£ç®¡çïŒæ¯æå€ç§ææ¡£æ ŒåŒçäžäŒ å管ç
- æºèœæ£çŽ¢ïŒåºäºAIçè¯ä¹æçŽ¢åå 容æ£çŽ¢
- è¯æ³é«äº®ïŒåºäºShikiçé«èŽšéè¯æ³é«äº®
- å€è¯èšæ¯æïŒæ¯æäž»æµçŒçšè¯èš
- æ¯ææŸç€ºAIçæèè¿çšïŒäž»èŠæ¯æGrokæš¡åïŒ
- å¯è§åæèæ¶éŽåè¿çšïŒæ¹åçšæ·äœéª
- æ§å¶å°æ¥å¿æ¥ç
- çœç»è¯·æ±çæ§
- API请æ±åååºåæ
AetherLink/
âââ android/ # Androidå¹³å°çžå
³ä»£ç åé
眮
â âââ app/ # Androidåºçšäž»èŠä»£ç
â â âââ src/ # æºä»£ç ç®åœ
â â â âââ main/ # äž»èŠä»£ç
â â â â âââ assets/ # Webèµæºåé
眮æä»¶
â â â â âââ java/ # Java代ç
â â â â âââ res/ # Androidèµæºæä»¶(åžå±ãåŸæ ç)
â â â âââ test/ # æµè¯ä»£ç
â â âââ build.gradle # åºçšçº§æå»ºé
眮
â âââ build.gradle # 项ç®çº§æå»ºé
眮
â âââ capacitor.settings.gradle # Capacitoræä»¶é
眮
â âââ variables.gradle # å
šå±åéåçæ¬é
眮
âââ public/ # éæèµæºæä»¶åå
Œ
±èµäº§
â âââ assets/ # åŸæ ãåŸççå
Œ
±èµæº
âââ src/ # æºä»£ç ç®åœ
â âââ assets/ # åºçšå
åŸçãåäœçèµæº
â âââ components/ # å¯å€çšUIç»ä»¶
â â âââ AIDebateButton.tsx # AI蟩论åèœæé®ç»ä»¶
â â âââ AppInitializer.tsx # åºçšåå§åç»ä»¶
â â âââ BackButtonHandler.tsx # Androidè¿åé®å€çç»ä»¶ïŒç®¡çè¿åé®è¡äžº
â â âââ ChatInput.tsx # è倩èŸå
¥æ¡ç»ä»¶ïŒå€çæ¶æ¯èŸå
¥ååé
â â âââ ChatToolbar.tsx # è倩工å
·æ ç»ä»¶ïŒæäŸè倩页é¢é¡¶éšæäœ
â â âââ CitationsList.tsx # åŒçšå衚ç»ä»¶ïŒæŸç€ºæ¶æ¯åŒçš
â â âââ CodeEditor/ # 代ç çŒèŸåšç»ä»¶ç®åœ
â â âââ CompactChatInput.tsx # 玧ååè倩èŸå
¥æ¡
â â âââ DevTools/ # åŒåè
å·¥å
·ç»ä»¶ç®åœ
â â âââ EnhancedToast.tsx # å¢åŒºåæç€ºç»ä»¶
â â âââ ExitConfirmDialog.tsx # éåºç¡®è®€å¯¹è¯æ¡ïŒé²æ¢æå€éåºåºçš
â â âââ FilePreview.tsx # æä»¶é¢è§ç»ä»¶
â â âââ ImageGeneration/ # åŸåçæåèœç»ä»¶ç®åœ
â â âââ IntegratedFilePreview.tsx # éææä»¶é¢è§ç»ä»¶
â â âââ KnowledgeManagement/ # ç¥è¯åºç®¡çç»ä»¶ç®åœ
â â âââ ModelManagementDialog.tsx # æš¡å管çå¯¹è¯æ¡
â â âââ MultiModelSelector.tsx # 倿š¡åéæ©åšç»ä»¶
â â âââ RouterWrapper.tsx # è·¯ç±å
è£
ç»ä»¶ïŒæäŸè·¯ç±èœ¬æ¢ååšç»
â â âââ SearchResultsCollapsible.tsx # æçŽ¢ç»ææå ç»ä»¶
â â âââ Sidebar/ # 䟧蟹æ ç»ä»¶ç®åœ
â â âââ SystemPromptBubble.tsx # ç³»ç»æç€ºæ°æ³¡ç»ä»¶
â â âââ SystemPromptDialog.tsx # ç³»ç»æç€ºå¯¹è¯æ¡
â â âââ TTS/ # è¯é³åæç»ä»¶ç®åœ
â â âââ ToolsSwitch.tsx # å·¥å
·åŒå
³ç»ä»¶
â â âââ TopicManagement/ # è¯é¢ç®¡çç»ä»¶ïŒå
å«åç»åææœåèœ
â â â âââ AssistantTab.tsx # 婿æ çŸé¡µç»ä»¶
â â â âââ GroupComponents.tsx # åç»çžå
³ç»ä»¶
â â â âââ GroupDialog.tsx # å建/çŒèŸåç»å¯¹è¯æ¡
â â â âââ Sidebar.tsx # 䟧蟹æ äž»ç»ä»¶
â â â âââ SidebarTabs.tsx # äŸ§èŸ¹æ æ çŸé¡µç»ä»¶
â â â âââ TopicTab.tsx # è¯é¢æ çŸé¡µç»ä»¶
â â â âââ index.ts # 富åºç»ä»¶
â â âââ TopicStats/ # è¯é¢ç»è®¡ç»ä»¶ç®åœ
â â âââ UpdateNoticeDialog.tsx # æŽæ°éç¥å¯¹è¯æ¡
â â âââ UploadMenu.tsx # äžäŒ èåç»ä»¶
â â âââ UrlScraperStatus.tsx # URLæåç¶æç»ä»¶
â â âââ VoiceRecognition/ # è¯é³è¯å«ç»ä»¶ç®åœ
â â âââ WebSearchProviderSelector.tsx # çœç»æçŽ¢æäŸåéæ©åš
â â âââ chat/ # è倩çžå
³åç»ä»¶
â â âââ common/ # éçšç»ä»¶ç®åœ
â â âââ message/ # æ¶æ¯çžå
³åç»ä»¶
â â â âââ ThinkingProcess/ # AIæèè¿çšå±ç€ºç»ä»¶
â â â âââ MessageActions/ # æ¶æ¯æäœæé®ç»ä»¶
â â âââ settings/ # 讟眮çžå
³ç»ä»¶
â â â âââ ModelCard/ # æš¡åå¡çç»ä»¶ïŒå±ç€ºå䞪暡åä¿¡æ¯
â â âââ test/ # æµè¯ç»ä»¶ç®åœ
â âââ pages/ # 页é¢çº§ç»ä»¶
â â âââ ChatPage/ # è倩䞻çé¢
â â â âââ components/ # è倩页é¢åç»ä»¶
â â â â âââ ModelSelector.tsx # æš¡åéæ©åšç»ä»¶
â â â â âââ ... # å
¶ä»è倩页é¢åç»ä»¶
â â â âââ hooks/ # è倩页é¢èªå®ä¹é©å
â â â â âââ useModelSelection.ts # æš¡åéæ©é»èŸé©å
â â â â âââ useChatFeatures.ts # è倩åèœé©å
â â â â âââ ... # å
¶ä»è倩页é¢é©å
â â â âââ index.tsx # è倩页é¢äž»ç»ä»¶
â â âââ DevToolsPage.tsx # åŒåè
è°è¯å·¥å
·é¡µé¢ïŒæäŸæ¥å¿åAPIè°è¯
â â âââ KnowledgeBase/ # ç¥è¯åºç®¡ç页é¢ç®åœ
â â âââ Settings/ # 讟眮çžå
³é¡µé¢
â â â âââ AppearanceSettings/ # å€è§è®Ÿçœ®ïŒäž»é¢ååäœé
眮
â â â âââ BehaviorSettings/ # è¡äžºè®Ÿçœ®ïŒåŠåéæ¹åŒåéç¥
â â â âââ DefaultModelSettings/ # é»è®€æš¡å讟眮页é¢
â â â âââ ModelProviderSettings/ # æš¡åæäŸå讟眮页é¢
â â â âââ AddProviderPage/ # æ·»å æäŸå页é¢
â â â âââ DataSettings/ # æ°æ®ç®¡ç讟眮ïŒå
æ¬å€ä»œåæ¢å€
â â â âââ VoiceSettings/ # è¯é³è®Ÿçœ®ïŒTTSåè¯é³è¯å«é
眮
â â â âââ index.tsx # 讟眮䞻页é¢
â â â âââ AboutPage/ # å
³äºé¡µé¢ïŒæŸç€ºåºçšä¿¡æ¯
â â âââ SettingsPage.tsx # 讟眮页é¢å
¥å£
â â âââ WelcomePage.tsx # 欢è¿/åŒå¯Œé¡µé¢ïŒéŠæ¬¡äœ¿çšæ¶æŸç€º
â âââ routes/ # è·¯ç±é
眮å富èªé»èŸ
â â âââ index.tsx # è·¯ç±å®ä¹åé
眮
â âââ shared/ # å
±äº«ä»£ç åäžå¡é»èŸ
â â âââ api/ # APIæ¥å£å°è£
â â â âââ anthropic/ # Anthropic Claude APIéæ
â â â âââ google/ # Google Gemini APIéæ
â â â âââ grok/ # Grok APIéæ
â â â âââ openai/ # OpenAI APIéæ
â â â âââ siliconflow/ # ç¡
åºæµåšAPIéæ
â â â âââ volcengine/ # ç«å±±æ¹èAPIéæ
â â â âââ index.ts # APIç»äžå
¥å£åè·¯ç±
â â âââ config/ # é
眮æä»¶ç®åœ
â â âââ constants/ # åžžéå®ä¹ç®åœ
â â âââ data/ # éææ°æ®åé¢è®Ÿé
眮
â â â âââ models/ # é¢è®Ÿæš¡åé
眮
â â â âââ presetModels.ts # é¢è®Ÿæš¡åæ°æ®
â â âââ hooks/ # èªå®ä¹React Hooks
â â â âââ useAppState/ # åºçšç¶æç®¡çHook
â â â âââ useModels/ # æš¡å管çHook
â â â âââ ... # å
¶ä»èªå®ä¹Hook
â â âââ middlewares/ # ReduxäžéŽä»¶ç®åœ
â â âââ prompts/ # æç€ºè¯æš¡æ¿ç®åœ
â â âââ providers/ # æäŸåçžå
³ä»£ç ç®åœ
â â âââ services/ # äžå¡æå¡å±
â â â âââ APIService.ts # APIæå¡ïŒå€çæš¡åè·ååæ¶æ¯åé
â â â âââ AssistantService.ts # 婿æå¡ïŒç®¡çAI婿é
眮
â â â âââ LoggerService.ts # æ¥å¿è®°åœæå¡ïŒç»äžæ¥å¿ç®¡ç
â â â âââ SystemPromptService.ts # ç³»ç»æç€ºè¯æå¡
â â â âââ ThinkingService.ts # AIæèè¿çšå€çæå¡
â â â âââ TopicService.ts # è¯é¢ç®¡çæå¡
â â â âââ TTSService.ts # ææ¬å°è¯é³èœ¬æ¢æå¡
â â â âââ VoiceRecognitionService.ts # è¯é³è¯å«æå¡
â â â âââ VersionService.ts # çæ¬ç®¡çæå¡
â â â âââ ImageUploadService.ts # åŸçäžäŒ æå¡ïŒå€çåŸçéæ©åå猩
â â â âââ assistant/ # 婿çžå
³æå¡ç®åœ
â â â âââ mcpServers/ # MCPæå¡åšéæç®åœ
â â â âââ storageService.ts # ååšæå¡(IndexedDB/localStorage)
â â âââ store/ # Reduxç¶æç®¡ç
â â â âââ messagesSlice.ts # æ¶æ¯ç¶æç®¡ç
â â â âââ settingsSlice.ts # è®Ÿçœ®ç¶æç®¡ç
â â â âââ slices/ # å
¶ä»ç¶æåç
â â â â âââ groupsSlice.ts # åç»ç¶æç®¡ç
â â â â âââ ... # å
¶ä»ç¶æåç
â â â âââ index.ts # Storeé
眮å富åº
â â âââ styles/ # æ ·åŒæä»¶ç®åœ
â â âââ types/ # TypeScriptç±»åå®ä¹
â â â âââ Assistant.ts # å©æç±»åå®ä¹
â â â âââ index.ts # æ žå¿ç±»åå®ä¹ïŒå
嫿¶æ¯ãæš¡åçç±»å
â â âââ utils/ # å·¥å
·åœæ°åèŸ
婿¹æ³
â â âââ api/ # APIçžå
³å·¥å
·åœæ°
â â âââ format/ # æ ŒåŒåå·¥å
·åœæ°
â â âââ storage/ # æ¬å°ååšå·¥å
·åœæ°
â â âââ index.ts # éçšå·¥å
·åœæ°ïŒåŠIDçæãToken计ç®ç
â âââ App.tsx # åºçšæ ¹ç»ä»¶ïŒå
å«äž»é¢åè·¯ç±é
眮
â âââ main.tsx # åºçšå
¥å£æä»¶ïŒæž²ææ ¹ç»ä»¶
â âââ index.css # å
šå±æ ·åŒ
âââ capacitor.config.ts # Capacitorç§»åšåºçšé
眮ïŒå®ä¹åºçšIDåæä»¶è®Ÿçœ®
âââ index.html # åºçšå
¥å£HTMLæä»¶
âââ package.json # 项ç®äŸèµåèæ¬é
眮
âââ tsconfig.json # TypeScriptçŒè¯é
眮(åŒçšé
眮)
âââ tsconfig.app.json # åºçšä»£ç TypeScripté
眮
âââ tsconfig.node.json # Nodeç¯å¢TypeScripté
眮
âââ vite.config.ts # Viteæå»ºå·¥å
·é
眮ïŒå
å«äŒåååå
çç¥
âââ tailwind.config.js # Tailwind CSSé
眮
âââ eslint.config.js # ESLint代ç è§èé
眮