Skip to content

feat:post embeds on Farcaster and media on Twitter (ts) #675

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

phdargen
Copy link
Contributor

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 embed: "https://true-cast.vercel.app/api/frame/share?question=PancakeSwap%3A+Top+10+highest+revenue+crypto+projects+for+April&yesPrice=0.35064945324404445&noPrice=0.648333295420825&marketAddress=0x3d6a6928f5eA69e91Cd2AF56330b065971075Fb7"
-------------------
Successfully posted cast to Farcaster:
{"success":true,"cast":{"hash":"0xa887f798e915c10e290d129b64fb13a9ec01e287","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":1,"following_count":7,"verifications":["0x8e59886e4bd8b733df54c035d8fb33a982fb07dd"],"verified_addresses":{"eth_addresses":["0x8e59886e4bd8b733df54c035d8fb33a982fb07dd"],"sol_addresses":[],"primary":{"eth_address":"0x8e59886e4bd8b733df54c035d8fb33a982fb07dd","sol_address":null}},"verified_accounts":[{"platform":"x","username":"truecastagent"}],"power_badge":false},"text":"Testing in prod"}}
-------------------
The cast was successfully posted to Farcaster with the text "Testing in prod" and the provided embed link.
https://warpcast.com/~/conversations/0xa887f798e915c10e290d129b64fb13a9ec01e287
Prompt: upload file base.png to twitter

-------------------
Successfully uploaded media to Twitter: 1912081930067054592
-------------------
The file "base.png" has been successfully uploaded to Twitter with the media ID: 1912081930067054592. If you wish to use this media in a tweet, let me know!
-------------------

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

-------------------
Successfully posted to Twitter:
{"data":{"edit_history_tweet_ids":["1912082075152220664"],"id":"1912082075152220664","text":"Testing in prod https://t.co/9q4x9B2Gk6"}}
-------------------
Your tweet "Testing in prod" has been successfully posted on Twitter! You can view it [here](https://twitter.com/i/web/status/1912082075152220664).

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

🟡 Heimdall Review Status

Requirement Status More Info
Reviews 🟡 0/1
Denominator calculation
Show calculation
1 if user is bot 0
1 if user is external 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
@@ -154,10 +155,20 @@ A failure response will return a message with the Twitter API request error:
})
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
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/[email protected] start /cdp-agentkit/typescript/examples/langchain-cdp-chatbot
 NODE_OPTIONS='--no-warnings' ts-node ./chatbot.ts

/cdp-agentkit/typescript/node_modules/.pnpm/[email protected]_@[email protected][email protected]/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/[email protected]/node_modules/jose/dist/webapi/index.js from /cdp-agentkit/typescript/node_modules/.pnpm/@[email protected][email protected][email protected][email protected][email protected]/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/@[email protected][email protected][email protected][email protected][email protected]/node_modules/@coinbase/cdp-sdk/_cjs/auth/utils/jwt.js to a dynamic import() which is available in all CommonJS modules.

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