mirror of
https://github.com/infinilabs/coco-app.git
synced 2025-12-22 06:19:24 +01:00
Compare commits
6 Commits
v0.2.0-rc.
...
v0.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f02b8bb28a | ||
|
|
e68e8f7954 | ||
|
|
18b6e1cbc9 | ||
|
|
062e2873b4 | ||
|
|
e75f4ce187 | ||
|
|
dbbc87523d |
20
docs/content.en/docs/getting-started/installation/windows.md
Normal file
20
docs/content.en/docs/getting-started/installation/windows.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
weight: 10
|
||||
title: "Windows"
|
||||
asciinema: true
|
||||
---
|
||||
|
||||
# Windows
|
||||
|
||||
## Download Coco AI
|
||||
|
||||
Goto [https://coco.rs/](https://coco.rs/)
|
||||
|
||||
## Install Wizard
|
||||
|
||||
{{% load-img "/img/windows/1.png" "" %}}
|
||||
{{% load-img "/img/windows/2.png" "" %}}
|
||||
{{% load-img "/img/windows/3.png" "" %}}
|
||||
{{% load-img "/img/windows/4.png" "" %}}
|
||||
{{% load-img "/img/windows/5.jpeg" "" %}}
|
||||
|
||||
@@ -11,15 +11,30 @@ Information about release notes of Coco Server is provided here.
|
||||
|
||||
### Features
|
||||
|
||||
### Breaking changes
|
||||
|
||||
### Bug fix
|
||||
|
||||
### Improvements
|
||||
|
||||
## 0.2.0 (2025-03-07)
|
||||
|
||||
### Features
|
||||
|
||||
- Add timeout to fusion search #174
|
||||
- Add api to disable or enable server #185
|
||||
- Networked search supports selection of data sources #209
|
||||
- Add deepthink and knowledge search options to RAG based chat
|
||||
- Support i18n, add Chinese language support
|
||||
- Support Windows platform
|
||||
- etc.
|
||||
|
||||
### Breaking changes
|
||||
|
||||
### Bug fix
|
||||
|
||||
- Fix to access deeplink for linux #148
|
||||
- etc.
|
||||
|
||||
### Improvements
|
||||
|
||||
@@ -32,9 +47,15 @@ Information about release notes of Coco Server is provided here.
|
||||
- Refactor: the display of search results and the logic of creating new chats #207
|
||||
- Refactor: AI conversation rendering logic #216
|
||||
- Refresh all server's info on purpose, get the actual health info #225
|
||||
- Improve chat message display
|
||||
- Improve application search, support macOS/Windows and Linux
|
||||
- Display the version of the server in the settings page
|
||||
- Allow to switch between different data sources in networked search
|
||||
- Allow to switch servers in the settings page
|
||||
- etc.
|
||||
|
||||
|
||||
## 0.1.0 (2015-02-16)
|
||||
## 0.1.0 (2025-02-16)
|
||||
|
||||
### Features
|
||||
|
||||
|
||||
BIN
docs/static/img/windows/1.png
vendored
Normal file
BIN
docs/static/img/windows/1.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 440 KiB |
BIN
docs/static/img/windows/2.png
vendored
Normal file
BIN
docs/static/img/windows/2.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 309 KiB |
BIN
docs/static/img/windows/3.png
vendored
Normal file
BIN
docs/static/img/windows/3.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 188 KiB |
BIN
docs/static/img/windows/4.png
vendored
Normal file
BIN
docs/static/img/windows/4.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 359 KiB |
BIN
docs/static/img/windows/5.jpeg
vendored
Normal file
BIN
docs/static/img/windows/5.jpeg
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "coco",
|
||||
"private": true,
|
||||
"version": "0.2.0-rc.1",
|
||||
"version": "0.2.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
|
||||
2
src-tauri/Cargo.lock
generated
2
src-tauri/Cargo.lock
generated
@@ -733,7 +733,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "coco"
|
||||
version = "0.2.0-rc.1"
|
||||
version = "0.2.0"
|
||||
dependencies = [
|
||||
"applications",
|
||||
"async-trait",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "coco"
|
||||
version = "0.2.0-rc.1"
|
||||
version = "0.2.0"
|
||||
description = "Search, connect, collaborate – all in one place."
|
||||
authors = ["INFINI Labs"]
|
||||
edition = "2021"
|
||||
|
||||
@@ -81,7 +81,7 @@ export function ChatHeader({
|
||||
);
|
||||
|
||||
if (currentServiceExists) {
|
||||
switchServer(currentServiceExists, true);
|
||||
switchServer(currentServiceExists);
|
||||
} else {
|
||||
switchServer(enabledServers[enabledServers.length - 1]);
|
||||
}
|
||||
@@ -117,7 +117,7 @@ export function ChatHeader({
|
||||
}
|
||||
};
|
||||
|
||||
const switchServer = async (server: IServer, isCurrent: boolean = false) => {
|
||||
const switchServer = async (server: IServer) => {
|
||||
if (!server) return;
|
||||
try {
|
||||
// Switch UI first, then switch server connection
|
||||
@@ -132,10 +132,8 @@ export function ChatHeader({
|
||||
}
|
||||
setIsLogin(true);
|
||||
//
|
||||
if (!(isCurrent && connected)) {
|
||||
await disconnect();
|
||||
reconnect && reconnect(server);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("switchServer:", error);
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@ import { useThemeStore } from "@/stores/themeStore";
|
||||
|
||||
const ConnectPrompt = () => {
|
||||
const { t } = useTranslation();
|
||||
const activeTheme = useThemeStore((state) => state.activeTheme);
|
||||
const isDark = useThemeStore((state) => state.isDark);
|
||||
|
||||
const logo = activeTheme === "dark" ? LoginDark : LoginLight;
|
||||
const logo = isDark ? LoginDark : LoginLight;
|
||||
|
||||
const handleConnect = async () => {
|
||||
emit("open_settings", "connect");
|
||||
|
||||
@@ -20,7 +20,7 @@ interface DataSourceItemProps {
|
||||
export function DataSourceItem({ name, connector }: DataSourceItemProps) {
|
||||
// const isConnected = true;
|
||||
|
||||
const activeTheme = useThemeStore((state) => state.activeTheme);
|
||||
const isDark = useThemeStore((state) => state.isDark);
|
||||
|
||||
const connector_data = useConnectStore((state) => state.connector_data);
|
||||
const endpoint_http = useAppStore((state) => state.endpoint_http);
|
||||
@@ -42,9 +42,7 @@ export function DataSourceItem({ name, connector }: DataSourceItemProps) {
|
||||
const icons = connectorSource?.icon;
|
||||
|
||||
if (!icons) {
|
||||
return activeTheme === "dark"
|
||||
? source_default_dark_img
|
||||
: source_default_img;
|
||||
return isDark ? source_default_dark_img : source_default_img;
|
||||
}
|
||||
|
||||
if (icons?.startsWith("http://") || icons?.startsWith("https://")) {
|
||||
|
||||
@@ -8,9 +8,9 @@ import { useThemeStore } from "@/stores/themeStore";
|
||||
|
||||
export default function AboutView() {
|
||||
const { t } = useTranslation();
|
||||
const activeTheme = useThemeStore((state) => state.activeTheme);
|
||||
const isDark = useThemeStore((state) => state.isDark);
|
||||
|
||||
const logo = activeTheme === "dark" ? logoDark : logoLight;
|
||||
const logo = isDark ? logoDark : logoLight;
|
||||
|
||||
return (
|
||||
<div className="flex justify-center items-center flex-col h-[calc(100vh-170px)]">
|
||||
|
||||
@@ -18,6 +18,8 @@ export default function Layout() {
|
||||
|
||||
const activeTheme = useThemeStore((state) => state.activeTheme);
|
||||
const setTheme = useThemeStore((state) => state.setTheme);
|
||||
const isDark = useThemeStore((state) => state.isDark);
|
||||
const setIsDark = useThemeStore((state) => state.setIsDark);
|
||||
|
||||
function updateBodyClass(path: string) {
|
||||
const body = document.body;
|
||||
@@ -34,10 +36,9 @@ export default function Layout() {
|
||||
});
|
||||
|
||||
appWindow.onThemeChanged(({ payload }) => {
|
||||
console.log("onThemeChanged", payload);
|
||||
if (activeTheme !== "auto") return;
|
||||
|
||||
setTheme(payload);
|
||||
setIsDark(payload === "dark");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -46,11 +47,19 @@ export default function Layout() {
|
||||
|
||||
await appWindow.setTheme(nextTheme);
|
||||
|
||||
const root = window.document.documentElement;
|
||||
root.className = nextTheme ?? "light";
|
||||
root.dataset.theme = nextTheme ?? "light";
|
||||
nextTheme = nextTheme ?? (await appWindow.theme());
|
||||
|
||||
setIsDark(nextTheme === "dark");
|
||||
}, [activeTheme]);
|
||||
|
||||
useEffect(() => {
|
||||
const theme = isDark ? "dark" : "light";
|
||||
const root = window.document.documentElement;
|
||||
|
||||
root.className = theme;
|
||||
root.dataset.theme = theme;
|
||||
}, [isDark]);
|
||||
|
||||
useEffect(() => {
|
||||
updateBodyClass(location.pathname);
|
||||
}, [location.pathname]);
|
||||
|
||||
@@ -9,6 +9,8 @@ export type IThemeStore = {
|
||||
themes: AppTheme[];
|
||||
activeTheme: AppTheme;
|
||||
setTheme: (theme: AppTheme) => void;
|
||||
isDark: boolean;
|
||||
setIsDark: (isDark: boolean) => void;
|
||||
};
|
||||
|
||||
export const useThemeStore = create<IThemeStore>()(
|
||||
@@ -17,6 +19,8 @@ export const useThemeStore = create<IThemeStore>()(
|
||||
themes: ["dark", "light", "auto"],
|
||||
activeTheme: "auto",
|
||||
setTheme: (activeTheme: AppTheme) => set(() => ({ activeTheme })),
|
||||
isDark: false,
|
||||
setIsDark: (isDark: boolean) => set(() => ({ isDark })),
|
||||
}),
|
||||
{
|
||||
name: "active-theme",
|
||||
|
||||
Reference in New Issue
Block a user