diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000000..e5deb93b1df --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,24 @@ +ARG NODE_VER=23.5.0 +ARG BASE_IMAGE=node:${NODE_VER} +FROM $BASE_IMAGE + +ENV DEBIAN_FRONTEND=noninteractive + +# Install pnpm globally and install necessary build tools +RUN apt-get update \ + && apt-get install -y \ + git \ + python3 \ + make \ + g++ \ + nano \ + vim \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +ARG PNPM_VER=9.15.2 +RUN npm install -g pnpm@${PNPM_VER} + +# Set Python 3 as the default python +RUN ln -s /usr/bin/python3 /usr/bin/python +ENV DEBIAN_FRONTEND=dialog diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000000..23aca531b45 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,38 @@ +// See https://aka.ms/vscode-remote/devcontainer.json for format details. +{ + "name": "elizaos-dev", + "dockerFile": "Dockerfile", + "build": { + "args": { + "NODE_VER": "23.5.0", + "PNPM_VER": "9.15.2" + } + }, + "privileged": true, + "runArgs": [ + "-p=3000:3000", // Add port for server api + "-p=5173:5173", // Add port for client + //"--volume=/usr/lib/wsl:/usr/lib/wsl", // uncomment for WSL + //"--volume=/mnt/wslg:/mnt/wslg", // uncomment for WSL + "--gpus=all", // ! uncomment for vGPU + //"--device=/dev/dxg", // uncomment this for vGPU under WSL + "--device=/dev/dri" + ], + "containerEnv": { + //"MESA_D3D12_DEFAULT_ADAPTER_NAME": "NVIDIA", // uncomment for WSL + //"LD_LIBRARY_PATH": "/usr/lib/wsl/lib" // uncomment for WSL + }, + "customizations": { + "vscode": { + "extensions": [ + "vscode.json-language-features", + "vscode.css-language-features", + // "foxundermoon.shell-format", + // "dbaeumer.vscode-eslint", + // "esbenp.prettier-vscode" + "ms-python.python" + ] + } + }, + "features": {} +} \ No newline at end of file diff --git a/.env.example b/.env.example index 414f9638582..3905331771b 100644 --- a/.env.example +++ b/.env.example @@ -9,6 +9,7 @@ DISCORD_VOICE_CHANNEL_ID= # The ID of the voice channel the bot should joi # AI Model API Keys OPENAI_API_KEY= # OpenAI API key, starting with sk- +OPENAI_API_URL= # OpenAI API Endpoint (optional), Default: https://api.openai.com/v1 SMALL_OPENAI_MODEL= # Default: gpt-4o-mini MEDIUM_OPENAI_MODEL= # Default: gpt-4o LARGE_OPENAI_MODEL= # Default: gpt-4o @@ -19,8 +20,9 @@ IMAGE_OPENAI_MODEL= # Default: dall-e-3 ETERNALAI_URL= ETERNALAI_MODEL= # Default: "neuralmagic/Meta-Llama-3.1-405B-Instruct-quantized.w4a16" ETERNALAI_API_KEY= +ETERNAL_AI_LOG_REQUEST=false #Default: false -GROK_API_KEY= # GROK API Key +GROK_API_KEY= # GROK/xAI API Key GROQ_API_KEY= # Starts with gsk_ OPENROUTER_API_KEY= GOOGLE_GENERATIVE_AI_API_KEY= # Gemini API key @@ -35,9 +37,28 @@ SMALL_HYPERBOLIC_MODEL= # Default: meta-llama/Llama-3.2-3B-Instruct MEDIUM_HYPERBOLIC_MODEL= # Default: meta-llama/Meta-Llama-3.1-70B-Instruct LARGE_HYPERBOLIC_MODEL= # Default: meta-llama/Meta-Llama-3.1-405-Instruct + +# Infera Configuration + +INFERA_API_KEY= # visit api.infera.org/docs to obtain an API key under /signup_user +INFERA_MODEL= # Default: llama3.2:latest +INFERA_SERVER_URL= # Default: https://api.infera.org/ + +SMALL_INFERA_MODEL= #Recommended: llama3.2:latest +MEDIUM_INFERA_MODEL= #Recommended: mistral-nemo:latest +LARGE_INFERA_MODEL= #Recommended: mistral-small:latest + + +# Livepeer configuration +LIVEPEER_GATEWAY_URL= # Free inference gateways and docs: https://livepeer-eliza.com/ +LIVEPEER_IMAGE_MODEL= # Default: ByteDance/SDXL-Lightning + # Speech Synthesis ELEVENLABS_XI_API_KEY= # API key from elevenlabs +# Transcription Provider +TRANSCRIPTION_PROVIDER= # Default: local (possible values: openai, deepgram, local) + # Direct Client Setting EXPRESS_MAX_PAYLOAD= # Default: 100kb @@ -62,8 +83,8 @@ TWITTER_POLL_INTERVAL=120 # How often (in seconds) the bot should check fo TWITTER_SEARCH_ENABLE=FALSE # Enable timeline search, WARNING this greatly increases your chance of getting banned TWITTER_TARGET_USERS= # Comma separated list of Twitter user names to interact with TWITTER_RETRY_LIMIT= # Maximum retry attempts for Twitter login +TWITTER_SPACES_ENABLE=false # Enable or disable Twitter Spaces logic -X_SERVER_URL= XAI_API_KEY= XAI_MODEL= @@ -73,8 +94,10 @@ POST_INTERVAL_MAX= # Default: 180 POST_IMMEDIATELY= # Twitter action processing configuration -ACTION_INTERVAL=300000 # Interval in milliseconds between action processing runs (default: 5 minutes) +ACTION_INTERVAL= # Interval in minutes between action processing runs (default: 5 minutes) ENABLE_ACTION_PROCESSING=false # Set to true to enable the action processing loop +MAX_ACTIONS_PROCESSING=1 # Maximum number of actions (e.g., retweets, likes) to process in a single cycle. Helps prevent excessive or uncontrolled actions. +ACTION_TIMELINE_TYPE=foryou # Type of timeline to interact with. Options: "foryou" or "following". Default: "foryou" # Feature Flags IMAGE_GEN= # Set to TRUE to enable image generation @@ -157,10 +180,22 @@ LARGE_GAIANET_SERVER_URL= # Default: https://qwen72b.gaia.domains/v1 GAIANET_EMBEDDING_MODEL= USE_GAIANET_EMBEDDING= # Set to TRUE for GAIANET/768, leave blank for local +# Volcengine Configuration +VOLENGINE_API_URL= # Volcengine API Endpoint, Default: https://open.volcengineapi.com/api/v3/ +VOLENGINE_MODEL= +SMALL_VOLENGINE_MODEL= # Default: doubao-lite-128k +MEDIUM_VOLENGINE_MODEL= # Default: doubao-pro-128k +LARGE_VOLENGINE_MODEL= # Default: doubao-pro-256k +VOLENGINE_EMBEDDING_MODEL= # Default: doubao-embedding + # EVM EVM_PRIVATE_KEY= EVM_PROVIDER_URL= +# Avalanche +AVALANCHE_PRIVATE_KEY= +AVALANCHE_PUBLIC_KEY= + # Solana SOLANA_PRIVATE_KEY= SOLANA_PUBLIC_KEY= @@ -317,6 +352,16 @@ NEAR_NETWORK=testnet # or mainnet ZKSYNC_ADDRESS= ZKSYNC_PRIVATE_KEY= +# Avail DA Configuration +AVAIL_ADDRESS= +AVAIL_SEED= +AVAIL_APP_ID=0 +AVAIL_RPC_URL=wss://avail-turing.public.blastapi.io/ # (Default) Testnet: wss://avail-turing.public.blastapi.io/ | Mainnet: wss://avail-mainnet.public.blastapi.io/ + +# Marlin +TEE_MARLIN= # Set "yes" to enable the plugin +TEE_MARLIN_ATTESTATION_ENDPOINT= # Optional, default "http://127.0.0.1:1350" + # Ton TON_PRIVATE_KEY= # Ton Mnemonic Seed Phrase Join With Empty String TON_RPC_URL= # ton rpc @@ -332,7 +377,7 @@ AWS_S3_UPLOAD_PATH= DEEPGRAM_API_KEY= # Sui -SUI_PRIVATE_KEY= # Sui Mnemonic Seed Phrase (`sui keytool generate ed25519`) +SUI_PRIVATE_KEY= # Sui Mnemonic Seed Phrase (`sui keytool generate ed25519`) , Also support `suiprivatekeyxxxx` (sui keytool export --key-identity 0x63) SUI_NETWORK= # must be one of mainnet, testnet, devnet, localnet # Story @@ -340,3 +385,23 @@ STORY_PRIVATE_KEY= # Story private key STORY_API_BASE_URL= # Story API base URL STORY_API_KEY= # Story API key PINATA_JWT= # Pinata JWT for uploading files to IPFS + +# Cronos zkEVM +CRONOSZKEVM_ADDRESS= +CRONOSZKEVM_PRIVATE_KEY= + +# Fuel Ecosystem (FuelVM) +FUEL_WALLET_PRIVATE_KEY= + +# Tokenizer Settings +TOKENIZER_MODEL= # Specify the tokenizer model to be used. +TOKENIZER_TYPE= # Options: tiktoken (for OpenAI models) or auto (AutoTokenizer from Hugging Face for non-OpenAI models). Default: tiktoken. + +# Stargaze NFT marketplace from Cosmos (You can use https://graphql.mainnet.stargaze-apis.com/graphql) +STARGAZE_ENDPOINT= + +# GenLayer +GENLAYER_PRIVATE_KEY=0x0000000000000000000000000000000000000000000000000000000000000000 # Private key of the GenLayer account to use for the agent + +# OpenWeather +OPEN_WEATHER_API_KEY= # OpenWeather API key diff --git a/.eslintrc.json b/.eslintrc.json index e795935eb73..33527e7c354 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,47 +1,36 @@ { - "plugins": [ - "@stylistic" - ], - "extends": [ - "next/core-web-vitals", - "plugin:@stylistic/recommended-extends" - ], - "rules": { - "@stylistic/indent": [ - "error", - 4, - { - "SwitchCase": 1 - } + "plugins": ["@stylistic"], + "extends": [ + "next/core-web-vitals", + "plugin:@stylistic/recommended-extends" ], - "@stylistic/no-tabs": "error", - "@stylistic/member-delimiter-style": [ - "error", - { - "multiline": { - "delimiter": "semi", - "requireLast": true - }, - "singleline": { - "delimiter": "semi", - "requireLast": false - } - } - ], - "@stylistic/eol-last": [ - "error", - "always" - ], - "@stylistic/multiline-ternary": "off", - "@stylistic/semi": [ - "error", - "always" - ], - "@stylistic/quotes": "off", - "@stylistic/comma-dangle": "off", - "@stylistic/brace-style": [ - "error", - "1tbs" - ] - } -} \ No newline at end of file + "rules": { + "@stylistic/indent": [ + "error", + 4, + { + "SwitchCase": 1 + } + ], + "@stylistic/no-tabs": "error", + "@stylistic/member-delimiter-style": [ + "error", + { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + } + } + ], + "@stylistic/eol-last": ["error", "always"], + "@stylistic/multiline-ternary": "off", + "@stylistic/semi": ["error", "always"], + "@stylistic/quotes": "off", + "@stylistic/comma-dangle": "off", + "@stylistic/brace-style": ["error", "1tbs"] + } +} diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0dcc810f5fd..71701239963 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,15 +1,15 @@ - + -# Relates to: +# Relates to - + # Risks # Background @@ -25,7 +25,7 @@ Features (non-breaking change which adds functionality) Updates (new versions of included code) --> - + @@ -35,10 +35,10 @@ Updates (new versions of included code) - + # Testing @@ -47,7 +47,7 @@ If a docs change is needed: I have updated the documentation accordingly. ## Detailed testing steps - + - + - + - +