Skip to content

0.20.0: myna as a plugin, so an agent knows what posting costs - #42

Merged
ralyodio merged 1 commit into
masterfrom
worktree-myna-plugin
Sep 3, 2026
Merged

0.20.0: myna as a plugin, so an agent knows what posting costs#42
ralyodio merged 1 commit into
masterfrom
worktree-myna-plugin

Conversation

@ralyodio

@ralyodio ralyodio commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

0.19.0 made myna a companioncli-tools installs it, and the README
explains why a compiled binary with its runtime inside is not a bin/*.ts.
This adds the other half: the marketplace plugin, so an agent driving it
knows what a post costs before it makes one.

Eight commands: /myna:post, :schedule, :queue, :accounts, :feed,
:draft, :infographic, :mcp.

Like bo, it fronts a command this repo does not implement — except this is the
one it does install, so the plugin is purely judgement rather than a second
executable on PATH.

Written off the source, not the README

myna's README and its main.ts disagree in ways that matter when something
automated is holding the tool. The commands document the source:

  • The default target is every account. settings.defaultTargets ships as
    all, so a post whose target does not resolve is not a no-op — it goes to
    every connected account across 26 networks.
  • A comma list is not a positional target. myna post bluesky,mastodon "text" — the example in myna's own HELP string and README — does not split
    on the comma, so the literal string becomes the post text and it fans out to
    the default target. Only --to bluesky,mastodon works. Every example here
    uses --to.
  • --dry-run is a target check, not a preview. It resolves accounts, prints
    them and stops; it does not tailor per network, count characters or load
    media. The commands point at the TUI compose screen and myna_preview over
    MCP for the real rendering instead.
  • myna logout bluesky matches a network, not just an account, and
    disconnects every account on it with no confirmation.
  • There is no myna mcp subcommand. MCP is the separate
    @profullstack/myna-mcp package, whose bin is a .ts with a bun shebang — so
    that path needs Bun even though the CLI does not.

Login stays the user's: it prompts field by field with no flag or environment
variable behind any of them, and writes a live token into a vault this repo
never reads. Same line the companion entry draws.

Also

  • README: myna and the previously-omitted ai added to the plugin list, and
    the "fronts a command this repo does not install" paragraph now distinguishes
    the two cases.
  • Version 0.19.0 → 0.20.0.

Checks

  • vitest run — 601 tests, 26 files, green.
  • tsc --noEmit fails on two pre-existing exactOptionalPropertyTypes errors
    in src/free-names.ts, unchanged by this branch (no .ts file is touched).
  • All 15 myna subcommands referenced in these docs exist in the dispatch
    table, including stats, which myna's own help does not mention.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WzoeVN9p8MDEFTGNaTr6na

0.19.0 made myna a companion: cli-tools installs it. This adds the other half,
the eight slash commands that say when to reach for it and what to check first
— /myna:post, :schedule, :queue, :accounts, :feed, :draft, :infographic, :mcp.

It fronts a command this repo installs but does not implement, so like bo it
carries judgement rather than code. The judgement a posting tool needs is
specific, and it was read off mynaposter's source rather than its README,
because the two disagree in ways that matter here:

  The default target is `all`. settings.defaultTargets ships as "all", and a
  post whose target does not resolve is not a no-op — it goes to every
  connected account on 26 networks.

  A comma list is not a positional target. `myna post bluesky,mastodon "text"`
  — the form myna's own help prints — does not split on the comma, so the
  literal string becomes the post and it fans out to the default target. The
  docs here say `--to` every time, and say why.

  `--dry-run` is a target check, not a preview. It resolves accounts and stops;
  it does not tailor per network, count characters or load media. Reporting one
  as proof that a post fits would be wrong, so the commands say where the real
  per-network rendering lives instead (the TUI, and myna_preview over MCP).

  `myna logout bluesky` matches a network, not just an account, and disconnects
  every account on it without asking.

Login stays the user's: it prompts field by field with no flag or env var
behind any of them, and it writes a live token into a vault this repo never
reads. That is the same line the companion entry draws — cli-tools installs the
front door and never touches the accounts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WzoeVN9p8MDEFTGNaTr6na
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

ThreatCrush Security Scan

8 finding(s)

HIGH/CRITICAL: 2 | MEDIUM: 3 | LOW: 3

Severity Rule Location
HIGH sh-remote-script-execution root-ubuntu.sh:2816
HIGH sh-remote-script-execution root-ubuntu.sh:2820
MEDIUM sh-remote-script-execution root-ubuntu.sh:2969
MEDIUM sh-remote-script-execution root-ubuntu.sh:3998
MEDIUM redos-nested-quantifier src/domain-free.ts:56
LOW secret-generic-credential src/credentials.ts:36
LOW secret-generic-api-key test/credentials.test.ts:208
LOW secret-generic-credential test/shorten.test.ts:36

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit cc730ae into master Sep 3, 2026
5 checks passed
ralyodio added a commit that referenced this pull request Sep 3, 2026
Two features landed on master minutes apart and both claimed 0.20.0. The myna
plugin (#42) got there first and is already tagged v0.20.0; devdb (#43) merged
on top with the same number, so the released tag does not contain it. Nothing
conflicted, because both sides set the same line to the same value -- which is
exactly why it went unnoticed until the release was cut.

A companion is a minor here, so devdb gets 0.21.0 and v0.20.0 keeps meaning
what it already means to anyone who has it.


Claude-Session: https://claude.ai/code/session_014CrtR8Xrrp7Jb7p2fdhSEK

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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