426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
Voice Workbench / headless workbench (mocked backends) (push) Has been cancelled
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Has been cancelled
ci / test (push) Has been cancelled
ci / lint-and-format (push) Has been cancelled
ci / build (push) Has been cancelled
ci / dev-startup (push) Has been cancelled
gitleaks / gitleaks (push) Has been cancelled
Markdown Links / Relative Markdown Links (push) Has been cancelled
Quality (Extended) / Homepage Build (PR smoke) (push) Has been cancelled
Quality (Extended) / Comment-only diff guard (push) Has been cancelled
Quality (Extended) / Format + Type Safety Ratchet (push) Has been cancelled
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Has been cancelled
Quality (Extended) / Develop Gate (lint) (push) Has been cancelled
413 lines
13 KiB
JSON
413 lines
13 KiB
JSON
{
|
|
"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:*"
|
|
}
|
|
}
|