xiaozuoassistant 0.2.19 → 0.2.21
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.
- package/README.md +119 -119
- package/bin/cli.js +896 -896
- package/config.json +41 -41
- package/dist/client/assets/browser-ponyfill-Bcpejndl.js +2 -0
- package/dist/client/assets/index-BfvHy-SS.js +201 -0
- package/dist/client/assets/index-u0lXmgyZ.css +1 -0
- package/dist/client/favicon.svg +4 -0
- package/dist/client/index.html +14 -0
- package/dist/client/locales/en/translation.json +110 -0
- package/dist/client/locales/zh/translation.json +112 -0
- package/dist/server/agents/office.js +23 -0
- package/dist/server/app.js +50 -0
- package/dist/server/channels/base-channel.js +23 -0
- package/dist/server/channels/create-channels.js +18 -0
- package/dist/server/channels/dingtalk.js +83 -0
- package/dist/server/channels/feishu.js +139 -0
- package/dist/server/channels/telegram.js +53 -0
- package/dist/server/channels/terminal.js +49 -0
- package/dist/server/channels/web.js +66 -0
- package/dist/server/channels/wechat.js +107 -0
- package/dist/server/config/loader.js +111 -0
- package/dist/server/config/paths.js +24 -0
- package/dist/server/config/prompts.js +12 -0
- package/dist/server/core/agents/manager.js +27 -0
- package/dist/server/core/agents/runtime.js +92 -0
- package/dist/server/core/brain.js +255 -0
- package/dist/server/core/event-bus.js +24 -0
- package/dist/server/core/logger.js +71 -0
- package/dist/server/core/memories/manager.js +238 -0
- package/dist/server/core/memories/short-term.js +512 -0
- package/dist/server/core/memories/structured.js +357 -0
- package/dist/server/core/memories/vector.js +137 -0
- package/dist/server/core/memory.js +2 -0
- package/dist/server/core/plugin-manager.js +128 -0
- package/dist/server/core/plugin.js +1 -0
- package/dist/server/core/scheduler.js +85 -0
- package/dist/server/core/task-queue.js +104 -0
- package/dist/server/core/types.js +1 -0
- package/dist/server/index.js +878 -0
- package/dist/server/llm/openai.js +23 -0
- package/dist/server/plugins/core-skills/src/create-agent.js +58 -0
- package/dist/server/plugins/core-skills/src/delegate.js +39 -0
- package/dist/server/plugins/core-skills/src/file-system.js +142 -0
- package/dist/server/plugins/core-skills/src/index.js +26 -0
- package/dist/server/plugins/core-skills/src/list-agents.js +24 -0
- package/dist/server/plugins/core-skills/src/search.js +31 -0
- package/dist/server/plugins/core-skills/src/system-time.js +27 -0
- package/dist/server/plugins/office-skills/src/index.js +19 -0
- package/dist/server/plugins/office-skills/src/office-excel.js +84 -0
- package/dist/server/plugins/office-skills/src/office-ppt.js +58 -0
- package/dist/server/plugins/office-skills/src/office-word.js +90 -0
- package/dist/server/routes/auth.js +28 -0
- package/dist/server/server/create-http.js +22 -0
- package/dist/server/server.js +29 -0
- package/dist/server/skills/base-skill.js +20 -0
- package/dist/server/skills/registry.js +52 -0
- package/package.json +116 -116
- package/public/favicon.svg +4 -4
- package/public/locales/en/translation.json +110 -110
- package/public/locales/zh/translation.json +112 -112
- package/scripts/init-app-home.cjs +43 -43
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { createServer } from 'http';
|
|
3
|
+
import { Server } from 'socket.io';
|
|
4
|
+
import cors from 'cors';
|
|
5
|
+
export function createHttpStack() {
|
|
6
|
+
const app = express();
|
|
7
|
+
const httpServer = createServer(app);
|
|
8
|
+
const io = new Server(httpServer, {
|
|
9
|
+
cors: {
|
|
10
|
+
origin: '*',
|
|
11
|
+
methods: ['GET', 'POST']
|
|
12
|
+
},
|
|
13
|
+
pingInterval: 25000,
|
|
14
|
+
pingTimeout: 120000
|
|
15
|
+
});
|
|
16
|
+
httpServer.requestTimeout = 0;
|
|
17
|
+
httpServer.keepAliveTimeout = 70000;
|
|
18
|
+
httpServer.headersTimeout = 75000;
|
|
19
|
+
app.use(cors());
|
|
20
|
+
app.use(express.json());
|
|
21
|
+
return { app, httpServer, io };
|
|
22
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* local server entry file, for local development
|
|
3
|
+
*/
|
|
4
|
+
import app from './app.js';
|
|
5
|
+
/**
|
|
6
|
+
* start server with port
|
|
7
|
+
*/
|
|
8
|
+
const PORT = process.env.PORT || 3001;
|
|
9
|
+
const server = app.listen(PORT, () => {
|
|
10
|
+
console.log(`Server ready on port ${PORT}`);
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* close server
|
|
14
|
+
*/
|
|
15
|
+
process.on('SIGTERM', () => {
|
|
16
|
+
console.log('SIGTERM signal received');
|
|
17
|
+
server.close(() => {
|
|
18
|
+
console.log('Server closed');
|
|
19
|
+
process.exit(0);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
process.on('SIGINT', () => {
|
|
23
|
+
console.log('SIGINT signal received');
|
|
24
|
+
server.close(() => {
|
|
25
|
+
console.log('Server closed');
|
|
26
|
+
process.exit(0);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
export default app;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class BaseSkill {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.enabled = true;
|
|
4
|
+
this.keywords = [];
|
|
5
|
+
}
|
|
6
|
+
validate(params) {
|
|
7
|
+
// 这里可以添加基于 JSON Schema 的验证逻辑
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
toJSON() {
|
|
11
|
+
return {
|
|
12
|
+
type: 'function',
|
|
13
|
+
function: {
|
|
14
|
+
name: this.name,
|
|
15
|
+
description: this.description,
|
|
16
|
+
parameters: this.parameters
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
class SkillRegistry {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.skills = new Map();
|
|
4
|
+
}
|
|
5
|
+
static getInstance() {
|
|
6
|
+
if (!SkillRegistry.instance) {
|
|
7
|
+
SkillRegistry.instance = new SkillRegistry();
|
|
8
|
+
}
|
|
9
|
+
return SkillRegistry.instance;
|
|
10
|
+
}
|
|
11
|
+
register(skill) {
|
|
12
|
+
if (this.skills.has(skill.name)) {
|
|
13
|
+
console.warn(`Skill ${skill.name} is already registered. Overwriting.`);
|
|
14
|
+
}
|
|
15
|
+
this.skills.set(skill.name, skill);
|
|
16
|
+
}
|
|
17
|
+
unregister(skillName) {
|
|
18
|
+
this.skills.delete(skillName);
|
|
19
|
+
}
|
|
20
|
+
enableSkill(skillName) {
|
|
21
|
+
const skill = this.skills.get(skillName);
|
|
22
|
+
if (skill)
|
|
23
|
+
skill.enabled = true;
|
|
24
|
+
}
|
|
25
|
+
disableSkill(skillName) {
|
|
26
|
+
const skill = this.skills.get(skillName);
|
|
27
|
+
if (skill)
|
|
28
|
+
skill.enabled = false;
|
|
29
|
+
}
|
|
30
|
+
getSkill(name) {
|
|
31
|
+
const skill = this.skills.get(name);
|
|
32
|
+
return skill?.enabled ? skill : undefined;
|
|
33
|
+
}
|
|
34
|
+
getAllSkills() {
|
|
35
|
+
return Array.from(this.skills.values());
|
|
36
|
+
}
|
|
37
|
+
getEnabledSkills() {
|
|
38
|
+
return this.getAllSkills().filter(s => s.enabled);
|
|
39
|
+
}
|
|
40
|
+
getToolsDefinition(query) {
|
|
41
|
+
let activeSkills = this.getEnabledSkills();
|
|
42
|
+
// 如果有提供查询语句,可以基于 keywords 进行初步过滤,防止一次性发送过多 Tool
|
|
43
|
+
if (query) {
|
|
44
|
+
// 这里可以实现简单的关键词匹配,或者基于 LLM Router 决定
|
|
45
|
+
// 目前为了不影响基础功能,如果 query 存在,我们暂不严格过滤,
|
|
46
|
+
// 但为将来根据 intent 选择 skills 留出接口
|
|
47
|
+
// activeSkills = activeSkills.filter(s => s.keywords.some(k => query.includes(k)));
|
|
48
|
+
}
|
|
49
|
+
return activeSkills.map(skill => skill.toJSON());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export const skillRegistry = SkillRegistry.getInstance();
|
package/package.json
CHANGED
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "xiaozuoassistant",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "A local-first personal AI assistant with multi-channel support and enhanced memory.",
|
|
5
|
-
"author": "mantle.lau",
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/mantlelau-lgtm/claw.git"
|
|
10
|
-
},
|
|
11
|
-
"keywords": [
|
|
12
|
-
"ai",
|
|
13
|
-
"assistant",
|
|
14
|
-
"office",
|
|
15
|
-
"automation",
|
|
16
|
-
"local-first",
|
|
17
|
-
"agent"
|
|
18
|
-
],
|
|
19
|
-
"type": "module",
|
|
20
|
-
"main": "dist/server/index.js",
|
|
21
|
-
"bin": {
|
|
22
|
-
"xiaozuoAssistant": "bin/cli.js",
|
|
23
|
-
"mybot": "bin/cli.js"
|
|
24
|
-
},
|
|
25
|
-
"files": [
|
|
26
|
-
"dist",
|
|
27
|
-
"bin",
|
|
28
|
-
"scripts",
|
|
29
|
-
"public",
|
|
30
|
-
"config.json",
|
|
31
|
-
"README.md"
|
|
32
|
-
],
|
|
33
|
-
"scripts": {
|
|
34
|
-
"client:dev": "vite",
|
|
35
|
-
"build": "
|
|
36
|
-
"lint": "eslint .",
|
|
37
|
-
"preview": "vite preview",
|
|
38
|
-
"check": "tsc --noEmit",
|
|
39
|
-
"server:dev": "nodemon --watch src --watch config.json --exec tsx src/index.ts",
|
|
40
|
-
"dev": "concurrently \"npm run client:dev\" \"npm run server:dev\"",
|
|
41
|
-
"postinstall": "node scripts/init-app-home.cjs || true"
|
|
42
|
-
},
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"@lancedb/lancedb": "0.22.3",
|
|
45
|
-
"@larksuiteoapi/node-sdk": "^1.59.0",
|
|
46
|
-
"@types/node-cron": "^3.0.11",
|
|
47
|
-
"apache-arrow": "18.1.0",
|
|
48
|
-
"axios": "^1.13.6",
|
|
49
|
-
"better-sqlite3": "^12.6.2",
|
|
50
|
-
"bindings": "^1.5.0",
|
|
51
|
-
"clsx": "^2.1.1",
|
|
52
|
-
"commander": "^14.0.3",
|
|
53
|
-
"cors": "^2.8.5",
|
|
54
|
-
"dotenv": "^17.3.1",
|
|
55
|
-
"express": "^4.21.2",
|
|
56
|
-
"fs-extra": "^11.3.4",
|
|
57
|
-
"i18next": "^25.8.17",
|
|
58
|
-
"i18next-browser-languagedetector": "^8.2.1",
|
|
59
|
-
"i18next-http-backend": "^3.0.2",
|
|
60
|
-
"lucide-react": "^0.511.0",
|
|
61
|
-
"mammoth": "^1.11.0",
|
|
62
|
-
"node-cron": "^4.2.1",
|
|
63
|
-
"officegen": "^0.6.5",
|
|
64
|
-
"openai": "^6.27.0",
|
|
65
|
-
"pptxgenjs": "^4.0.1",
|
|
66
|
-
"qrcode-terminal": "^0.12.0",
|
|
67
|
-
"react": "^18.3.1",
|
|
68
|
-
"react-dom": "^18.3.1",
|
|
69
|
-
"react-i18next": "^16.5.6",
|
|
70
|
-
"react-router-dom": "^7.3.0",
|
|
71
|
-
"socket.io": "^4.8.3",
|
|
72
|
-
"socket.io-client": "^4.8.3",
|
|
73
|
-
"tailwind-merge": "^3.0.2",
|
|
74
|
-
"tar": "^7.5.11",
|
|
75
|
-
"telegraf": "^4.16.3",
|
|
76
|
-
"uuid": "^13.0.0",
|
|
77
|
-
"wechaty": "^1.20.2",
|
|
78
|
-
"winston": "^3.19.0",
|
|
79
|
-
"winston-daily-rotate-file": "^5.0.0",
|
|
80
|
-
"xlsx": "^0.18.5",
|
|
81
|
-
"zustand": "^5.0.3"
|
|
82
|
-
},
|
|
83
|
-
"devDependencies": {
|
|
84
|
-
"@eslint/js": "^9.25.0",
|
|
85
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
86
|
-
"@types/cors": "^2.8.19",
|
|
87
|
-
"@types/express": "^4.17.21",
|
|
88
|
-
"@types/fs-extra": "^11.0.4",
|
|
89
|
-
"@types/node": "^22.15.30",
|
|
90
|
-
"@types/qrcode-terminal": "^0.12.2",
|
|
91
|
-
"@types/react": "^18.3.12",
|
|
92
|
-
"@types/react-dom": "^18.3.1",
|
|
93
|
-
"@types/socket.io": "^3.0.1",
|
|
94
|
-
"@types/tar": "^6.1.13",
|
|
95
|
-
"@types/uuid": "^10.0.0",
|
|
96
|
-
"@vercel/node": "^5.3.6",
|
|
97
|
-
"@vitejs/plugin-react": "^4.4.1",
|
|
98
|
-
"autoprefixer": "^10.4.21",
|
|
99
|
-
"babel-plugin-react-dev-locator": "^1.0.0",
|
|
100
|
-
"concurrently": "^9.2.1",
|
|
101
|
-
"eslint": "^9.25.0",
|
|
102
|
-
"eslint-plugin-react-hooks": "^5.2.0",
|
|
103
|
-
"eslint-plugin-react-refresh": "^0.4.19",
|
|
104
|
-
"globals": "^16.0.0",
|
|
105
|
-
"nodemon": "^3.1.10",
|
|
106
|
-
"postcss": "^8.5.3",
|
|
107
|
-
"tailwindcss": "^3.4.17",
|
|
108
|
-
"tsx": "^4.21.0",
|
|
109
|
-
"typescript": "~5.8.3",
|
|
110
|
-
"typescript-eslint": "^8.30.1",
|
|
111
|
-
"vite": "^6.3.5",
|
|
112
|
-
"vite-plugin-trae-solo-badge": "^1.0.0",
|
|
113
|
-
"vite-tsconfig-paths": "^5.1.4",
|
|
114
|
-
"wait-on": "^9.0.4"
|
|
115
|
-
}
|
|
116
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "xiaozuoassistant",
|
|
3
|
+
"version": "0.2.21",
|
|
4
|
+
"description": "A local-first personal AI assistant with multi-channel support and enhanced memory.",
|
|
5
|
+
"author": "mantle.lau",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/mantlelau-lgtm/claw.git"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"ai",
|
|
13
|
+
"assistant",
|
|
14
|
+
"office",
|
|
15
|
+
"automation",
|
|
16
|
+
"local-first",
|
|
17
|
+
"agent"
|
|
18
|
+
],
|
|
19
|
+
"type": "module",
|
|
20
|
+
"main": "dist/server/index.js",
|
|
21
|
+
"bin": {
|
|
22
|
+
"xiaozuoAssistant": "bin/cli.js",
|
|
23
|
+
"mybot": "bin/cli.js"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist",
|
|
27
|
+
"bin",
|
|
28
|
+
"scripts",
|
|
29
|
+
"public",
|
|
30
|
+
"config.json",
|
|
31
|
+
"README.md"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"client:dev": "vite",
|
|
35
|
+
"build": "rm -rf dist && tsc -b && vite build && tsc -p tsconfig.server.json",
|
|
36
|
+
"lint": "eslint .",
|
|
37
|
+
"preview": "vite preview",
|
|
38
|
+
"check": "tsc --noEmit",
|
|
39
|
+
"server:dev": "nodemon --watch src --watch config.json --exec tsx src/index.ts",
|
|
40
|
+
"dev": "concurrently \"npm run client:dev\" \"npm run server:dev\"",
|
|
41
|
+
"postinstall": "node scripts/init-app-home.cjs || true"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@lancedb/lancedb": "0.22.3",
|
|
45
|
+
"@larksuiteoapi/node-sdk": "^1.59.0",
|
|
46
|
+
"@types/node-cron": "^3.0.11",
|
|
47
|
+
"apache-arrow": "18.1.0",
|
|
48
|
+
"axios": "^1.13.6",
|
|
49
|
+
"better-sqlite3": "^12.6.2",
|
|
50
|
+
"bindings": "^1.5.0",
|
|
51
|
+
"clsx": "^2.1.1",
|
|
52
|
+
"commander": "^14.0.3",
|
|
53
|
+
"cors": "^2.8.5",
|
|
54
|
+
"dotenv": "^17.3.1",
|
|
55
|
+
"express": "^4.21.2",
|
|
56
|
+
"fs-extra": "^11.3.4",
|
|
57
|
+
"i18next": "^25.8.17",
|
|
58
|
+
"i18next-browser-languagedetector": "^8.2.1",
|
|
59
|
+
"i18next-http-backend": "^3.0.2",
|
|
60
|
+
"lucide-react": "^0.511.0",
|
|
61
|
+
"mammoth": "^1.11.0",
|
|
62
|
+
"node-cron": "^4.2.1",
|
|
63
|
+
"officegen": "^0.6.5",
|
|
64
|
+
"openai": "^6.27.0",
|
|
65
|
+
"pptxgenjs": "^4.0.1",
|
|
66
|
+
"qrcode-terminal": "^0.12.0",
|
|
67
|
+
"react": "^18.3.1",
|
|
68
|
+
"react-dom": "^18.3.1",
|
|
69
|
+
"react-i18next": "^16.5.6",
|
|
70
|
+
"react-router-dom": "^7.3.0",
|
|
71
|
+
"socket.io": "^4.8.3",
|
|
72
|
+
"socket.io-client": "^4.8.3",
|
|
73
|
+
"tailwind-merge": "^3.0.2",
|
|
74
|
+
"tar": "^7.5.11",
|
|
75
|
+
"telegraf": "^4.16.3",
|
|
76
|
+
"uuid": "^13.0.0",
|
|
77
|
+
"wechaty": "^1.20.2",
|
|
78
|
+
"winston": "^3.19.0",
|
|
79
|
+
"winston-daily-rotate-file": "^5.0.0",
|
|
80
|
+
"xlsx": "^0.18.5",
|
|
81
|
+
"zustand": "^5.0.3"
|
|
82
|
+
},
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
"@eslint/js": "^9.25.0",
|
|
85
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
86
|
+
"@types/cors": "^2.8.19",
|
|
87
|
+
"@types/express": "^4.17.21",
|
|
88
|
+
"@types/fs-extra": "^11.0.4",
|
|
89
|
+
"@types/node": "^22.15.30",
|
|
90
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
91
|
+
"@types/react": "^18.3.12",
|
|
92
|
+
"@types/react-dom": "^18.3.1",
|
|
93
|
+
"@types/socket.io": "^3.0.1",
|
|
94
|
+
"@types/tar": "^6.1.13",
|
|
95
|
+
"@types/uuid": "^10.0.0",
|
|
96
|
+
"@vercel/node": "^5.3.6",
|
|
97
|
+
"@vitejs/plugin-react": "^4.4.1",
|
|
98
|
+
"autoprefixer": "^10.4.21",
|
|
99
|
+
"babel-plugin-react-dev-locator": "^1.0.0",
|
|
100
|
+
"concurrently": "^9.2.1",
|
|
101
|
+
"eslint": "^9.25.0",
|
|
102
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
103
|
+
"eslint-plugin-react-refresh": "^0.4.19",
|
|
104
|
+
"globals": "^16.0.0",
|
|
105
|
+
"nodemon": "^3.1.10",
|
|
106
|
+
"postcss": "^8.5.3",
|
|
107
|
+
"tailwindcss": "^3.4.17",
|
|
108
|
+
"tsx": "^4.21.0",
|
|
109
|
+
"typescript": "~5.8.3",
|
|
110
|
+
"typescript-eslint": "^8.30.1",
|
|
111
|
+
"vite": "^6.3.5",
|
|
112
|
+
"vite-plugin-trae-solo-badge": "^1.0.0",
|
|
113
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
114
|
+
"wait-on": "^9.0.4"
|
|
115
|
+
}
|
|
116
|
+
}
|
package/public/favicon.svg
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<rect width="32" height="32" fill="#0A0B0D"/>
|
|
3
|
-
<path d="M26.6677 23.7149H8.38057V20.6496H5.33301V8.38159H26.6677V23.7149ZM8.38057 20.6496H23.6201V11.4482H8.38057V20.6496ZM16.0011 16.0021L13.8461 18.1705L11.6913 16.0021L13.8461 13.8337L16.0011 16.0021ZM22.0963 16.0008L19.9414 18.1691L17.7865 16.0008L19.9414 13.8324L22.0963 16.0008Z" fill="#32F08C"/>
|
|
4
|
-
</svg>
|
|
1
|
+
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<rect width="32" height="32" fill="#0A0B0D"/>
|
|
3
|
+
<path d="M26.6677 23.7149H8.38057V20.6496H5.33301V8.38159H26.6677V23.7149ZM8.38057 20.6496H23.6201V11.4482H8.38057V20.6496ZM16.0011 16.0021L13.8461 18.1705L11.6913 16.0021L13.8461 13.8337L16.0011 16.0021ZM22.0963 16.0008L19.9414 18.1691L17.7865 16.0008L19.9414 13.8324L22.0963 16.0008Z" fill="#32F08C"/>
|
|
4
|
+
</svg>
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
{
|
|
2
|
-
"welcome": {
|
|
3
|
-
"title": "Welcome to xiaozuoAssistant",
|
|
4
|
-
"subtitle": "Your personal AI assistant. Select a conversation from the sidebar or start a new one to begin."
|
|
5
|
-
},
|
|
6
|
-
"chat": {
|
|
7
|
-
"title": "Chat",
|
|
8
|
-
"empty": "Start a conversation...",
|
|
9
|
-
"you": "You",
|
|
10
|
-
"assistant": "xiaozuoAssistant",
|
|
11
|
-
"thinking": "Thinking...",
|
|
12
|
-
"inputPlaceholder": "Message xiaozuoAssistant...",
|
|
13
|
-
"disclaimer": "xiaozuoAssistant can make mistakes. Consider checking important information."
|
|
14
|
-
},
|
|
15
|
-
"sessionList": {
|
|
16
|
-
"title": "xiaozuoAssistant",
|
|
17
|
-
"newChat": "New chat",
|
|
18
|
-
"recent": "Recent",
|
|
19
|
-
"settings": "Settings",
|
|
20
|
-
"editSession": "Edit session",
|
|
21
|
-
"deleteConfirm": "Are you sure you want to delete this session?"
|
|
22
|
-
},
|
|
23
|
-
"sessionMeta": {
|
|
24
|
-
"title": "Session Settings",
|
|
25
|
-
"aliasLabel": "Alias (optional)",
|
|
26
|
-
"aliasPlaceholder": "e.g., Project A / Requirements",
|
|
27
|
-
"aliasHint": "Alias is shown in the list and header. Empty falls back to session ID.",
|
|
28
|
-
"workspaceLabel": "Workspace",
|
|
29
|
-
"workspaceHint": "File tools default to this workspace and are restricted to it.",
|
|
30
|
-
"contextLabel": "Context (optional)",
|
|
31
|
-
"contextPlaceholder": "E.g. project background, terminology, current conclusions, long-lived context...",
|
|
32
|
-
"contextHint": "This is persisted and can be used as session context in complex tasks.",
|
|
33
|
-
"selectWorkspace": "Select workspace",
|
|
34
|
-
"selectCurrentFolder": "Select current folder",
|
|
35
|
-
"persistNow": "Persist now",
|
|
36
|
-
"persisting": "Persisting...",
|
|
37
|
-
"persistSuccess": "Persisted",
|
|
38
|
-
"delete": "Delete session",
|
|
39
|
-
"deleting": "Deleting...",
|
|
40
|
-
"deleteConfirm": "Are you sure you want to delete this session?"
|
|
41
|
-
},
|
|
42
|
-
"settings": {
|
|
43
|
-
"title": "Settings",
|
|
44
|
-
"tabs": {
|
|
45
|
-
"general": "General",
|
|
46
|
-
"identity": "Identity",
|
|
47
|
-
"scheduler": "Memory & Scheduler"
|
|
48
|
-
},
|
|
49
|
-
"general": {
|
|
50
|
-
"provider": "Provider",
|
|
51
|
-
"apiKey": "API Key",
|
|
52
|
-
"baseURL": "Base URL",
|
|
53
|
-
"modelName": "Model Name",
|
|
54
|
-
"temperature": "Temperature"
|
|
55
|
-
},
|
|
56
|
-
"identity": {
|
|
57
|
-
"title": "User identity",
|
|
58
|
-
"userId": "UserId",
|
|
59
|
-
"userIdHint": "Used to load identity profile and memories for this userId.",
|
|
60
|
-
"name": "Name",
|
|
61
|
-
"role": "Role",
|
|
62
|
-
"company": "Company",
|
|
63
|
-
"email": "Email",
|
|
64
|
-
"promptTitle": "Base prompt",
|
|
65
|
-
"promptPlaceholder": "E.g. how the assistant should work, output format, constraints...",
|
|
66
|
-
"promptHint": "System prompt is composed from user identity + base prompt and is loaded before new sessions."
|
|
67
|
-
},
|
|
68
|
-
"prompt": {
|
|
69
|
-
"description": "Define how xiaozuoAssistant behaves and responds.",
|
|
70
|
-
"placeholder": "You are a helpful AI assistant..."
|
|
71
|
-
},
|
|
72
|
-
"scheduler": {
|
|
73
|
-
"memoryMaintenance": "Memory Maintenance",
|
|
74
|
-
"description": "Configure when the system should compress old memories and delete expired sessions.",
|
|
75
|
-
"sessionRetentionDays": "Session retention",
|
|
76
|
-
"sessionRetentionHint": "Sessions inactive for longer than this will be deleted during maintenance.",
|
|
77
|
-
"days": "days",
|
|
78
|
-
"cronSchedule": "Cron Schedule",
|
|
79
|
-
"cronHint": "Format: Minute Hour Day Month DayOfWeek (e.g., \"0 0 * * *\" for daily at midnight)",
|
|
80
|
-
"manualTrigger": "Manual Trigger",
|
|
81
|
-
"manualDescription": "Force run the maintenance task immediately.",
|
|
82
|
-
"runNow": "Run Maintenance Now",
|
|
83
|
-
"daily": "Daily",
|
|
84
|
-
"weekly": "Weekly",
|
|
85
|
-
"custom": "Custom (Cron)"
|
|
86
|
-
},
|
|
87
|
-
"buttons": {
|
|
88
|
-
"close": "Close",
|
|
89
|
-
"save": "Save Changes",
|
|
90
|
-
"saving": "Saving...",
|
|
91
|
-
"cancel": "Cancel"
|
|
92
|
-
},
|
|
93
|
-
"messages": {
|
|
94
|
-
"savedSuccess": "Configuration saved successfully!",
|
|
95
|
-
"saveFailed": "Failed to save configuration",
|
|
96
|
-
"networkError": "Network error occurred",
|
|
97
|
-
"maintenanceSuccess": "Maintenance triggered successfully!"
|
|
98
|
-
},
|
|
99
|
-
"language": "Language"
|
|
100
|
-
},
|
|
101
|
-
"weekdays": {
|
|
102
|
-
"sunday": "Sunday",
|
|
103
|
-
"monday": "Monday",
|
|
104
|
-
"tuesday": "Tuesday",
|
|
105
|
-
"wednesday": "Wednesday",
|
|
106
|
-
"thursday": "Thursday",
|
|
107
|
-
"friday": "Friday",
|
|
108
|
-
"saturday": "Saturday"
|
|
109
|
-
}
|
|
110
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"welcome": {
|
|
3
|
+
"title": "Welcome to xiaozuoAssistant",
|
|
4
|
+
"subtitle": "Your personal AI assistant. Select a conversation from the sidebar or start a new one to begin."
|
|
5
|
+
},
|
|
6
|
+
"chat": {
|
|
7
|
+
"title": "Chat",
|
|
8
|
+
"empty": "Start a conversation...",
|
|
9
|
+
"you": "You",
|
|
10
|
+
"assistant": "xiaozuoAssistant",
|
|
11
|
+
"thinking": "Thinking...",
|
|
12
|
+
"inputPlaceholder": "Message xiaozuoAssistant...",
|
|
13
|
+
"disclaimer": "xiaozuoAssistant can make mistakes. Consider checking important information."
|
|
14
|
+
},
|
|
15
|
+
"sessionList": {
|
|
16
|
+
"title": "xiaozuoAssistant",
|
|
17
|
+
"newChat": "New chat",
|
|
18
|
+
"recent": "Recent",
|
|
19
|
+
"settings": "Settings",
|
|
20
|
+
"editSession": "Edit session",
|
|
21
|
+
"deleteConfirm": "Are you sure you want to delete this session?"
|
|
22
|
+
},
|
|
23
|
+
"sessionMeta": {
|
|
24
|
+
"title": "Session Settings",
|
|
25
|
+
"aliasLabel": "Alias (optional)",
|
|
26
|
+
"aliasPlaceholder": "e.g., Project A / Requirements",
|
|
27
|
+
"aliasHint": "Alias is shown in the list and header. Empty falls back to session ID.",
|
|
28
|
+
"workspaceLabel": "Workspace",
|
|
29
|
+
"workspaceHint": "File tools default to this workspace and are restricted to it.",
|
|
30
|
+
"contextLabel": "Context (optional)",
|
|
31
|
+
"contextPlaceholder": "E.g. project background, terminology, current conclusions, long-lived context...",
|
|
32
|
+
"contextHint": "This is persisted and can be used as session context in complex tasks.",
|
|
33
|
+
"selectWorkspace": "Select workspace",
|
|
34
|
+
"selectCurrentFolder": "Select current folder",
|
|
35
|
+
"persistNow": "Persist now",
|
|
36
|
+
"persisting": "Persisting...",
|
|
37
|
+
"persistSuccess": "Persisted",
|
|
38
|
+
"delete": "Delete session",
|
|
39
|
+
"deleting": "Deleting...",
|
|
40
|
+
"deleteConfirm": "Are you sure you want to delete this session?"
|
|
41
|
+
},
|
|
42
|
+
"settings": {
|
|
43
|
+
"title": "Settings",
|
|
44
|
+
"tabs": {
|
|
45
|
+
"general": "General",
|
|
46
|
+
"identity": "Identity",
|
|
47
|
+
"scheduler": "Memory & Scheduler"
|
|
48
|
+
},
|
|
49
|
+
"general": {
|
|
50
|
+
"provider": "Provider",
|
|
51
|
+
"apiKey": "API Key",
|
|
52
|
+
"baseURL": "Base URL",
|
|
53
|
+
"modelName": "Model Name",
|
|
54
|
+
"temperature": "Temperature"
|
|
55
|
+
},
|
|
56
|
+
"identity": {
|
|
57
|
+
"title": "User identity",
|
|
58
|
+
"userId": "UserId",
|
|
59
|
+
"userIdHint": "Used to load identity profile and memories for this userId.",
|
|
60
|
+
"name": "Name",
|
|
61
|
+
"role": "Role",
|
|
62
|
+
"company": "Company",
|
|
63
|
+
"email": "Email",
|
|
64
|
+
"promptTitle": "Base prompt",
|
|
65
|
+
"promptPlaceholder": "E.g. how the assistant should work, output format, constraints...",
|
|
66
|
+
"promptHint": "System prompt is composed from user identity + base prompt and is loaded before new sessions."
|
|
67
|
+
},
|
|
68
|
+
"prompt": {
|
|
69
|
+
"description": "Define how xiaozuoAssistant behaves and responds.",
|
|
70
|
+
"placeholder": "You are a helpful AI assistant..."
|
|
71
|
+
},
|
|
72
|
+
"scheduler": {
|
|
73
|
+
"memoryMaintenance": "Memory Maintenance",
|
|
74
|
+
"description": "Configure when the system should compress old memories and delete expired sessions.",
|
|
75
|
+
"sessionRetentionDays": "Session retention",
|
|
76
|
+
"sessionRetentionHint": "Sessions inactive for longer than this will be deleted during maintenance.",
|
|
77
|
+
"days": "days",
|
|
78
|
+
"cronSchedule": "Cron Schedule",
|
|
79
|
+
"cronHint": "Format: Minute Hour Day Month DayOfWeek (e.g., \"0 0 * * *\" for daily at midnight)",
|
|
80
|
+
"manualTrigger": "Manual Trigger",
|
|
81
|
+
"manualDescription": "Force run the maintenance task immediately.",
|
|
82
|
+
"runNow": "Run Maintenance Now",
|
|
83
|
+
"daily": "Daily",
|
|
84
|
+
"weekly": "Weekly",
|
|
85
|
+
"custom": "Custom (Cron)"
|
|
86
|
+
},
|
|
87
|
+
"buttons": {
|
|
88
|
+
"close": "Close",
|
|
89
|
+
"save": "Save Changes",
|
|
90
|
+
"saving": "Saving...",
|
|
91
|
+
"cancel": "Cancel"
|
|
92
|
+
},
|
|
93
|
+
"messages": {
|
|
94
|
+
"savedSuccess": "Configuration saved successfully!",
|
|
95
|
+
"saveFailed": "Failed to save configuration",
|
|
96
|
+
"networkError": "Network error occurred",
|
|
97
|
+
"maintenanceSuccess": "Maintenance triggered successfully!"
|
|
98
|
+
},
|
|
99
|
+
"language": "Language"
|
|
100
|
+
},
|
|
101
|
+
"weekdays": {
|
|
102
|
+
"sunday": "Sunday",
|
|
103
|
+
"monday": "Monday",
|
|
104
|
+
"tuesday": "Tuesday",
|
|
105
|
+
"wednesday": "Wednesday",
|
|
106
|
+
"thursday": "Thursday",
|
|
107
|
+
"friday": "Friday",
|
|
108
|
+
"saturday": "Saturday"
|
|
109
|
+
}
|
|
110
|
+
}
|