From cb587b44f89ad8558acf88f11a8f82ab901a1389 Mon Sep 17 00:00:00 2001 From: CheddarQueso Date: Thu, 19 Dec 2024 15:21:41 -0500 Subject: [PATCH 1/8] news-plugin --- .env.example | 3 + agent/package.json | 2 +- agent/src/index.ts | 2 + packages/plugin-news/.npmignore | 6 + packages/plugin-news/eslint.config.mjs | 3 + packages/plugin-news/package.json | 19 +++ packages/plugin-news/src/actions/index.ts | 2 + packages/plugin-news/src/actions/news.ts | 172 ++++++++++++++++++++++ packages/plugin-news/src/index.ts | 10 ++ packages/plugin-news/tsconfig.json | 13 ++ packages/plugin-news/tsup.config.ts | 20 +++ 11 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 packages/plugin-news/.npmignore create mode 100644 packages/plugin-news/eslint.config.mjs create mode 100644 packages/plugin-news/package.json create mode 100644 packages/plugin-news/src/actions/index.ts create mode 100644 packages/plugin-news/src/actions/news.ts create mode 100644 packages/plugin-news/src/index.ts create mode 100644 packages/plugin-news/tsconfig.json create mode 100644 packages/plugin-news/tsup.config.ts diff --git a/.env.example b/.env.example index a9364c2427c..5a3ffe01b13 100644 --- a/.env.example +++ b/.env.example @@ -553,3 +553,6 @@ AKASH_MANIFEST_VALIDATION_LEVEL=strict # Quai Network Ecosystem QUAI_PRIVATE_KEY= QUAI_RPC_URL=https://rpc.quai.network + +# News API Key +NEWS_API_KEY= diff --git a/agent/package.json b/agent/package.json index 20735867877..7afa757a415 100644 --- a/agent/package.json +++ b/agent/package.json @@ -92,7 +92,7 @@ "@elizaos/plugin-hyperliquid": "workspace:*", "@elizaos/plugin-akash": "workspace:*", "@elizaos/plugin-quai": "workspace:*", - "@elizaos/plugin-nft-collections": "workspace:*", + "@elizaos/plugin-news": "workspace:*", "readline": "1.3.0", "ws": "8.18.0", "yargs": "17.7.2" diff --git a/agent/src/index.ts b/agent/src/index.ts index f529786934b..649938a9118 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -69,6 +69,7 @@ import { imageGenerationPlugin } from "@elizaos/plugin-image-generation"; import { lensPlugin } from "@elizaos/plugin-lensNetwork"; import { multiversxPlugin } from "@elizaos/plugin-multiversx"; import { nearPlugin } from "@elizaos/plugin-near"; +import { newsPlugin } from "@elizaos/plugin-news"; import { nftGenerationPlugin } from "@elizaos/plugin-nft-generation"; import { createNodePlugin } from "@elizaos/plugin-node"; import { obsidianPlugin } from "@elizaos/plugin-obsidian"; @@ -735,6 +736,7 @@ export async function createAgent( // character.plugins are handled when clients are added plugins: [ bootstrapPlugin, + newsPlugin, getSecret(character, "CONFLUX_CORE_PRIVATE_KEY") ? confluxPlugin : null, diff --git a/packages/plugin-news/.npmignore b/packages/plugin-news/.npmignore new file mode 100644 index 00000000000..078562eceab --- /dev/null +++ b/packages/plugin-news/.npmignore @@ -0,0 +1,6 @@ +* + +!dist/** +!package.json +!readme.md +!tsup.config.ts \ No newline at end of file diff --git a/packages/plugin-news/eslint.config.mjs b/packages/plugin-news/eslint.config.mjs new file mode 100644 index 00000000000..92fe5bbebef --- /dev/null +++ b/packages/plugin-news/eslint.config.mjs @@ -0,0 +1,3 @@ +import eslintGlobalConfig from "../../eslint.config.mjs"; + +export default [...eslintGlobalConfig]; diff --git a/packages/plugin-news/package.json b/packages/plugin-news/package.json new file mode 100644 index 00000000000..538a413d2b6 --- /dev/null +++ b/packages/plugin-news/package.json @@ -0,0 +1,19 @@ +{ + "name": "@ai16z/plugin-news", + "version": "0.1.5-alpha.5", + "main": "dist/index.js", + "type": "module", + "types": "dist/index.d.ts", + "dependencies": { + "@ai16z/eliza": "workspace:*", + "tsup": "8.3.5" + }, + "scripts": { + "build": "tsup --format esm --dts", + "dev": "tsup --format esm --dts --watch", + "lint": "eslint . --fix" + }, + "peerDependencies": { + "whatwg-url": "7.1.0" + } +} diff --git a/packages/plugin-news/src/actions/index.ts b/packages/plugin-news/src/actions/index.ts new file mode 100644 index 00000000000..a2e178b192f --- /dev/null +++ b/packages/plugin-news/src/actions/index.ts @@ -0,0 +1,2 @@ +export * from "./news.ts"; + diff --git a/packages/plugin-news/src/actions/news.ts b/packages/plugin-news/src/actions/news.ts new file mode 100644 index 00000000000..33bfdcc2533 --- /dev/null +++ b/packages/plugin-news/src/actions/news.ts @@ -0,0 +1,172 @@ +import { + ActionExample, + Content, + generateText, + HandlerCallback, + IAgentRuntime, + Memory, + ModelClass, + State, + type Action, +} from "@ai16z/eliza"; + + +export const currentNewsAction: Action = { + name: "CURRENT_NEWS", + similes: ["NEWS", "GET_NEWS", "GET_CURRENT_NEWS"], + validate: async (_runtime: IAgentRuntime, _message: Memory) => { + return true; + }, + description: + "Get the latest news about a specific topic if asked by the user.", + handler: async ( + _runtime: IAgentRuntime, + _message: Memory, + _state: State, + _options: { [key: string]: unknown; }, + _callback: HandlerCallback, + ): Promise => { + async function getCurrentNews(searchTerm: string) { + try { + const apiKey = process.env.NEWS_API_KEY; + if (!apiKey) { + throw new Error('NEWS_API_KEY environment variable is not set'); + } + + const response = await fetch(`https://newsapi.org/v2/everything?q=${searchTerm}&sortBy=publishedAt&apiKey=${apiKey}`); + const data = await response.json(); + + if (!data.articles || !Array.isArray(data.articles)) { + return "No news articles found."; + } + + return data.articles.slice(0, 5).map(article => { + const content = article.content || article.description || "No content available"; + return `${article.title || "No title"}\n${article.description || "No description"}\n${article.url || ""}\n${content.slice(0, 1000)}`; + }).join("\n\n"); + } catch (error) { + console.error("Error fetching news:", error); + return "Sorry, there was an error fetching the news."; + } + } + + const context = `Extract the search term from the {{userName}} message. The message is: ${_message.content.text}. Only return the search term, no other text.` + + const searchTerm = await generateText({ + runtime: _runtime, + context, + modelClass: ModelClass.SMALL, + stop: ["\n"], + }); + + const currentNews = await getCurrentNews(searchTerm); + const responseText = ` *protocol droid noises*\n\n${currentNews}`; + + + const newMemory: Memory = { + userId: _message.agentId, + agentId: _message.agentId, + roomId: _message.roomId, + content: { + text: responseText, + action: "CURRENT_NEWS_RESPONSE", + source: _message.content?.source, + } as Content, + }; + + await _runtime.messageManager.createMemory(newMemory); + + _callback(newMemory.content); + return true; + + }, + examples: [ + [ + { + user: "{{user1}}", + content: { text: "what's the latest news about ?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + + [ + { + user: "{{user1}}", + content: { text: "can you show me the latest news about ?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + + [ + { + user: "{{user1}}", + content: { text: "what's in the news today?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + + [ + { + user: "{{user1}}", + content: { text: "show me current events about ?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + + [ + { + user: "{{user1}}", + content: { text: "what's going on in the world of ?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + + [ + { + user: "{{user1}}", + content: { text: "give me the latest headlines about ?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + + [ + { + user: "{{user1}}", + content: { text: "show me news updates about ?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + + [ + { + user: "{{user1}}", + content: { text: "what are today's top stories about ?" }, + }, + { + user: "{{user2}}", + content: { text: "", action: "CURRENT NEWS" }, + }, + ], + ] as ActionExample[][], +} as Action; \ No newline at end of file diff --git a/packages/plugin-news/src/index.ts b/packages/plugin-news/src/index.ts new file mode 100644 index 00000000000..e2f0939fdf5 --- /dev/null +++ b/packages/plugin-news/src/index.ts @@ -0,0 +1,10 @@ +import { Plugin } from "@ai16z/eliza"; +import { currentNewsAction } from "./actions/news.ts"; + +export * as actions from "./actions"; + +export const newsPlugin: Plugin = { + name: "news", + description: "Get the latest news about a specific topic if asked by the user.", + actions: [currentNewsAction], +}; diff --git a/packages/plugin-news/tsconfig.json b/packages/plugin-news/tsconfig.json new file mode 100644 index 00000000000..834c4dce269 --- /dev/null +++ b/packages/plugin-news/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../core/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "types": [ + "node" + ] + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file diff --git a/packages/plugin-news/tsup.config.ts b/packages/plugin-news/tsup.config.ts new file mode 100644 index 00000000000..e42bf4efeae --- /dev/null +++ b/packages/plugin-news/tsup.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], // Ensure you're targeting CommonJS + external: [ + "dotenv", // Externalize dotenv to prevent bundling + "fs", // Externalize fs to use Node.js built-in module + "path", // Externalize other built-ins if necessary + "@reflink/reflink", + "@node-llama-cpp", + "https", + "http", + "agentkeepalive", + // Add other modules you want to externalize + ], +}); From 079ce1a74d272ee3d49b40b8f8077d0cb65d3336 Mon Sep 17 00:00:00 2001 From: CheddarQueso Date: Thu, 19 Dec 2024 17:59:27 -0500 Subject: [PATCH 2/8] chore: added description to NEWS API KEY label --- .env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 5a3ffe01b13..20e44b650e2 100644 --- a/.env.example +++ b/.env.example @@ -555,4 +555,4 @@ QUAI_PRIVATE_KEY= QUAI_RPC_URL=https://rpc.quai.network # News API Key -NEWS_API_KEY= +NEWS_API_KEY= # News API KEY from https://newsapi.org/ From ddc8dea94e5969f6c2185191fd71c5ab2eced497 Mon Sep 17 00:00:00 2001 From: CheddarQueso Date: Wed, 1 Jan 2025 02:09:19 -0500 Subject: [PATCH 3/8] add README.md documentation --- packages/plugin-news/README.md | 171 +++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 packages/plugin-news/README.md diff --git a/packages/plugin-news/README.md b/packages/plugin-news/README.md new file mode 100644 index 00000000000..f6f0786d916 --- /dev/null +++ b/packages/plugin-news/README.md @@ -0,0 +1,171 @@ +# @elizaos/plugin-news + +A plugin for fetching and handling real-time news data through NewsAPI integration. + +## Overview + +This plugin provides functionality to: +- Fetch latest news articles from NewsAPI +- Search news by specific topics or keywords +- Get article summaries including titles, descriptions, and URLs +- Limit results to most recent and relevant content + +## Installation + +```bash +npm install @elizaos/plugin-news +``` + +## Configuration + +The plugin requires the following environment variable: + +```env +NEWS_API_KEY=your_newsapi_key # Required for accessing NewsAPI +``` + +## Usage + +Import and register the plugin in your Eliza configuration: + +```typescript +import { newsPlugin } from "@elizaos/plugin-news"; + +export default { + plugins: [newsPlugin], + // ... other configuration +}; +``` + +## Features + +### Current News Action + +The plugin provides a `CURRENT_NEWS` action that responds to various news-related queries: + +```typescript +// Example queries the action responds to: +"what's the latest news about ?" +"can you show me the latest news about ?" +"what's in the news today?" +"show me current events about ?" +"what's going on in the world of ?" +"give me the latest headlines about ?" +"show me news updates about ?" +"what are today's top stories about ?" +``` + +The action returns up to 5 recent articles, including: +- Article title +- Description +- URL +- Content preview (up to 1000 characters) + +## Development + +### Building + +```bash +npm run build +``` + +### Development Mode + +```bash +npm run dev +``` + +### Linting + +```bash +npm run lint +``` + +### Project Structure + +``` +plugin-news/ +├── src/ +│ ├── actions/ # Action implementations +│ │ ├── news.ts # Current news action +│ │ └── index.ts # Action exports +│ └── index.ts # Main plugin export +├── package.json +└── tsconfig.json +``` + +## Dependencies + +- `@ai16z/eliza`: Core Eliza framework +- `tsup`: Build tool for TypeScript packages +- Other standard dependencies listed in package.json + +## API Reference + +### Actions + +- `CURRENT_NEWS`: Main action for fetching news + - Aliases: `["NEWS", "GET_NEWS", "GET_CURRENT_NEWS"]` + - Automatically extracts search terms from user messages + - Returns formatted news articles with titles, descriptions, and URLs + +### Response Format + +```typescript +interface NewsResponse { + title: string; + description: string; + url: string; + content: string; // Limited to 1000 characters +} +``` + +## Future Enhancements + +1. **Additional News Sources** + - Integration with multiple news APIs + - RSS feed support + - Social media news aggregation + +2. **Content Analysis** + - Sentiment analysis of news articles + - Topic categorization + - Trend detection + - Fact-checking integration + +3. **Customization Options** + - User preferences for news sources + - Custom filtering rules + - Personalized news feeds + - Language preferences + +4. **Advanced Search** + - Date range filtering + - Source filtering + - Category-based search + - Advanced query syntax + +5. **Performance Improvements** + - Caching layer + - Rate limiting optimization + - Response compression + - Batch processing + +We welcome community feedback and contributions to help prioritize these enhancements. + +## Contributing + +Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. + + +## License + +This plugin is part of the Eliza project. See the main project repository for license information. + +## Credits + +This plugin integrates with and builds upon several key technologies: + +- [NewsAPI](https://newsapi.org/): News data provider + +Plugin generated from Eliza coding tutorial [Agent Dev School Part 2](https://www.youtube.com/watch?v=XenGeAcPAQo) From be682b5b4d70621953a0afa8d52ab21776faf71b Mon Sep 17 00:00:00 2001 From: CheddarQueso Date: Wed, 1 Jan 2025 19:09:43 -0500 Subject: [PATCH 4/8] updated & tested plugin --- packages/plugin-news/src/actions/news.ts | 66 ++++++++++++++++++++---- packages/plugin-news/src/index.ts | 8 +-- 2 files changed, 61 insertions(+), 13 deletions(-) diff --git a/packages/plugin-news/src/actions/news.ts b/packages/plugin-news/src/actions/news.ts index 33bfdcc2533..5304d9af194 100644 --- a/packages/plugin-news/src/actions/news.ts +++ b/packages/plugin-news/src/actions/news.ts @@ -33,24 +33,69 @@ export const currentNewsAction: Action = { throw new Error('NEWS_API_KEY environment variable is not set'); } - const response = await fetch(`https://newsapi.org/v2/everything?q=${searchTerm}&sortBy=publishedAt&apiKey=${apiKey}`); - const data = await response.json(); - - if (!data.articles || !Array.isArray(data.articles)) { + // Add quotes and additional context terms + const enhancedSearchTerm = encodeURIComponent(`"${searchTerm}" AND (Spain OR Spanish OR Madrid OR Felipe)`); + + const [everythingResponse, headlinesResponse] = await Promise.all([ + fetch( + `https://newsapi.org/v2/everything?` + + `q=${enhancedSearchTerm}&` + + `sortBy=relevancy&` + + `language=en&` + + `pageSize=50&` + + `apiKey=${apiKey}` + ), + fetch( + `https://newsapi.org/v2/top-headlines?` + + `q=${searchTerm}&` + + `country=es&` + + `language=en&` + + `pageSize=50&` + + `apiKey=${apiKey}` + ) + ]); + + const [everythingData, headlinesData] = await Promise.all([ + everythingResponse.json(), + headlinesResponse.json() + ]); + + // Combine and filter articles + const allArticles = [ + ...(headlinesData.articles || []), + ...(everythingData.articles || []) + ].filter(article => + article.title && + article.description && + (article.title.toLowerCase().includes(searchTerm.toLowerCase()) || + article.description.toLowerCase().includes(searchTerm.toLowerCase())) + ); + + // Remove duplicates and get up to 15 articles + const uniqueArticles = Array.from( + new Map(allArticles.map(article => [article.title, article])).values() + ).slice(0, 15); + + if (!uniqueArticles.length) { return "No news articles found."; } - return data.articles.slice(0, 5).map(article => { - const content = article.content || article.description || "No content available"; - return `${article.title || "No title"}\n${article.description || "No description"}\n${article.url || ""}\n${content.slice(0, 1000)}`; - }).join("\n\n"); + return uniqueArticles.map((article, index) => { + const content = article.description || "No content available"; + const urlDomain = article.url ? new URL(article.url).hostname : ""; + return `📰 Article ${index + 1}\n` + + `━━━━━━━━━━━━━━━━━━━━━━\n` + + `📌 **${article.title || "No title"}**\n\n` + + `📝 ${content}\n\n` + + `🔗 Read more at: ${urlDomain}\n`; + }).join("\n"); } catch (error) { console.error("Error fetching news:", error); return "Sorry, there was an error fetching the news."; } } - const context = `Extract the search term from the {{userName}} message. The message is: ${_message.content.text}. Only return the search term, no other text.` + const context = `What is the specific topic or subject the user wants news about? Extract ONLY the search term from this message: "${_message.content.text}". Return just the search term with no additional text, punctuation, or explanation.` const searchTerm = await generateText({ runtime: _runtime, @@ -59,6 +104,9 @@ export const currentNewsAction: Action = { stop: ["\n"], }); + // For debugging + console.log("Search term extracted:", searchTerm); + const currentNews = await getCurrentNews(searchTerm); const responseText = ` *protocol droid noises*\n\n${currentNews}`; diff --git a/packages/plugin-news/src/index.ts b/packages/plugin-news/src/index.ts index e2f0939fdf5..128423d752b 100644 --- a/packages/plugin-news/src/index.ts +++ b/packages/plugin-news/src/index.ts @@ -1,10 +1,10 @@ import { Plugin } from "@ai16z/eliza"; -import { currentNewsAction } from "./actions/news.ts"; - -export * as actions from "./actions"; +import { currentNewsAction } from "./actions/news"; export const newsPlugin: Plugin = { - name: "news", + name: "newsPlugin", description: "Get the latest news about a specific topic if asked by the user.", actions: [currentNewsAction], }; + +export default newsPlugin; From f798211cb12a02edaf6b11ee5ad380018277889c Mon Sep 17 00:00:00 2001 From: CheddarQueso Date: Sun, 12 Jan 2025 20:35:49 -0500 Subject: [PATCH 5/8] updates --- agent/package.json | 1 + agent/src/index.ts | 1 - packages/plugin-news/package.json | 4 ++-- packages/plugin-news/src/actions/news.ts | 15 +++++++-------- packages/plugin-news/src/index.ts | 2 +- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/agent/package.json b/agent/package.json index 7afa757a415..e585bacec69 100644 --- a/agent/package.json +++ b/agent/package.json @@ -71,6 +71,7 @@ "@elizaos/plugin-tee-marlin": "workspace:*", "@elizaos/plugin-multiversx": "workspace:*", "@elizaos/plugin-near": "workspace:*", + "@elizaos/plugin-nft-collections": "workspace:*", "@elizaos/plugin-zksync-era": "workspace:*", "@elizaos/plugin-twitter": "workspace:*", "@elizaos/plugin-primus": "workspace:*", diff --git a/agent/src/index.ts b/agent/src/index.ts index 649938a9118..fe65c40fa0a 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -736,7 +736,6 @@ export async function createAgent( // character.plugins are handled when clients are added plugins: [ bootstrapPlugin, - newsPlugin, getSecret(character, "CONFLUX_CORE_PRIVATE_KEY") ? confluxPlugin : null, diff --git a/packages/plugin-news/package.json b/packages/plugin-news/package.json index 538a413d2b6..558c23443ab 100644 --- a/packages/plugin-news/package.json +++ b/packages/plugin-news/package.json @@ -1,11 +1,11 @@ { - "name": "@ai16z/plugin-news", + "name": "@elizaos/plugin-news", "version": "0.1.5-alpha.5", "main": "dist/index.js", "type": "module", "types": "dist/index.d.ts", "dependencies": { - "@ai16z/eliza": "workspace:*", + "@elizaos/core": "workspace:*", "tsup": "8.3.5" }, "scripts": { diff --git a/packages/plugin-news/src/actions/news.ts b/packages/plugin-news/src/actions/news.ts index 5304d9af194..c6d20f473bf 100644 --- a/packages/plugin-news/src/actions/news.ts +++ b/packages/plugin-news/src/actions/news.ts @@ -8,13 +8,17 @@ import { ModelClass, State, type Action, -} from "@ai16z/eliza"; +} from "@elizaos/core"; export const currentNewsAction: Action = { name: "CURRENT_NEWS", similes: ["NEWS", "GET_NEWS", "GET_CURRENT_NEWS"], validate: async (_runtime: IAgentRuntime, _message: Memory) => { + const apiKey = process.env.NEWS_API_KEY; + if (!apiKey) { + throw new Error('NEWS_API_KEY environment variable is not set'); + } return true; }, description: @@ -28,11 +32,6 @@ export const currentNewsAction: Action = { ): Promise => { async function getCurrentNews(searchTerm: string) { try { - const apiKey = process.env.NEWS_API_KEY; - if (!apiKey) { - throw new Error('NEWS_API_KEY environment variable is not set'); - } - // Add quotes and additional context terms const enhancedSearchTerm = encodeURIComponent(`"${searchTerm}" AND (Spain OR Spanish OR Madrid OR Felipe)`); @@ -43,7 +42,7 @@ export const currentNewsAction: Action = { `sortBy=relevancy&` + `language=en&` + `pageSize=50&` + - `apiKey=${apiKey}` + `apiKey=${process.env.NEWS_API_KEY}` ), fetch( `https://newsapi.org/v2/top-headlines?` + @@ -51,7 +50,7 @@ export const currentNewsAction: Action = { `country=es&` + `language=en&` + `pageSize=50&` + - `apiKey=${apiKey}` + `apiKey=${process.env.NEWS_API_KEY}` ) ]); diff --git a/packages/plugin-news/src/index.ts b/packages/plugin-news/src/index.ts index 128423d752b..3419dc3f2cb 100644 --- a/packages/plugin-news/src/index.ts +++ b/packages/plugin-news/src/index.ts @@ -1,4 +1,4 @@ -import { Plugin } from "@ai16z/eliza"; +import { Plugin } from "@elizaos/core"; import { currentNewsAction } from "./actions/news"; export const newsPlugin: Plugin = { From 3559a1f04b3ad69058c761a58cfbf6fb784e1af8 Mon Sep 17 00:00:00 2001 From: CheddarQueso Date: Sun, 12 Jan 2025 20:40:54 -0500 Subject: [PATCH 6/8] fixed nft-collections line --- agent/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/package.json b/agent/package.json index e585bacec69..0a871edef56 100644 --- a/agent/package.json +++ b/agent/package.json @@ -71,7 +71,6 @@ "@elizaos/plugin-tee-marlin": "workspace:*", "@elizaos/plugin-multiversx": "workspace:*", "@elizaos/plugin-near": "workspace:*", - "@elizaos/plugin-nft-collections": "workspace:*", "@elizaos/plugin-zksync-era": "workspace:*", "@elizaos/plugin-twitter": "workspace:*", "@elizaos/plugin-primus": "workspace:*", @@ -93,6 +92,7 @@ "@elizaos/plugin-hyperliquid": "workspace:*", "@elizaos/plugin-akash": "workspace:*", "@elizaos/plugin-quai": "workspace:*", + "@elizaos/plugin-nft-collections": "workspace:*", "@elizaos/plugin-news": "workspace:*", "readline": "1.3.0", "ws": "8.18.0", From 7b0113b77262e0753880ebe1221842565f00f60a Mon Sep 17 00:00:00 2001 From: CheddarQueso Date: Fri, 24 Jan 2025 22:43:30 -0500 Subject: [PATCH 7/8] resolved conflict --- agent/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/agent/package.json b/agent/package.json index 72b844614fc..650c7258f3c 100644 --- a/agent/package.json +++ b/agent/package.json @@ -65,6 +65,7 @@ "@elizaos/plugin-lit": "workspace:*", "@elizaos/plugin-movement": "workspace:*", "@elizaos/plugin-massa": "workspace:*", + "@elizaos/plugin-news": "workspace:*", "@elizaos/plugin-nft-generation": "workspace:*", "@elizaos/plugin-node": "workspace:*", "@elizaos/plugin-solana": "workspace:*", From 2a967afbc00f01fe94849835883c28d6fc2a30b8 Mon Sep 17 00:00:00 2001 From: Shakker Nerd Date: Sun, 26 Jan 2025 06:18:33 +0000 Subject: [PATCH 8/8] feat: add missing env examples --- .env.example | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/.env.example b/.env.example index 4240274b075..f4e8c3164bd 100644 --- a/.env.example +++ b/.env.example @@ -873,5 +873,34 @@ ETHSTORAGE_ADDRESS=0x64003adbdf3014f7E38FC6BE752EB047b95da89A ETHSTORAGE_RPC_URL=https://rpc.beta.testnet.l2.quarkchain.io:8545 +# Email Automation Plugin Configuration +RESEND_API_KEY= # Your Resend API key +DEFAULT_TO_EMAIL= # Default recipient +DEFAULT_FROM_EMAIL= # Default sender + +# Optional Settings +EMAIL_AUTOMATION_ENABLED=false # Enable AI detection. If this is enabled, the plugin will automatically detect email-worthy conversations and handle generation/delivery and only that. +EMAIL_EVALUATION_PROMPT= # Custom detection criteria for shouldEmail# #################################### + + +# #### ANKR Configuration #### +# #################################### +ANKR_ENV=production +ANKR_WALLET= +ANKR_MAX_RETRIES=3 +ANKR_RETRY_DELAY=1000 +ANKR_TIMEOUT=5000 +ANKR_GRANULAR_LOG=true +ANKR_LOG_LEVEL=debug +ANKR_RUNTIME_CHECK_MODE=false +ANKR_SPASH=true + +# DCAP Plugin Configuration +DCAP_EVM_PRIVATE_KEY= +DCAP_MODE= # Options: OFF, PLUGIN-SGX, PLUGIN-TEE, MOCK + +# QuickIntel Token Security API +QUICKINTEL_API_KEY= # Your QuickIntel API key for token security analysis + # News API Key NEWS_API_KEY= # News API KEY from https://newsapi.org/