Skip to content

Conversation

@phdargen
Copy link
Contributor

@phdargen phdargen commented Apr 15, 2025

Description

Added media upload support for Twitter and embeds support for Farcaster

  • FarcasterActionProvider: post_cast actions takes new optional embeds URL as input
  • TwitterActionProvider:
    • new action to upload upload_media returns media_id
    • post_tweet/post_tweet_reply take new optional media_ids as input

Tests

Chatbot: typescript/examples/langchain-cdp-chatbot/chatbot.ts
Network: Base Sepolia
Prompt: farcaster post with text "Testing in prod" and embeds: "https://true-cast.vercel.app", "https://true-cast.vercel.app/trueCast.png"
-------------------
Successfully posted cast to Farcaster:
{"success":true,"cast":{"hash":"0x4f24e69ed1f51aaeb65e79b9968bd72742bd4899","author":{"object":"user","fid":1046472,"username":"truecastagent","display_name":"TrueCast","pfp_url":"https://imagedelivery.net/BXluQx4ige9GuW0Ia56BHw/bd831a9d-dc68-4de3-a4d8-5337e2e43100/rectcrop3","custody_address":"0x1819005a8e32b2ef3d0fec2f8e0d08517b401d29","profile":{"bio":{"text":""}},"follower_count":16,"following_count":8,"verifications":["0x8e59886e4bd8b733df54c035d8fb33a982fb07dd"],"verified_addresses":{"eth_addresses":["0x8e59886e4bd8b733df54c035d8fb33a982fb07dd"],"sol_addresses":["7FwxmJWVQvCTB1hdr4bTXrvMpdLu8Z58xmRybJkCwsJj"],"primary":{"eth_address":"0x8e59886e4bd8b733df54c035d8fb33a982fb07dd","sol_address":"7FwxmJWVQvCTB1hdr4bTXrvMpdLu8Z58xmRybJkCwsJj"}},"verified_accounts":[{"platform":"x","username":"truecastagent"}],"power_badge":false,"experimental":{"neynar_user_score":0.58,"deprecation_notice":"The `neynar_user_score` field under `experimental` will be deprecated after June 1, 2025, as it will be formally promoted to a stable field named `score` within the user object."},"score":0.58},"text":"Testing in prod"}}
-------------------
The cast "Testing in prod" has been successfully posted to Farcaster with the specified embeds. If you need anything else, feel free to ask!

Cast: https://farcaster.xyz/truecastagent/0x4f24e69e

Prompt: upload file base.png to twitter

-------------------
Successfully uploaded media to Twitter: 1948465451035422720
-------------------
The media has been successfully uploaded to Twitter with the media ID: `1948465451035422720`. Would you like to post a tweet with this media? If so, please provide the text for the tweet.
-------------------

Prompt: Post text "Testing in prod" with this media ID

