Skip to content

Commit 35e68d3

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents 5bda407 + 0cc7e2e commit 35e68d3

File tree

131 files changed

+7491
-2610
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+7491
-2610
lines changed

.vscode/settings.json

+11
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,16 @@
4343
},
4444
"[shellscript]": {
4545
"editor.defaultFormatter": "foxundermoon.shell-format"
46+
},
47+
"explorer.fileNesting.enabled": true,
48+
"explorer.fileNesting.patterns": {
49+
"*.ts": "${capture}.js",
50+
"*.js": "${capture}.js.map, ${capture}.min.js, ${capture}.d.ts",
51+
"*.jsx": "${capture}.js",
52+
"*.tsx": "${capture}.ts",
53+
"tsconfig.json": "tsconfig.*.json",
54+
"package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb,pnpm-workspace.yaml",
55+
"README.md": "*.md",
56+
"Dockerfile": "docker-compose-docs.yaml,docker-compose.yaml,Dockerfile.docs"
4657
}
4758
}

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
## 🌍 README Translations
1414

15-
[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) | [ไทย](./README_TH.md) | [Deutsch](./README_DE.md) | [Tiếng Việt](./README_VI.md) | [עִברִית](https://github.com/elizaos/Elisa/blob/main/README_HE.md) | [Tagalog](./README_TG.md) | [Polski](./README_PL.md) | [Arabic](./README_AR.md) | [Hungarian](./README_HU.md) | [Srpski](./README_RS.md) | [Română](./README_RO.md) | [Nederlands](./README_NL.md)
15+
[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Persian](./README_FA.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) | [ไทย](./README_TH.md) | [Deutsch](./README_DE.md) | [Tiếng Việt](./README_VI.md) | [עִברִית](https://github.com/elizaos/Elisa/blob/main/README_HE.md) | [Tagalog](./README_TG.md) | [Polski](./README_PL.md) | [Arabic](./README_AR.md) | [Hungarian](./README_HU.md) | [Srpski](./README_RS.md) | [Română](./README_RO.md) | [Nederlands](./README_NL.md)
1616

1717
## 🚩 Overview
1818

@@ -80,6 +80,8 @@ git clone https://github.com/elizaos/eliza.git
8080
# Checkout the latest release
8181
# This project iterates fast, so we recommend checking out the latest release
8282
git checkout $(git describe --tags --abbrev=0)
83+
# If the above doesn't checkout the latest release, this should work:
84+
# git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
8385
```
8486

8587
### Start Eliza with Gitpod

README_FA.md

+147
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
# الیزا 🤖
2+
3+
<div align="center">
4+
<img src="./docs/static/img/eliza_banner.jpg" alt="الیزا بنر" width="100%" />
5+
</div>
6+
7+
<div align="center">
8+
9+
📖 [مستندات](https://elizaos.github.io/eliza/) | 🎯 [نمونه‌ها](https://github.com/thejoven/awesome-eliza)
10+
11+
</div>
12+
13+
## 🚩 معرفی کلی
14+
15+
<div align="center">
16+
<img src="./docs/static/img/eliza_diagram.png" alt="نمودار الیزا" width="100%" />
17+
</div>
18+
19+
## ✨ ویژگی‌ها
20+
21+
- 🛠️ پشتیبانی کامل از اتصال به دیسکورد، توییتر و تلگرام
22+
- 🔗 سازگاری با همه مدل‌ها (Llama، Grok، OpenAI، Anthropic و غیره)
23+
- 👥 پشتیبانی از چند عامل و چند اتاق
24+
- 📚 مدیریت و تعامل آسان با اسناد شما
25+
- 💾 حافظه و ذخیره‌سازی اسناد قابل بازیابی
26+
- 🚀 بسیار قابل گسترش - امکان ایجاد اکشن‌ها و کلاینت‌های سفارشی
27+
- ☁️ پشتیبانی از مدل‌های مختلف (local Llama, OpenAI، Anthropic, etc. )
28+
- 📦 به سادگی کار می‌کند!
29+
30+
## آموزش‌های ویدیویی
31+
32+
[AI Agent Dev School](https://www.youtube.com/watch?v=ArptLpQiKfI&list=PLx5pnFXdPTRzWla0RaOxALTSTnVq53fKL)
33+
34+
## 🎯 موارد استفاده
35+
36+
- 🤖 چت‌بات‌ها
37+
- 🕵️ عوامل خودکار
38+
- 📈 مدیریت فرآیندهای کسب‌وکار
39+
- 🎮 کاراکترهای بازی‌های ویدیویی
40+
- 🧠 معاملات تجاری
41+
42+
## 🚀 شروع سریع
43+
44+
### پیش‌نیازها
45+
46+
- [Python 2.7+](https://www.python.org/downloads/)
47+
- [Node.js 23+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
48+
- [pnpm](https://pnpm.io/installation)
49+
50+
> **توجه برای کاربران ویندوز:** [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install-manual) لازم است.
51+
52+
### استفاده از پروژه آغازین (توصیه‌شده)
53+
54+
```bash
55+
git clone https://github.com/elizaos/eliza-starter.git
56+
cd eliza-starter
57+
cp .env.example .env
58+
pnpm i && pnpm build && pnpm start
59+
```
60+
61+
پس از اجرای عامل، باید پیامی برای اجرای "pnpm start:client" دریافت کنید.
62+
یک ترمینال جدید باز کنید و به همان دایرکتوری رفته و دستور زیر را اجرا کنید تا با عامل خود گفتگو کنید:
63+
64+
```bash
65+
pnpm start:client
66+
```
67+
68+
سپس [مستندات](https://elizaos.github.io/eliza/) را مطالعه کنید تا بیاموزید چگونه الیزا را سفارشی کنید.
69+
70+
### اجرای دستی الیزا (فقط در صورتی که تخصص دارید توصیه می‌شود)
71+
72+
```bash
73+
# کلون کردن مخزن
74+
git clone https://github.com/elizaos/eliza.git
75+
76+
# انتخاب آخرین نسخه پایدار
77+
# این پروژه سریع به‌روزرسانی می‌شود، پیشنهاد می‌کنیم آخرین نسخه پایدار را انتخاب کنید
78+
git checkout $(git describe --tags --abbrev=0)
79+
# اگر دستور بالا آخرین نسخه را انتخاب نکرد، این دستور را امتحان کنید:
80+
# git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
81+
```
82+
83+
### اجرای الیزا با Gitpod
84+
85+
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/elizaos/eliza/tree/main)
86+
87+
### ویرایش فایل .env
88+
89+
یک کپی از .env.example بگیرید و مقادیر مناسب را وارد کنید:
90+
91+
```
92+
cp .env.example .env
93+
```
94+
95+
توجه: فایل .env اختیاری است. اگر قصد دارید چندین عامل متمایز اجرا کنید، می‌توانید اطلاعات محرمانه را از طریق فایل JSON شخصیت انتقال دهید.
96+
97+
### شروع خودکار الیزا
98+
99+
این دستور همه مراحل راه‌اندازی پروژه را انجام داده و بات را با شخصیت پیش‌فرض اجرا می‌کند:
100+
101+
```bash
102+
sh scripts/start.sh
103+
```
104+
105+
### ویرایش فایل شخصیت
106+
107+
1. فایل `packages/core/src/defaultCharacter.ts` را باز کنید تا شخصیت پیش‌فرض را تغییر دهید. تغییرات لازم را انجام دهید.
108+
2. برای بارگذاری شخصیت‌های سفارشی:
109+
- از دستور `pnpm start --characters="path/to/your/character.json"` استفاده کنید.
110+
- چندین فایل شخصیت می‌توانند همزمان بارگذاری شوند.
111+
3. اتصال به توییتر (X):
112+
- مقدار `"clients": []` را به `"clients": ["twitter"]` در فایل شخصیت تغییر دهید.
113+
114+
### اجرای دستی الیزا
115+
116+
```bash
117+
pnpm i
118+
pnpm build
119+
pnpm start
120+
121+
# اگر پروژه به دلیل تغییرات سریع نیاز به پاکسازی داشت، دستور زیر را اجرا کنید:
122+
pnpm clean
123+
```
124+
125+
#### نیازمندی‌های اضافی
126+
127+
ممکن است نیاز به نصب Sharp باشد. اگر هنگام راه‌اندازی خطایی دیدید، دستور زیر را اجرا کنید:
128+
129+
```
130+
pnpm install --include=optional sharp
131+
```
132+
133+
### انجمن و تماس
134+
135+
- [مشکلات در GitHub](https://github.com/elizaos/eliza/issues). بهترین گزینه برای گزارش باگ‌ها و پیشنهاد ویژگی‌ها.
136+
- [Discord](https://discord.gg/ai16z). بهترین گزینه برای به اشتراک گذاشتن برنامه‌های شما و ارتباط با جامعه.
137+
138+
## مشارکت‌کنندگان
139+
140+
<a href="https://github.com/elizaos/eliza/graphs/contributors">
141+
<img src="https://contrib.rocks/image?repo=elizaos/eliza" />
142+
</a>
143+
144+
## تاریخچه ستاره‌ها
145+
146+
[![Star History Chart](https://api.star-history.com/svg?repos=elizaos/eliza&type=Date)](https://star-history.com/#elizaos/eliza&Date)
147+

agent/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@elizaos/agent",
3-
"version": "0.1.7",
3+
"version": "0.1.8+build.1",
44
"main": "src/index.ts",
55
"type": "module",
66
"scripts": {
@@ -18,6 +18,7 @@
1818
"exec": "node --enable-source-maps --loader ts-node/esm src/index.ts"
1919
},
2020
"dependencies": {
21+
"@elizaos/adapter-supabase": "workspace:*",
2122
"@elizaos/adapter-postgres": "workspace:*",
2223
"@elizaos/adapter-redis": "workspace:*",
2324
"@elizaos/adapter-sqlite": "workspace:*",
@@ -54,7 +55,7 @@
5455
"@elizaos/plugin-image-generation": "workspace:*",
5556
"@elizaos/plugin-movement": "workspace:*",
5657
"@elizaos/plugin-massa": "workspace:*",
57-
"@elizaos/plugin-nft-generation": "workspace:*",
58+
"@elizaos/plugin-nft-generation": "workspace:*",
5859
"@elizaos/plugin-node": "workspace:*",
5960
"@elizaos/plugin-solana": "workspace:*",
6061
"@elizaos/plugin-solana-agentkit": "workspace:*",

agent/src/index.ts

+93-33
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { PGLiteDatabaseAdapter } from "@elizaos/adapter-pglite";
22
import { PostgresDatabaseAdapter } from "@elizaos/adapter-postgres";
33
import { RedisClient } from "@elizaos/adapter-redis";
44
import { SqliteDatabaseAdapter } from "@elizaos/adapter-sqlite";
5+
import { SupabaseDatabaseAdapter } from "@elizaos/adapter-supabase";
56
import { AutoClientInterface } from "@elizaos/client-auto";
67
import { DiscordClientInterface } from "@elizaos/client-discord";
78
import { FarcasterAgentClient } from "@elizaos/client-farcaster";
@@ -148,6 +149,61 @@ function tryLoadFile(filePath: string): string | null {
148149
return null;
149150
}
150151
}
152+
function mergeCharacters(base: Character, child: Character): Character {
153+
const mergeObjects = (baseObj: any, childObj: any) => {
154+
const result: any = {};
155+
const keys = new Set([...Object.keys(baseObj || {}), ...Object.keys(childObj || {})]);
156+
keys.forEach(key => {
157+
if (typeof baseObj[key] === 'object' && typeof childObj[key] === 'object' && !Array.isArray(baseObj[key]) && !Array.isArray(childObj[key])) {
158+
result[key] = mergeObjects(baseObj[key], childObj[key]);
159+
} else if (Array.isArray(baseObj[key]) || Array.isArray(childObj[key])) {
160+
result[key] = [...(baseObj[key] || []), ...(childObj[key] || [])];
161+
} else {
162+
result[key] = childObj[key] !== undefined ? childObj[key] : baseObj[key];
163+
}
164+
});
165+
return result;
166+
};
167+
return mergeObjects(base, child);
168+
}
169+
async function loadCharacter(filePath: string): Promise<Character> {
170+
const content = tryLoadFile(filePath);
171+
if (!content) {
172+
throw new Error(`Character file not found: ${filePath}`);
173+
}
174+
let character = JSON.parse(content);
175+
validateCharacterConfig(character);
176+
177+
// .id isn't really valid
178+
const characterId = character.id || character.name;
179+
const characterPrefix = `CHARACTER.${characterId.toUpperCase().replace(/ /g, "_")}.`;
180+
const characterSettings = Object.entries(process.env)
181+
.filter(([key]) => key.startsWith(characterPrefix))
182+
.reduce((settings, [key, value]) => {
183+
const settingKey = key.slice(characterPrefix.length);
184+
return { ...settings, [settingKey]: value };
185+
}, {});
186+
if (Object.keys(characterSettings).length > 0) {
187+
character.settings = character.settings || {};
188+
character.settings.secrets = {
189+
...characterSettings,
190+
...character.settings.secrets,
191+
};
192+
}
193+
// Handle plugins
194+
character.plugins = await handlePluginImporting(
195+
character.plugins
196+
);
197+
if (character.extends) {
198+
elizaLogger.info(`Merging ${character.name} character with parent characters`);
199+
for (const extendPath of character.extends) {
200+
const baseCharacter = await loadCharacter(path.resolve(path.dirname(filePath), extendPath));
201+
character = mergeCharacters(baseCharacter, character);
202+
elizaLogger.info(`Merged ${character.name} with ${baseCharacter.name}`);
203+
}
204+
}
205+
return character;
206+
}
151207

152208
export async function loadCharacters(
153209
charactersArg: string
@@ -211,32 +267,7 @@ export async function loadCharacters(
211267
}
212268

213269
try {
214-
const character = JSON.parse(content);
215-
validateCharacterConfig(character);
216-
217-
// .id isn't really valid
218-
const characterId = character.id || character.name;
219-
const characterPrefix = `CHARACTER.${characterId.toUpperCase().replace(/ /g, "_")}.`;
220-
221-
const characterSettings = Object.entries(process.env)
222-
.filter(([key]) => key.startsWith(characterPrefix))
223-
.reduce((settings, [key, value]) => {
224-
const settingKey = key.slice(characterPrefix.length);
225-
return { ...settings, [settingKey]: value };
226-
}, {});
227-
228-
if (Object.keys(characterSettings).length > 0) {
229-
character.settings = character.settings || {};
230-
character.settings.secrets = {
231-
...characterSettings,
232-
...character.settings.secrets,
233-
};
234-
}
235-
236-
// Handle plugins
237-
character.plugins = await handlePluginImporting(
238-
character.plugins
239-
);
270+
const character: Character = await loadCharacter(resolvedPath);
240271

241272
loadedCharacters.push(character);
242273
elizaLogger.info(
@@ -418,6 +449,11 @@ export function getTokenForProvider(
418449
character.settings?.secrets?.INFERA_API_KEY ||
419450
settings.INFERA_API_KEY
420451
);
452+
case ModelProviderName.DEEPSEEK:
453+
return (
454+
character.settings?.secrets?.DEEPSEEK_API_KEY ||
455+
settings.DEEPSEEK_API_KEY
456+
);
421457
default:
422458
const errorMessage = `Failed to get token - unsupported model provider: ${provider}`;
423459
elizaLogger.error(errorMessage);
@@ -426,7 +462,24 @@ export function getTokenForProvider(
426462
}
427463

428464
function initializeDatabase(dataDir: string) {
429-
if (process.env.POSTGRES_URL) {
465+
if (process.env.SUPABASE_URL && process.env.SUPABASE_ANON_KEY) {
466+
elizaLogger.info("Initializing Supabase connection...");
467+
const db = new SupabaseDatabaseAdapter(
468+
process.env.SUPABASE_URL,
469+
process.env.SUPABASE_ANON_KEY
470+
);
471+
472+
// Test the connection
473+
db.init()
474+
.then(() => {
475+
elizaLogger.success("Successfully connected to Supabase database");
476+
})
477+
.catch((error) => {
478+
elizaLogger.error("Failed to connect to Supabase:", error);
479+
});
480+
481+
return db;
482+
} else if (process.env.POSTGRES_URL) {
430483
elizaLogger.info("Initializing PostgreSQL connection...");
431484
const db = new PostgresDatabaseAdapter({
432485
connectionString: process.env.POSTGRES_URL,
@@ -436,9 +489,7 @@ function initializeDatabase(dataDir: string) {
436489
// Test the connection
437490
db.init()
438491
.then(() => {
439-
elizaLogger.success(
440-
"Successfully connected to PostgreSQL database"
441-
);
492+
elizaLogger.success("Successfully connected to PostgreSQL database");
442493
})
443494
.catch((error) => {
444495
elizaLogger.error("Failed to connect to PostgreSQL:", error);
@@ -453,10 +504,19 @@ function initializeDatabase(dataDir: string) {
453504
});
454505
return db;
455506
} else {
456-
const filePath =
457-
process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
458-
// ":memory:";
507+
const filePath = process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
508+
elizaLogger.info(`Initializing SQLite database at ${filePath}...`);
459509
const db = new SqliteDatabaseAdapter(new Database(filePath));
510+
511+
// Test the connection
512+
db.init()
513+
.then(() => {
514+
elizaLogger.success("Successfully connected to SQLite database");
515+
})
516+
.catch((error) => {
517+
elizaLogger.error("Failed to connect to SQLite:", error);
518+
});
519+
460520
return db;
461521
}
462522
}

client/src/lib/info.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"version": "0.1.7"}
1+
{"version": "0.1.8+build.1"}

docs/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "eliza-docs",
3-
"version": "0.1.7",
3+
"version": "0.1.8+build.1",
44
"private": true,
55
"packageManager": "pnpm@9.4.0",
66
"scripts": {

0 commit comments

Comments
 (0)