{ "name": "@elizaos/plugin-x", "version": "2.0.3-beta.7", "description": "elizaOS X (formerly Twitter) connector: posting, mentions, replies, DMs, and timeline interactions.", "type": "module", "main": "dist/index.js", "module": "dist/index.js", "types": "dist/index.d.ts", "exports": { "./package.json": "./package.json", ".": { "types": "./dist/index.d.ts", "eliza-source": { "types": "./src/index.ts", "import": "./src/index.ts", "default": "./src/index.ts" }, "import": "./dist/index.js", "default": "./dist/index.js" }, "./*.css": "./dist/*.css", "./*": { "types": "./dist/*.d.ts", "eliza-source": { "types": "./src/*.ts", "import": "./src/*.ts", "default": "./src/*.ts" }, "import": "./dist/*.js", "default": "./dist/*.js" } }, "files": [ "registry-entry.json", "dist", "auto-enable.ts" ], "elizaos": { "plugin": { "autoEnableModule": "./auto-enable.ts", "capabilities": [ "messaging", "social-posting" ] } }, "dependencies": { "headers-polyfill": "^5.0.0", "json-stable-stringify": "^1.3.0", "twitter-api-v2": "^1.23.2" }, "devDependencies": { "@biomejs/biome": "2.5.3", "@types/node": "^22.19.17", "@vitest/coverage-v8": "^4.0.0", "dotenv": "^17.2.3", "tsup": "^8.5.1", "typescript": "^6.0.3", "vitest": "^4.0.0" }, "scripts": { "build": "tsup", "dev": "tsup --watch", "test": "vitest run", "test:coverage": "vitest run --coverage", "prepack": "bun run build", "lint": "bunx @biomejs/biome check --write --unsafe .", "lint:check": "bunx @biomejs/biome check .", "typecheck": "tsgo --noEmit -p tsconfig.json", "clean": "node ../../packages/scripts/rm-path-recursive.mjs dist .turbo .turbo-tsconfig.json tsconfig.tsbuildinfo", "format": "bunx @biomejs/biome format --write .", "format:check": "bunx @biomejs/biome format ." }, "publishConfig": { "access": "public" }, "repository": { "type": "git", "url": "git+https://github.com/elizaos-plugins/plugin-x.git" }, "keywords": [ "elizaos", "plugin", "x", "twitter", "social", "connector" ], "agentConfig": { "pluginType": "elizaos:plugin:1.0.0", "pluginParameters": { "TWITTER_AUTH_MODE": { "type": "string", "description": "Auth mode: 'env' (static keys/tokens) or 'oauth' (3-legged OAuth2 PKCE).", "required": false, "default": "env", "sensitive": false }, "TWITTER_ACCOUNT_ID": { "type": "string", "description": "Account ID for the default X account when connector account routing is enabled.", "required": false, "default": "default", "sensitive": false }, "TWITTER_DEFAULT_ACCOUNT_ID": { "type": "string", "description": "Default X account ID used when a target/content does not specify accountId.", "required": false, "default": "default", "sensitive": false }, "TWITTER_ACCOUNTS": { "type": "string", "description": "Optional JSON object/array of account-scoped X credentials for multi-account pilots.", "required": false, "sensitive": true }, "TWITTER_API_KEY": { "type": "string", "description": "Twitter API key (required for TWITTER_AUTH_MODE=env).", "required": false, "sensitive": true }, "TWITTER_API_SECRET_KEY": { "type": "string", "description": "Twitter API secret key (required for TWITTER_AUTH_MODE=env).", "required": false, "sensitive": true }, "TWITTER_ACCESS_TOKEN": { "type": "string", "description": "OAuth1.0a access token (required for TWITTER_AUTH_MODE=env).", "required": false, "sensitive": true }, "TWITTER_ACCESS_TOKEN_SECRET": { "type": "string", "description": "OAuth1.0a access token secret (required for TWITTER_AUTH_MODE=env).", "required": false, "sensitive": true }, "TWITTER_CLIENT_ID": { "type": "string", "description": "Twitter OAuth2 client ID (required for TWITTER_AUTH_MODE=oauth).", "required": false, "sensitive": false }, "TWITTER_REDIRECT_URI": { "type": "string", "description": "OAuth2 redirect URI (loopback recommended) (required for TWITTER_AUTH_MODE=oauth).", "required": false, "sensitive": false }, "TWITTER_SCOPES": { "type": "string", "description": "OAuth2 scopes (space-separated).", "required": false, "default": "tweet.read tweet.write users.read offline.access", "sensitive": false }, "TWITTER_TARGET_USERS": { "type": "string", "description": "Comma-separated list of Twitter usernames the bot should interact with. Use '*' for all users.", "required": false, "default": "", "sensitive": false }, "TWITTER_RETRY_LIMIT": { "type": "number", "description": "Maximum number of retry attempts when a Twitter operation fails.", "required": false, "default": 5, "sensitive": false }, "TWITTER_POLL_INTERVAL": { "type": "number", "description": "Timeline polling interval in seconds.", "required": false, "default": 120, "sensitive": false }, "TWITTER_DRY_RUN": { "type": "boolean", "description": "When true, all Twitter actions are simulated and nothing is actually posted.", "required": false, "default": false, "sensitive": false }, "TWITTER_ENABLE_POST": { "type": "boolean", "description": "Enable autonomous tweet posting.", "required": false, "default": false, "sensitive": false }, "TWITTER_POST_INTERVAL_MIN": { "type": "number", "description": "Minimum interval in minutes between automatically generated posts.", "required": false, "default": 90, "sensitive": false }, "TWITTER_POST_INTERVAL_MAX": { "type": "number", "description": "Maximum interval in minutes between automatically generated posts.", "required": false, "default": 180, "sensitive": false }, "TWITTER_POST_IMMEDIATELY": { "type": "boolean", "description": "Skip intervals and post immediately after generation.", "required": false, "default": false, "sensitive": false }, "TWITTER_POST_INTERVAL_VARIANCE": { "type": "number", "description": "Random variance factor (0.0-1.0) applied to posting intervals for natural behavior.", "required": false, "default": 0.2, "sensitive": false }, "TWITTER_INTERACTION_INTERVAL_MIN": { "type": "number", "description": "Minimum interval in minutes between interactions.", "required": false, "default": 15, "sensitive": false }, "TWITTER_INTERACTION_INTERVAL_MAX": { "type": "number", "description": "Maximum interval in minutes between interactions.", "required": false, "default": 30, "sensitive": false }, "TWITTER_INTERACTION_INTERVAL_VARIANCE": { "type": "number", "description": "Random variance factor (0.0-1.0) applied to interaction intervals for natural behavior.", "required": false, "default": 0.3, "sensitive": false }, "TWITTER_TIMELINE_ALGORITHM": { "type": "string", "description": "Timeline processing algorithm: 'weighted' (default) or 'latest'.", "required": false, "default": "weighted", "sensitive": false }, "TWITTER_TIMELINE_USER_BASED_WEIGHT": { "type": "number", "description": "Weight for user-based scoring in weighted timeline algorithm.", "required": false, "default": 3, "sensitive": false }, "TWITTER_TIMELINE_TIME_BASED_WEIGHT": { "type": "number", "description": "Weight for time-based scoring in weighted timeline algorithm.", "required": false, "default": 2, "sensitive": false }, "TWITTER_TIMELINE_RELEVANCE_WEIGHT": { "type": "number", "description": "Weight for relevance-based scoring in weighted timeline algorithm.", "required": false, "default": 5, "sensitive": false }, "TWITTER_MAX_TWEET_LENGTH": { "type": "number", "description": "Maximum tweet length (supports long-form tweets up to 4000 characters).", "required": false, "default": 4000, "sensitive": false }, "TWITTER_MAX_INTERACTIONS_PER_RUN": { "type": "number", "description": "Maximum number of interactions processed per cycle.", "required": false, "default": 10, "sensitive": false }, "TWITTER_DM_ONLY": { "type": "boolean", "description": "Only process direct messages, ignore public interactions.", "required": false, "default": false, "sensitive": false }, "TWITTER_ENABLE_ACTIONS": { "type": "boolean", "description": "Enable timeline action processing and automated responses.", "required": false, "default": false, "sensitive": false }, "TWITTER_ACTION_INTERVAL": { "type": "number", "description": "Interval in minutes between timeline action processing cycles.", "required": false, "default": 240, "sensitive": false }, "TWITTER_AUTO_RESPOND_MENTIONS": { "type": "boolean", "description": "Automatically respond to mentions.", "required": false, "default": true, "sensitive": false }, "TWITTER_AUTO_RESPOND_REPLIES": { "type": "boolean", "description": "Automatically respond to replies.", "required": false, "default": true, "sensitive": false }, "TWITTER_ENABLE_REPLIES": { "type": "boolean", "description": "Enable mention and reply handling.", "required": false, "default": true, "sensitive": false }, "TWITTER_ENABLE_DISCOVERY": { "type": "boolean", "description": "Enable discovery service for autonomous content discovery and growth.", "required": false, "default": false, "sensitive": false }, "TWITTER_MIN_FOLLOWER_COUNT": { "type": "number", "description": "Minimum follower count for accounts to follow in discovery service.", "required": false, "default": 100, "sensitive": false }, "TWITTER_MAX_FOLLOWS_PER_CYCLE": { "type": "number", "description": "Maximum accounts to follow per discovery cycle.", "required": false, "default": 5, "sensitive": false }, "TWITTER_MAX_ENGAGEMENTS_PER_RUN": { "type": "number", "description": "Maximum engagements per discovery/interaction cycle.", "required": false, "default": 10, "sensitive": false }, "TWITTER_ENGAGEMENT_INTERVAL": { "type": "number", "description": "Fixed interval for interactions (default: 30, used if MIN/MAX not set).", "required": false, "default": 30, "sensitive": false }, "TWITTER_ENGAGEMENT_INTERVAL_MIN": { "type": "number", "description": "Minimum minutes between engagements.", "required": false, "default": 20, "sensitive": false }, "TWITTER_ENGAGEMENT_INTERVAL_MAX": { "type": "number", "description": "Maximum minutes between engagements.", "required": false, "default": 40, "sensitive": false }, "TWITTER_DISCOVERY_INTERVAL_MIN": { "type": "number", "description": "Minimum minutes between discovery cycles.", "required": false, "default": 15, "sensitive": false }, "TWITTER_DISCOVERY_INTERVAL_MAX": { "type": "number", "description": "Maximum minutes between discovery cycles.", "required": false, "default": 30, "sensitive": false }, "TWITTER_POST_INTERVAL": { "type": "number", "description": "Fixed interval between posts (default: 120, used if MIN/MAX not set).", "required": false, "default": 120, "sensitive": false }, "TWITTER_TIMELINE_MODE": { "type": "string", "description": "Timeline mode: 'home' for regular timeline or other modes.", "required": false, "default": "home", "sensitive": false } } }, "peerDependencies": { "@elizaos/core": "workspace:*" } }