A monorepo of independently versioned and published OpenCode
plugins. Each publishable package lives under packages/<name>/ with its own
package.json, README, and release history; the root only holds shared tooling
(TypeScript base config, the harness/ PTY test rig) and CI.
| Package | Description |
|---|---|
packages/context-tree |
Pi-style context tree for OpenCode: branch, merge, crop, undo, plus a trajectory view |
packages/git-stats |
Sidebar card: working-tree diff figures, plus a GitHub-coloured chip per pull request the session touched |
- Create
packages/<name>/with its ownpackage.jsonand release scripts, and add it to theworkflow_dispatch.inputs.packagechoice list in.github/workflows/release.ymlandpublish.yml. - Publish its first version by hand. npm's trusted publishing cannot be set up
for a package that does not exist yet — the trust record silently fails to attach
and the exchange reports "package not found". From
packages/<name>/:npm version <v> --no-git-tag-version --ignore-scripts && bun run build && npm publish --access public --ignore-scripts, then reset the version (git checkout -- package.json) since the tag is the source of truth.--ignore-scriptsis required: npm chokes on theworkspace:*specifiers inside@opentui's own published metadata, which is also why the build is explicit rather than left toprepack. - Then create the trust record, once per package — it binds to the package, not
the repo, so a second plugin needs its own:
npm trust github <pkg> --file publish.yml --repo navbytes/opencode-plugins, with environmentnpm(the publish job declares one; a record without it will not match the OIDC claims). - After that,
gh workflow run release.yml -f package=<name> -f bump=patchdoes the rest. Notebump=computes off the newest<name>-v*tag and ignores a prerelease suffix, so the release a beta anticipated must be cut with an explicit-f version=, notbump=.
A green release.yml only means it tagged and dispatched, and a green publish.yml
only means npm accepted the upload — the registry lags by a minute or two. Check the
registry, not the workflow.
bun install
bun run build # builds every package
bun run typecheck # typechecks every package
bun test # runs every package's tests