-------------------
Successfully posted to Twitter:
{"data":{"edit_history_tweet_ids":["1948465523076821024"],"text":"Testing in prod https://t.co/AAYAcCW3gj","id":"1948465523076821024"}}
-------------------
The tweet "Testing in prod" has been successfully posted to Twitter! You can view it [here](https://twitter.com/i/web/status/1948465523076821024). If you need anything else, feel free to ask!
-------------------

Prompt: post again and use this media id twice 

-------------------
Successfully posted to Twitter:
{"data":{"text":"Testing in prod again https://t.co/ue1UiF2dlg","edit_history_tweet_ids":["1948465987025600547"],"id":"1948465987025600547"}}
-------------------
The tweet "Testing in prod again" has been successfully posted to Twitter using the media twice! You can view it [here](https://twitter.com/i/web/status/1948465987025600547). Let me know if you need anything else!

Posts:

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@phdargen phdargen requested a review from murrlincoln as a code owner April 15, 2025 10:25
@cb-heimdall
Copy link

cb-heimdall commented Apr 15, 2025

✅ Heimdall Review Status

Requirement Status More Info
Reviews 1/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 0
2 if repo is sensitive 0
From .codeflow.yml 1
Additional review requirements
Show calculation
Max 0
0
From CODEOWNERS 0
Global minimum 0
Max 1
1
1 if commit is unverified 0
Sum 1

@github-actions github-actions bot added documentation Improvements or additions to documentation action provider New action provider typescript labels Apr 15, 2025
async postTweet(args: z.infer<typeof TwitterPostTweetSchema>): Promise<string> {
try {
const response = await this.client.v2.tweet(args.tweet);
let mediaOptions = {};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest updating the action's descriptions to mention the newly added mediaIds and how the agent should use them

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch, done!

Copy link
Contributor

@CarsonRoscoe CarsonRoscoe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @phdargen, this PR is looking good and I'm happy to get this in :)

Can you rebase against main first and address my one comment?
Then I'll do some testing and aim to get this in for this weeks release

@phdargen phdargen force-pushed the socials-ts branch 2 times, most recently from 9023d28 to 770df82 Compare April 30, 2025 14:45
@phdargen
Copy link
Contributor Author

@CarsonRoscoe Rebased again bc of some changes to the twitter provider yesterday.

After rebasing I cant run the chatbots examples anymore. pnpm i && pnpm build and pnpm test work fine but getting the error below for the chatbot. I get the same error for a clean master checkout, so I don't think this is related to my PR. I suspect this might come from #678 that seems to do some hacks for "jose" in framework-extensions (eg https://github.com/coinbase/agentkit/blob/bc4e7be8a3ab0cc0c576b642b000bf71df0c06dd/typescript/framework-extensions/langchain/setup-jest.js), but not in chatbot.

langchain-cdp-chatbot % pnpm run start

@coinbase/cdp-langchain-chatbot-example@1.0.0 start /cdp-agentkit/typescript/examples/langchain-cdp-chatbot
 NODE_OPTIONS='--no-warnings' ts-node ./chatbot.ts

/cdp-agentkit/typescript/node_modules/.pnpm/ts-node@10.9.2_@types+node@22.13.14_typescript@5.8.2/node_modules/ts-node/dist/index.js:851
            return old(m, filename);
                   ^
Error [ERR_REQUIRE_ESM]: require() of ES Module /cdp-agentkit/typescript/node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/index.js from /cdp-agentkit/typescript/node_modules/.pnpm/@coinbase+cdp-sdk@1.3.0_bufferutil@4.0.9_typescript@5.8.2_utf-8-validate@5.0.10_zod@3.24.2/node_modules/@coinbase/cdp-sdk/_cjs/auth/utils/jwt.js not supported.
Instead change the require of index.js in /cdp-agentkit/typescript/node_modules/.pnpm/@coinbase+cdp-sdk@1.3.0_bufferutil@4.0.9_typescript@5.8.2_utf-8-validate@5.0.10_zod@3.24.2/node_modules/@coinbase/cdp-sdk/_cjs/auth/utils/jwt.js to a dynamic import() which is available in all CommonJS modules.

@phdargen
Copy link
Contributor Author

Rebased and tested again, see recent posts above. Should be good to go @CarsonRoscoe

@phdargen
Copy link
Contributor Author

@CarsonRoscoe Rebased again bc of some changes to the twitter provider yesterday.

After rebasing I cant run the chatbots examples anymore. pnpm i && pnpm build and pnpm test work fine but getting the error below for the chatbot. I get the same error for a clean master checkout, so I don't think this is related to my PR. I suspect this might come from #678 that seems to do some hacks for "jose" in framework-extensions (eg https://github.com/coinbase/agentkit/blob/bc4e7be8a3ab0cc0c576b642b000bf71df0c06dd/typescript/framework-extensions/langchain/setup-jest.js), but not in chatbot.

langchain-cdp-chatbot % pnpm run start

@coinbase/cdp-langchain-chatbot-example@1.0.0 start /cdp-agentkit/typescript/examples/langchain-cdp-chatbot
 NODE_OPTIONS='--no-warnings' ts-node ./chatbot.ts

/cdp-agentkit/typescript/node_modules/.pnpm/ts-node@10.9.2_@types+node@22.13.14_typescript@5.8.2/node_modules/ts-node/dist/index.js:851
            return old(m, filename);
                   ^
Error [ERR_REQUIRE_ESM]: require() of ES Module /cdp-agentkit/typescript/node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/index.js from /cdp-agentkit/typescript/node_modules/.pnpm/@coinbase+cdp-sdk@1.3.0_bufferutil@4.0.9_typescript@5.8.2_utf-8-validate@5.0.10_zod@3.24.2/node_modules/@coinbase/cdp-sdk/_cjs/auth/utils/jwt.js not supported.
Instead change the require of index.js in /cdp-agentkit/typescript/node_modules/.pnpm/@coinbase+cdp-sdk@1.3.0_bufferutil@4.0.9_typescript@5.8.2_utf-8-validate@5.0.10_zod@3.24.2/node_modules/@coinbase/cdp-sdk/_cjs/auth/utils/jwt.js to a dynamic import() which is available in all CommonJS modules.

BTW, this error occurs when running with node v20. I think all the CDP v2 stuff requires v22, while all the READMEs still have node v18 as prerequisite

Copy link
Contributor

@CarsonRoscoe CarsonRoscoe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thank you for the contribution

@CarsonRoscoe CarsonRoscoe merged commit ff02c51 into coinbase:main Jul 24, 2025
25 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action provider New action provider documentation Improvements or additions to documentation typescript

Development

Successfully merging this pull request may close these issues.

3 participants