Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
fba77bb
fix: css order
zerob13 Aug 19, 2025
5284000
Merge pull request #755 from ThinkInAIXYZ/optimize/vsredist-check-nsh
hllshiro Aug 19, 2025
dc20e13
refactor: Optimize/builtin knowledge text splitter (#757)
hllshiro Aug 20, 2025
f28e4f2
feat: add aws bedrock provider (#756)
bigyao25 Aug 21, 2025
a865bfa
fix: improve AWS Bedrock provider settings UI (#759)
yyhhyyyyyy Aug 21, 2025
8b8b8c7
feat: html preview with multiple sizes (#618)
Yealove Aug 21, 2025
93d9095
chore: bump better-sqlite3-multiple-ciphers to 12.2.0 for Electron 37…
zerob13 Aug 21, 2025
9cacf4d
fix: resolve model list synchronization issue across tabs (#763)
yyhhyyyyyy Aug 21, 2025
e18c500
fix: remove unnecessary escape character in regex pattern (#764)
yyhhyyyyyy Aug 21, 2025
fb4d7f8
fix: sync provider order changes across all tabs (#765)
yyhhyyyyyy Aug 21, 2025
37fe0c5
fix: disable native tool call for deepseek-reasoner make it thinking
zerob13 Aug 21, 2025
6cb27aa
fix: resolve Gemini 2.5 thinking budget initialization and sync issue…
yyhhyyyyyy Aug 22, 2025
55b594e
fix: resolve MCP market button alignment and layout issues (#769)
yyhhyyyyyy Aug 23, 2025
a4eab54
fix: theme change issue (#770)
zerob13 Aug 23, 2025
ee226ce
fix: enable search engine testing for all engines to resolve CAPTCHA …
zerob13 Aug 25, 2025
0073b7c
feat: add message navigation sidebar with search functionality (#776)
yyhhyyyyyy Aug 25, 2025
3a421eb
fix: improve message navigation scroll position to show content from …
yyhhyyyyyy Aug 25, 2025
bd6977a
feat: support rebrand (#778)
zerob13 Aug 25, 2025
d9cd4e2
docs: enhance rebranding guide with comprehensive English version and…
zerob13 Aug 25, 2025
448471d
fix: add icons support
zerob13 Aug 25, 2025
de18362
feat: implement auto-scroll to latest message and scroll-to-bottom bu…
yyhhyyyyyy Aug 25, 2025
aba9ef1
doc: optimize and remove outdated docs (#781)
zerob13 Aug 26, 2025
80768f6
fix: prevent automatic scroll to bottom after message generation (#783)
yyhhyyyyyy Aug 26, 2025
6a5868e
feat: add loading animation to scroll-to-bottom button during generat…
yyhhyyyyyy Aug 26, 2025
76e1464
fix: sync font size changes across all tabs in real-time (#786)
yyhhyyyyyy Aug 26, 2025
5a45639
chore: bump 0.3.2
zerob13 Aug 26, 2025
6cbd402
feat: replace font size slider with button group for better UX (#788)
yyhhyyyyyy Aug 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,30 @@ The LLM system follows a two-layer architecture:
3. Implement responsive design with Tailwind CSS
4. Add proper error handling and loading states

### UI Changes and Layout Documentation

When making UI/layout changes that affect the visual structure or user interface:

1. **Before Implementation**: Create ASCII diagrams to show the current layout
2. **After Implementation**: Create ASCII diagrams to show the proposed/new layout
3. **Visual Comparison**: Use BEFORE/AFTER format to clearly demonstrate changes
4. **Seek Approval**: Present ASCII mockups to user before implementing changes

Example format:
```
BEFORE:
┌─────────────────────────────────────────────┐
│ [Icon] Component Name [Button] [Hidden] │
└─────────────────────────────────────────────┘

AFTER:
┌─────────────────────────────────────────────┐
│ [Icon] Component Name [Button] [Visible] │
└─────────────────────────────────────────────┘
```

This ensures UI changes are clearly communicated and approved before implementation.

### Debugging

- **Main Process**: Use VSCode debugger with breakpoints
Expand Down
58 changes: 58 additions & 0 deletions brand-config.example-banana.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{
"_comment": "Demo公司品牌配置示例",
"app": {
"name": "BananaAI",
"productName": "DemoAI助手",
"appId": "com.banana.ai-assistant",
"description": "DemoAI助手,您的智能工作伙伴",
"author": "Demo科技有限公司",
"website": "https://banana.com",
"copyright": "© 2025 Demo科技有限公司",
"executableName": "BananaAI"
},
"update": {
"baseUrl": "https://updates.banana.com/"
},
"i18n": {
"appTitle": {
"en-US": "Banana AI Assistant",
"zh-CN": "DemoAI助手",
"zh-TW": "DemoAI助手",
"zh-HK": "DemoAI助手",
"ja-JP": "バナナAIアシスタント",
"ko-KR": "바나나 AI 어시스턴트",
"ru-RU": "Банановый ИИ Помощник",
"fr-FR": "Assistant IA Banane",
"fa-IR": "دستیار هوش مصنوعی موز"
},
"appDescription": {
"en-US": "Banana AI Assistant is your intelligent work partner",
"zh-CN": "DemoAI助手是您的智能工作伙伴",
"zh-TW": "DemoAI助手是您的智能工作夥伴",
"zh-HK": "DemoAI助手是您的智能工作夥伴",
"ja-JP": "バナナAIアシスタントは、あなたの知的な仕事のパートナーです",
"ko-KR": "바나나 AI 어시스턴트는 당신의 지능형 업무 파트너입니다",
"ru-RU": "Банановый ИИ Помощник - ваш умный рабочий партнер",
"fr-FR": "L'Assistant IA Banane est votre partenaire de travail intelligent",
"fa-IR": "دستیار هوش مصنوعی موز شریک هوشمند کاری شماست"
},
"websiteText": {
"en-US": "Visit Banana Website",
"zh-CN": "访问Demo官网",
"zh-TW": "造訪Demo官網",
"zh-HK": "訪問Demo官網",
"ja-JP": "バナナウェブサイトを訪問",
"ko-KR": "바나나 웹사이트 방문",
"ru-RU": "Посетить сайт Банана",
"fr-FR": "Visitez le site Banane",
"fa-IR": "وبسایت موز را ببینید"
}
},
"github": {
"repository": "banana-company/ai-assistant"
},
"mcp": {
"serverDescriptionSuffix": "Demo内置",
"serverDescriptionSuffixEn": "Banana built-in"
}
}
80 changes: 80 additions & 0 deletions brand-config.template.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{
"_comment": "请修改以下配置为您的品牌信息",
"app": {
"name": "DeepChat",
"productName": "DeepChat",
"appId": "com.wefonk.deepchat",
"description": "DeepChat,一个简单易用的AI客户端",
"author": "ThinkInAIXYZ",
"website": "https://deepchatai.cn",
"copyright": "© 2025 ThinkInAIXYZ",
"executableName": "DeepChat"
},
"update": {
"baseUrl": "https://cdn.deepchatai.cn/upgrade/"
},
"i18n": {
"appTitle": {
"en-US": "DeepChat",
"zh-CN": "DeepChat",
"zh-TW": "DeepChat",
"zh-HK": "DeepChat",
"ja-JP": "DeepChat",
"ko-KR": "DeepChat",
"ru-RU": "DeepChat",
"fr-FR": "DeepChat",
"fa-IR": "DeepChat"
},
"appDescription": {
"en-US": "DeepChat is a cross-platform AI client, dedicated to making AI accessible to more people.",
"zh-CN": "DeepChat是一个跨平台AI客户端,致力于让更多人便捷地使用AI。",
"zh-TW": "DeepChat 是一款跨平台 AI 應用程式,致力於讓更多人輕鬆使用 AI。",
"zh-HK": "DeepChat是一個跨平台AI客戶端,致力於讓更多人便捷地使用AI。",
"ja-JP": "DeepChatは、より多くの人々にAIへのアクセスを提供することを目的としたクロスプラットフォームAIクライアントです。",
"ko-KR": "DeepChat은 더 많은 사람들이 AI에 접근할 수 있도록 하는 크로스 플랫폼 AI 클라이언트입니다。",
"ru-RU": "DeepChat - это кроссплатформенный AI-клиент, предназначенный для того, чтобы сделать AI доступным для большего количества людей.",
"fr-FR": "DeepChat est un client IA multiplateforme, dédié à rendre l'IA accessible à plus de personnes.",
"fa-IR": "دیپ چت یک کلاینت هوش مصنوعی چندپلتفرمه که هدفش در دسترس قرار دادن هوش مصنوعی برای افراد بیشتری است."
},
"websiteText": {
"en-US": "Visit Our Website",
"zh-CN": "访问我们的网站",
"zh-TW": "造訪我們的網站",
"zh-HK": "訪問我們的網站",
"ja-JP": "ウェブサイトを訪問",
"ko-KR": "웹사이트 방문",
"ru-RU": "Посетить наш сайт",
"fr-FR": "Visitez notre site web",
"fa-IR": "وبسایت ما را ببینید"
},
"welcomeTitle": {
"en-US": "Welcome to MyApp",
"zh-CN": "欢迎使用 MyApp",
"zh-TW": "歡迎使用 MyApp",
"zh-HK": "歡迎使用 MyApp",
"ja-JP": "MyAppへようこそ",
"ko-KR": "MyApp에 오신 것을 환영합니다",
"ru-RU": "Добро пожаловать в MyApp",
"fr-FR": "Bienvenue sur MyApp",
"fa-IR": "به MyApp خوش آمدید"
},
"welcomeSetupDescription": {
"en-US": "Let's start setting up MyApp",
"zh-CN": "让我们开始设置 MyApp",
"zh-TW": "讓我們開始設定 MyApp",
"zh-HK": "讓我們開始設置 MyApp",
"ja-JP": "MyAppの設定を始めましょう",
"ko-KR": "MyApp 설정을 시작합시다",
"ru-RU": "Начнем настройку MyApp",
"fr-FR": "Commençons la configuration de MyApp",
"fa-IR": "بیایید تنظیم MyApp را شروع کنیم"
}
},
"github": {
"repository": "ThinkInAIXYZ/deepchat"
},
"mcp": {
"serverDescriptionSuffix": "DeepChat内置",
"serverDescriptionSuffixEn": "DeepChat built-in"
}
}
124 changes: 77 additions & 47 deletions build/nsis-installer.nsh
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,27 @@
; https://github.com/electron-userland/electron-builder/issues/1122
!ifndef BUILD_UNINSTALLER
Function checkVCRedist
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64" "Installed"
; $1: arch (e.g., "x64", "arm64")
; returns $0: "1" if installed, "0" otherwise
${If} $1 == "arm64"
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\arm64" "Installed"
${Else}
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\VisualStudio\14.0\VC\Runtimes\x64" "Installed"
${EndIf}
FunctionEnd

Function checkArchitectureCompatibility
; Initialize variables
StrCpy $0 "0" ; Default to incompatible
StrCpy $1 "" ; System architecture
StrCpy $3 "" ; App architecture
; returns $0: "1" if compatible, "0" otherwise
; returns $1: system architecture ("x64", "arm64", "x86")
; returns $3: app architecture ("x64", "arm64", "universal")
StrCpy $0 "0"
StrCpy $1 ""
StrCpy $3 ""

; Check system architecture using built-in NSIS functions
; Check system architecture
${If} ${RunningX64}
; Check if it's ARM64 by looking at processor architecture
ReadEnvStr $2 "PROCESSOR_ARCHITECTURE"
ReadEnvStr $4 "PROCESSOR_ARCHITEW6432"

${If} $2 == "ARM64"
${OrIf} $4 == "ARM64"
StrCpy $1 "arm64"
Expand All @@ -38,37 +44,30 @@
StrCpy $1 "x86"
${EndIf}

; Determine app architecture based on build variables
; Determine app architecture from build variables
!ifdef APP_ARM64_NAME
!ifndef APP_64_NAME
StrCpy $3 "arm64" ; App is ARM64 only
!endif
!endif
!ifdef APP_64_NAME
!ifndef APP_ARM64_NAME
StrCpy $3 "x64" ; App is x64 only
!ifdef APP_64_NAME
StrCpy $3 "universal"
!else
StrCpy $3 "arm64"
!endif
!endif
!ifdef APP_64_NAME
!ifdef APP_ARM64_NAME
StrCpy $3 "universal" ; Both architectures available
!else
!ifdef APP_64_NAME
StrCpy $3 "x64"
!endif
!endif

; If no architecture variables are defined, assume x64
; Default to x64 if no specific app architecture is defined
${If} $3 == ""
StrCpy $3 "x64"
${EndIf}

; Compare system and app architectures
${If} $3 == "universal"
; Universal build, compatible with all architectures
StrCpy $0 "1"
${ElseIf} $1 == $3
; Architectures match
StrCpy $0 "1"
${Else}
; Architectures don't match
StrCpy $0 "0"
${EndIf}
FunctionEnd
Expand All @@ -80,9 +79,12 @@
Push $2
Push $3
Push $4
Push $5 ; For redist URL
Push $6 ; For redist file path

; Check architecture compatibility first
; 1. Check architecture compatibility
Call checkArchitectureCompatibility
; $0="1" for compatible, $1=system arch, $3=app arch
${If} $0 != "1"
MessageBox MB_ICONEXCLAMATION "\
Architecture Mismatch$\r$\n$\r$\n\
Expand All @@ -95,31 +97,59 @@
Abort
${EndIf}

Call checkVCRedist
${If} $0 != "1"
MessageBox MB_YESNO "\
NOTE: ${PRODUCT_NAME} requires $\r$\n\
'Microsoft Visual C++ Redistributable'$\r$\n\
to function properly.$\r$\n$\r$\n\
Download and install now?" /SD IDYES IDYES InstallVCRedist IDNO DontInstall
InstallVCRedist:
inetc::get /CAPTION " " /BANNER "Downloading Microsoft Visual C++ Redistributable..." "https://aka.ms/vs/17/release/vc_redist.x64.exe" "$TEMP\vc_redist.x64.exe"
ExecWait "$TEMP\vc_redist.x64.exe /install /norestart"
;IfErrors InstallError ContinueInstall ; vc_redist exit code is unreliable :(
Call checkVCRedist
${If} $0 == "1"
Goto ContinueInstall
${EndIf}
; 2. Check for VC++ Redistributable based on the determined architecture
; If the app is universal, check based on the system arch. Otherwise, app arch.
${If} $3 == "universal"
StrCpy $2 $1
${Else}
StrCpy $2 $3
${EndIf}

;InstallError:
MessageBox MB_ICONSTOP "\
There was an unexpected error installing$\r$\n\
Microsoft Visual C++ Redistributable.$\r$\n\
The installation of ${PRODUCT_NAME} cannot continue."
DontInstall:
Abort
; Don't check for x86 systems as we don't ship redist for it
${If} $2 == "x86"
Goto ContinueInstall
${EndIf}

Push $2 ; Pass arch to checkVCRedist
Call checkVCRedist
Pop $2
${If} $0 == "1"
Goto ContinueInstall
${EndIf}

; 3. If not installed, prompt to download and install
MessageBox MB_YESNO "\
NOTE: ${PRODUCT_NAME} requires $\r$\n\
'Microsoft Visual C++ Redistributable' ($2)$\r$\n\
to function properly.$\r$\n$\r$\n\
Download and install now?" /SD IDYES IDYES InstallVCRedist IDNO DontInstall

InstallVCRedist:
StrCpy $5 "https://aka.ms/vs/17/release/vc_redist.$2.exe"
StrCpy $6 "$TEMP\vc_redist.$2.exe"
inetc::get /CAPTION " " /BANNER "Downloading Microsoft Visual C++ Redistributable ($2)..." "$5" "$6"
ExecWait "$6 /install /norestart"
; vc_redist exit code is unreliable, so we re-check registry

Push $2 ; Pass arch to checkVCRedist again
Call checkVCRedist
Pop $2
${If} $0 == "1"
Goto ContinueInstall
${EndIf}

MessageBox MB_ICONSTOP "\
There was an unexpected error installing$\r$\n\
Microsoft Visual C++ Redistributable.$\r$\n\
The installation of ${PRODUCT_NAME} cannot continue."
Abort ; Abort if installation failed

DontInstall:
Abort ; Abort if user chose not to install

ContinueInstall:
Pop $6
Pop $5
Pop $4
Pop $3
Pop $2
Expand Down
Loading