Skip to content

myna repost: share someone's post from one of your accounts - #4

Merged
ralyodio merged 2 commits into
mainfrom
feat/repost
Sep 4, 2026
Merged

myna repost: share someone's post from one of your accounts#4
ralyodio merged 2 commits into
mainfrom
feat/repost

Conversation

@ralyodio

@ralyodio ralyodio commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

What

myna repost <account> <post url or id>
/repost <account> <post url or id>      (TUI)

A retweet on X, a boost on Mastodon and Pixelfed, a repost on Bluesky. The post is whatever a person has to hand: the URL copied from the network, or the native id.

myna repost x:@chovy https://x.com/ProfullstackInc/status/2095788210764878192
Reposted from x:@chovy  https://x.com/i/status/2095788210764878192

How

  • Network.repost?(account, ref) joins the adapter contract next to remove, with a caps.repost flag. The registry test now checks that any network claiming it implements it.
  • X: POST /2/users/:id/retweets. Accepts x.com, twitter.com, /i/status/ and bare ids.
  • Mastodon / Pixelfed: POST /api/v1/statuses/:id/reblog. A URL on the account's own instance is used directly. A URL from another instance goes through /api/v2/search?resolve=true first, because a remote status has no local id until the instance has fetched it.
  • Bluesky: creates an app.bsky.feed.repost record. A bsky.app URL names the author by handle, so the handle is resolved to a DID, and the post's cid is fetched, since a repost points at one version of a post. Also accepts at:// uris and the uri|cid composite that post returns.

Help text, TUI command list and README updated.

Tests

packages/core/test/repost-refs.test.ts covers the three reference parsers (URL shapes, bare ids, wrong-network rejections). bun test: 122 pass, 0 fail. bun run typecheck: clean.

Live: the X path was run for real from the dev build, @chovy retweeting a ProfullstackInc post, and X accepted it. The Mastodon and Bluesky paths are unit-tested at the parser level only; the only connected accounts there would have been boosting their own posts.

Not in this PR

  • No MCP tool (myna_repost) yet; the CLI and TUI are the surfaces.
  • Reposts are not written to myna history.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HWRBUb6VUCM2xBmRk91FzG

ralyodio and others added 2 commits September 4, 2026 08:33
A retweet on X, a boost on Mastodon and Pixelfed, a repost on Bluesky.
Takes the post URL as copied from the network, or its native id, so
`myna repost x:@chovy https://x.com/ProfullstackInc/status/123` is the
whole command. Adapters that can do it declare `caps.repost`, and the
registry test holds them to it.

Mastodon resolves a URL from another instance through its search
endpoint first, since a remote status has no local id until the instance
has fetched it. Bluesky resolves the author's handle to a DID and fetches
the post's cid, because a repost record points at one version of a post.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HWRBUb6VUCM2xBmRk91FzG
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HWRBUb6VUCM2xBmRk91FzG
@ralyodio
ralyodio merged commit 39bc836 into main Sep 4, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant