This repository uses Changesets for versioning and npm publishing. Each extension package is versioned independently.
Make changes → Add changeset → Push to master → CI opens "Version Packages" PR → Merge PR → Packages published to npm
After making changes to one or more extensions, run:
pnpm changesetThis interactive CLI will ask:
- Which packages changed? Select the affected extension(s)
- What kind of bump?
patch(bug fix),minor(new feature), ormajor(breaking change) - Summary: A short description of the change
This creates a markdown file in .changeset/ describing the change. Commit it with your code.
git add .
git commit -m "feat: add new search provider"
git push origin masterThe release.yml GitHub Action detects pending changesets and opens a PR titled "chore: version packages". This PR:
- Bumps
versionin each affectedpackage.json - Generates/updates
CHANGELOG.mdfor each package - Removes the consumed
.changeset/*.mdfiles
When you merge the "Version Packages" PR, the action runs pnpm run release which:
- Publishes each bumped package to npm under the
@framersscope - Creates GitHub releases with tags like
@framers/agentos-ext-web-search@1.2.0 - Updates
registry.jsonwith the latest versions
| Change type | Bump | Example |
|---|---|---|
| Bug fix, typo, perf improvement | patch |
1.0.0 -> 1.0.1 |
| New feature, new tool, new export | minor |
1.0.0 -> 1.1.0 |
| Breaking API change, removed export | major |
1.0.0 -> 2.0.0 |
You can include multiple changesets in a single commit or PR. Each changeset can target different packages with different bump types:
# First changeset: patch for web-search
pnpm changeset
# Select @framers/agentos-ext-web-search, patch
# Second changeset: minor for telegram
pnpm changeset
# Select @framers/agentos-ext-telegram, minorIf CI is broken and you need to publish manually:
# Ensure you have NPM_TOKEN set
export NPM_TOKEN=npm_xxxx
# Version the packages (applies changesets)
pnpm run version-packages
# Review the changes, then publish
pnpm run releaseWhen adding a new extension package:
- Create the package in
registry/curated/<category>/<name>/ - Add it to
pnpm-workspace.yaml - Ensure
package.jsonhas:"private": false(or omit the field)"publishConfig": { "access": "public" }- Correct
"name"under@framers/scope
- Add an initial changeset:
pnpm changesetand select the new package with aminorbump
| Secret | Where | Purpose |
|---|---|---|
GITHUB_TOKEN |
Automatic | PR creation, GitHub releases |
NPM_TOKEN |
Repository Settings > Secrets > Actions | npm publishing for @framers scope |
The NPM_TOKEN must be a granular access token with publish permissions for the @framers organization. Generate one at npmjs.com/settings/tokens.
The pnpm-workspace.yaml lists all publishable packages:
packages:
- "registry/curated/auth"
- "registry/curated/provenance/anchor-providers"
- "registry/curated/research/web-search"
- "registry/curated/research/web-browser"
- "registry/curated/integrations/telegram"
- "registry/curated/communications/telegram-bot"
- "registry/curated/system/cli-executor"The .changeset/config.json controls behavior:
{
"changelog": ["@changesets/changelog-github", { "repo": "framerslab/agentos-extensions" }],
"access": "public",
"baseBranch": "master"
}- changelog: Auto-links PRs and commits in changelogs
- access: All packages publish as public
- baseBranch: Changesets tracks changes against
master