@framers/agentos-extensions

中文文档
1.0.57发布于 2026/11/14Apache-2.0TypeScriptES Module零依赖构建来源已验证近 30 天下载 1.2万

Extension source for AgentOS — implementations, templates, and manifests for tools, channel adapters, and integrations. Companion to the @framers/agentos TypeScript AI agent runtime.

原始使用文档
文档目录32 节
  1. What This Package Is
  2. Published Extensions
  3. Extensions
  4. Channel Adapters
  5. Two-Tier Extension Pattern
  6. Core Extensions (monorepo root)
  7. Curated Extensions (this submodule)
  8. Why two tiers?
  9. Where do safety guardrails live?
  10. Repository Structure
  11. Quick Start
  12. Install the registry (recommended)
  13. Install individual extensions
  14. How extensions stay optional and lazy
  15. Layer 1: package install gates everything
  16. Layer 2: registry resolve skips uninstalled packages
  17. Layer 3: requiredSecrets gates descriptor activation
  18. Layer 4: SharedServiceRegistry.getOrCreate() defers heavy r…
  19. What this looks like end-to-end for a guardrail
  20. Registry options
  21. Create a new extension
  22. Releasing & Publishing
  23. TL;DR
  24. Naming Convention
  25. CI/CD
  26. Quality Standards
  27. All Extensions
  28. Additional for Curated
  29. Documentation
  30. Contributing and support
  31. Links
  32. License

AgentOS     Frame.dev

AgentOS Extensions

Extension source code for AgentOS — tools, channel adapters, integrations, and starter templates.

CI Status License: Apache 2.0 API Docs npm: registry npm: catalog NVIDIA Inception

What This Package Is

This package contains the actual implementation source code for AgentOS extensions: the Telegram adapter, web-search tool, voice providers, browser automation, channel adapters for 37 platforms, and more. It also ships starter templates (templates/) for creating new extensions from scratch.

This is NOT a registry. It is the source code that registries catalog. The relationship between the two sibling packages is:

PackageRole
@framers/agentos-extensions (this package)Implementation source code, manifests, and templates
@framers/agentos-extensions-registryCatalog/SDK that references this package's metadata and exposes createCuratedManifest()

Dependency direction: agentos-extensions-registry depends on metadata from this package, not the other way around. Extensions here are self-contained and can be installed individually without the registry.

Published Extensions

All extensions are published to npm under the @framers scope.

Extensions

PackageDescriptionnpm
@framers/agentos-ext-web-searchMulti-provider web search & fact-checkingnpm
@framers/agentos-ext-web-browserBrowser automation & content extractionnpm
@framers/agentos-ext-web-scraperProgressive scraping with fetch, Playwright, stealth, recipes, and LLM fallback extractionnpm
@framers/agentos-ext-news-searchNews article search via NewsAPInpm
@framers/agentos-ext-giphyGIF & sticker search via Giphy APInpm
@framers/agentos-ext-image-searchStock photo search (Pexels, Unsplash, Pixabay)npm
@framers/agentos-ext-letterboxdLetterboxd movie lookup with review extraction and direct page fallbacknpm
@framers/agentos-ext-omdbMovie and TV metadata with IMDB, Rotten Tomatoes, and Metacritic ratingsnpm
@framers/agentos-ext-voice-synthesisText-to-speech via ElevenLabsnpm
@framers/agentos-ext-cli-executorShell command execution & file managementnpm
@framers/agentos-ext-authJWT authentication & subscription managementnpm
@framers/agentos-ext-clearbitCompany and person enrichment via Clearbitnpm
@framers/agentos-ext-telegramTelegram Bot API integrationnpm
@framers/agentos-ext-wunderbot-feedsWunderbot feed ingestion + social content pipeline integrationnpm
@framers/agentos-ext-telegram-botTelegram bot communications handlernpm
@framers/agentos-ext-anchor-providersSolana on-chain provenance anchoringnpm
@framers/agentos-ext-tip-ingestionTip content processing pipeline (published package; not vendored in this workspace)npm
@framers/agentos-ext-browser-automationFull browser automation (Playwright) — 10 toolsnpm
@framers/agentos-ext-deep-researchMulti-source research & investigation — 5 toolsnpm
@framers/agentos-ext-content-extractionContent extraction (URLs, YouTube, PDF) — 5 toolsnpm
@framers/agentos-ext-credential-vaultEncrypted credential management — 5 toolsnpm
@framers/agentos-ext-document-exportExport reports and decks to PDF, DOCX, PPTX, XLSX, and CSVnpm
@framers/agentos-ext-widget-generatorGenerate self-contained interactive HTML widgets with file managementnpm
@framers/agentos-ext-notificationsMulti-channel notification router — 3 toolsnpm
@framers/agentos-ext-self-harm-referralGuardrail that answers a self-harm expression in a message or a reply with crisis lines for the person's country and reports each referralnpm

Channel Adapters

PackageDescriptionnpm
@framers/agentos-ext-channel-telegramTelegram messaging channel (grammY)npm
@framers/agentos-ext-channel-whatsappWhatsApp messaging channel (Baileys)npm
@framers/agentos-ext-channel-discordDiscord messaging channel (discord.js)npm
@framers/agentos-ext-channel-slackSlack messaging channel (Bolt)npm
@framers/agentos-ext-channel-webchatBuilt-in WebChat channel (Socket.IO)npm
@framers/agentos-ext-channel-twitterTwitter/X social channel (twitter-api-v2)npm
@framers/agentos-ext-channel-instagramInstagram social channel (Graph API)npm
@framers/agentos-ext-channel-redditReddit social channel (snoowrap)npm
@framers/agentos-ext-channel-youtubeYouTube social channel (googleapis)npm
@framers/agentos-ext-channel-linkedinLinkedIn social channel (Marketing API)npm
@framers/agentos-ext-channel-facebookFacebook social channel (Meta Graph API)npm
@framers/agentos-ext-channel-threadsThreads social channel (Meta Graph API)npm
@framers/agentos-ext-channel-blueskyBluesky social channel (AT Protocol)npm
@framers/agentos-ext-channel-mastodonMastodon social channel (federated)npm
@framers/agentos-ext-channel-farcasterFarcaster social channel (Neynar API)npm
@framers/agentos-ext-channel-lemmyLemmy federated social channelnpm
@framers/agentos-ext-channel-google-businessGoogle Business Profile channelnpm
@framers/agentos-ext-channel-blog-publisherBlog publisher (Dev.to, Hashnode, Medium, WordPress)npm
@framers/agentos-ext-channel-pinterestPinterest social channel (API v5)npm
@framers/agentos-ext-channel-tiktokTikTok social channel (API for Business)npm
@framers/agentos-ext-channel-emailEmail messaging channel (SMTP or Resend's HTTPS API, IMAP), with a suppression record and unsubscribe tokens on SQLnpm

Two-Tier Extension Pattern

AgentOS extensions are organized into two tiers with different versioning and release strategies:

Core Extensions (monorepo root)

Seven foundational packages live at the monorepo root under packages/agentos-ext-*:

PackageDescription
agentos-ext-code-safetyStatic code analysis guardrail (injection, XSS, secrets)
agentos-ext-pii-redactionPII detection and redaction pipeline, with a refuse mode (onDetect: 'refuse') and two contact types (street addresses, social handles) that it detects only when named
agentos-ext-grounding-guardClaim extraction & source verification
agentos-ext-ml-classifiersContent classification: one local English toxicity model (toxic-bert), with an LLM judge or keyword patterns as fallbacks; a /moderation entry point with an OpenAI Moderation guard and a conduct classifier on a judge model you choose
agentos-ext-topicalityTopic drift detection & off-topic filtering
agentos-ext-http-apiHTTP API server for AgentOS
agentos-ext-skillsSkill loading & execution tooling

Each is versioned on its own and published to npm by the publish workflows of the repository that holds it, on the push to that repository's master that changes a file the package ships. Version bumps here do not affect curated extension versions.

Curated Extensions (this submodule)

The packages inside registry/curated/ are the full extension catalog: channel adapters, integrations, research tools, media tools, and more. Each is versioned on its own, and the daily release (10:17 UTC) publishes each package whose shipped files changed on master since its last release (RELEASING.md).

Why two tiers?

  • Core extensions are safety-critical guardrails and foundational infrastructure. They need independent semver to signal breaking changes without forcing a catalog-wide release. Their CI runs on every PR to the monorepo root.
  • Curated extensions are the broader catalog. The release keeps their interdependencies aligned: when a package's new version leaves a dependent's range on it, the same run raises that range and publishes the dependent.

Where do safety guardrails live?

The registry/curated/safety/ directory contains stub READMEs pointing to the canonical core packages at the monorepo root. The actual source code for code-safety, pii-redaction, and grounding-guard lives exclusively in packages/agentos-ext-* at the monorepo root. The ml-classifiers and topicality packages have copies here; npm receives both from the root packages until issue 121 moves their releases here. The ml-classifiers copy is older than the package on npm: it has no /moderation entry point. Two guardrails live only here and publish from this repository: content-policy-rewriter and self-harm-referral.

Repository Structure

agentos-extensions/
├── .github/workflows/     # CI, release, TypeDoc pages
├── logos/                 # Branding assets
├── templates/             # Starter templates for new extensions
│   ├── basic-tool/        # Single tool template
│   ├── multi-tool/        # Multiple tools template
│   ├── guardrail/         # Safety/compliance template
│   └── workflow/          # Multi-step process template
├── registry/
│   ├── curated/           # Official & verified extensions
│   │   ├── auth/          # Authentication & subscriptions
│   │   ├── channels/      # Messaging & social channels (37 platform packs)
│   │   ├── communications/# Telegram bot, notifications
│   │   ├── integrations/  # External services (Telegram API)
│   │   ├── media/         # Giphy, image search, voice synthesis
│   │   ├── meetings/      # Browser-join meeting bot provider (Google Meet, Microsoft Teams)
│   │   ├── provenance/    # On-chain anchoring (tip-ingestion package is published separately)
│   │   ├── research/      # Web search, deep research, content extraction
│   │   ├── safety/        # Stub READMEs -> core packages (see above)
│   │   ├── system/        # CLI executor, browser automation, credential vault
│   │   ├── voice/         # Twilio, Telnyx, Plivo voice providers
│   │   └── productivity/  # Google Calendar, Gmail
│   └── community/         # Community-contributed extensions
├── scripts/               # Registry build & scaffolding tools
├── registry.json          # generated by pnpm run build; the published catalog ships in the npm package
├── pnpm-workspace.yaml    # Workspace packages for publishing
└── typedoc.json           # API docs config

Quick Start

Load all extensions at once via the curated registry:

npm install @framers/agentos-extensions-registry
import { AgentOS } from '@framers/agentos';
import { createCuratedManifest } from '@framers/agentos-extensions-registry';

const manifest = await createCuratedManifest({
  tools: 'all',
  channels: 'none',
  secrets: {
    'serper.apiKey': process.env.SERPER_API_KEY!,
    'giphy.apiKey': process.env.GIPHY_API_KEY!,
  },
});

const agentos = new AgentOS();
await agentos.initialize({ extensionManifest: manifest });

Only extensions whose npm packages are installed will load — missing packages are skipped silently.

Install individual extensions

npm install @framers/agentos-ext-web-search
import { AgentOS } from '@framers/agentos';
import webSearch from '@framers/agentos-ext-web-search';

const agentos = new AgentOS();
await agentos.initialize({
  extensionManifest: {
    packs: [{
      factory: () => webSearch({ /* config */ })
    }]
  }
});

How extensions stay optional and lazy

The extension surface is dependency-injected at four layers. Each layer is opt-in by default, so a host that installs five extensions does not pay the cost of the other 95, and an extension that needs a 110MB NER model does not load it until the first call.

Layer 1: package install gates everything

Every extension is its own npm package. Nothing is imported until you npm install it. The @framers/agentos-extensions-registry SDK depends on the extension packages as peerDependenciesMeta.optional, so installing the registry alone gives you the catalog metadata without pulling any extension source. Add @framers/agentos-ext-pii-redaction to your package.json and the registry sees it; remove it and the registry drops it on the next manifest build.

Layer 2: registry resolve skips uninstalled packages

createCuratedManifest() calls import.meta.resolve() on every catalog entry before adding it to the manifest. If the resolution throws, the entry is omitted. The runtime never sees it. There is no error, no warning, no missing-module crash. This is the difference between a catalog (metadata) and a registry that only emits packs you can actually run.

// Even if you ask for `tools: 'all'`, only installed packages reach the runtime.
const manifest = await createCuratedManifest({ tools: 'all' });
// → manifest.packs contains only @framers/agentos-ext-* packages found on disk.

Layer 3: requiredSecrets gates descriptor activation

Inside a pack, each descriptor (a single tool, guardrail, channel, or workflow) can declare requiredSecrets. Before activation, ExtensionManager checks whether each non-optional secret is resolvable from the secret store, the pack options, or the environment. Missing a secret? The descriptor is skipped and the rest of the pack still activates. Optional secrets unlock optional features (like the PII redaction extension's LLM-judge tier) without making them required.

// pii-redaction declares its LLM judge as an optional dependency.
{
  id: 'pii_judge_resolver',
  kind: 'tool',
  requiredSecrets: [{ id: 'anthropic.apiKey', optional: true }],
  // ...
}
// No ANTHROPIC_API_KEY in env? The judge is skipped, the rest of the pack works.

Layer 4: SharedServiceRegistry.getOrCreate() defers heavy resources

ML models, embedding indexes, ONNX runtimes, NER pipelines, and database pools are not loaded at activation. They are registered as factories and only constructed on the first call that needs them. The same instance is shared across descriptors in the same pack and (with a namespaced key) across packs.

async onActivate(ctx) {
  // The 110MB BERT NER model. Not loaded yet.
  const nerModel = await ctx.services.getOrCreate('pii:ner-model', async () => {
    const { NerModel } = await import('./NerModel.js');
    return NerModel.load();
  });
  this.scanTool.setNerModel(nerModel);
  this.streamingGuardrail.setNerModel(nerModel);
}

The import('./NerModel.js') is a dynamic import: the model file itself does not enter the module graph until something asks for the service. First call pays the load cost; subsequent calls hit the cache. Tear-down releases everything via the registry's lifecycle.

What this looks like end-to-end for a guardrail

A host installing @framers/agentos-ext-pii-redaction:

  1. Install. npm install @framers/agentos-ext-pii-redaction @framers/agentos-extensions-registry @framers/agentos. Nothing else.
  2. Manifest build. createCuratedManifest({ tools: 'all' }) resolves only the installed PII pack and emits a single-pack manifest.
  3. Activation. ExtensionManager.loadManifest() runs pack.onActivate(ctx), which registers a pii:ner-model factory in SharedServiceRegistry. The model file is not loaded.
  4. Descriptor registration. Two tool descriptors (pii_scan, pii_redact) and one guardrail descriptor land in the kind-specific registries. The guardrail descriptor's config.canSanitize = true and config.evaluateStreamingChunks = true flag it for the two-phase dispatcher.
  5. First request. A user message hits the input pipeline. The two-phase dispatcher runs Phase 1 sequentially: the PII guardrail's evaluateInput() fires, calls into the NER pipeline, and the model loads on this first call. Subsequent requests hit the cached model.
  6. Streaming output. As the model generates a response, each TEXT_DELTA chunk passes through the guardrail's evaluateOutput(). The dispatcher returns SANITIZE results with redacted text deterministically (Phase 1 chains sequentially), then runs all Phase 2 classifiers in parallel for any remaining checks.
  7. Tear-down. pack.onDeactivate(ctx) runs in reverse order on shutdown. The shared service registry releases the model.

The four other guardrail packs load on first use too, each in its own way: @framers/agentos-ext-ml-classifiers imports one ONNX model (Xenova/toxic-bert) on the guardrail's first classification, @framers/agentos-ext-grounding-guard lazy-loads the NLI pipeline, @framers/agentos-ext-topicality imports its embedding model on the first input it checks, and @framers/agentos-ext-code-safety is regex-only and pays no load cost. The classifier and topicality packs register no factory in SharedServiceRegistry, so the registry steps above do not apply to their models.

This is the same auto-discovery surface that runtime-forged tools join: an agent that invents a function in session N can promote it via SkillExporter into a SKILL.md that the registry picks up on the next process start. Forging grows the surface mid-run; auto-discovery ships it as a first-class capability.

For the dispatcher mechanics (Phase 1 sanitizers, Phase 2 parallel classifiers, worst-action aggregation, mid-stream override), see Guardrails. For lifecycle internals, see Extension Loading.

Registry options

createCuratedManifest() accepts:

OptionTypeDefaultDescription
toolsstring[] | 'all' | 'none''all'Which tool extensions to enable. Pass an array of names (e.g. ['web-search', 'giphy']) to selectively load.
channelsChannelPlatform[] | 'all' | 'none''all'Which messaging channels to enable.
secretsRecord<string, string>{}API keys and tokens. Falls back to environment variables.
loggerRegistryLoggerconsoleCustom logger (info, warn, error, debug methods).
basePrioritynumber0Base priority for all extensions.
overridesRecord<string, ExtensionOverrideConfig>—Per-extension overrides for enabled, priority, and options.

Secret keys

Secret IDEnvironment VariableExtension
serper.apiKeySERPER_API_KEYweb-search
serpapi.apiKeySERPAPI_API_KEYweb-search
brave.apiKeyBRAVE_API_KEYweb-search
giphy.apiKeyGIPHY_API_KEYgiphy
omdb.apiKeyOMDB_API_KEYomdb
clearbit.apiKeyCLEARBIT_API_KEYclearbit
elevenlabs.apiKeyELEVENLABS_API_KEYvoice-synthesis
pexels.apiKeyPEXELS_API_KEYimage-search
unsplash.apiKeyUNSPLASH_ACCESS_KEYimage-search
pixabay.apiKeyPIXABAY_API_KEYimage-search
newsapi.apiKeyNEWSAPI_API_KEYnews-search
telegram.botTokenTELEGRAM_BOT_TOKENchannel-telegram
discord.botTokenDISCORD_BOT_TOKENchannel-discord
slack.botTokenSLACK_BOT_TOKENchannel-slack
slack.appTokenSLACK_APP_TOKENchannel-slack
twitter.bearerTokenTWITTER_BEARER_TOKENchannel-twitter
twitter.apiKeyTWITTER_API_KEYchannel-twitter
twitter.apiSecretTWITTER_API_SECRETchannel-twitter
twitter.accessTokenTWITTER_ACCESS_TOKENchannel-twitter
twitter.accessSecretTWITTER_ACCESS_SECRETchannel-twitter
instagram.accessTokenINSTAGRAM_ACCESS_TOKENchannel-instagram
linkedin.accessTokenLINKEDIN_ACCESS_TOKENchannel-linkedin
facebook.accessTokenFACEBOOK_ACCESS_TOKENchannel-facebook
threads.accessTokenTHREADS_ACCESS_TOKENchannel-threads
bluesky.handleBLUESKY_HANDLEchannel-bluesky
bluesky.appPasswordBLUESKY_APP_PASSWORDchannel-bluesky
mastodon.accessTokenMASTODON_ACCESS_TOKENchannel-mastodon
farcaster.neynarApiKeyFARCASTER_NEYNAR_API_KEYchannel-farcaster
farcaster.signerUuidFARCASTER_SIGNER_UUIDchannel-farcaster
lemmy.instanceUrlLEMMY_INSTANCE_URLchannel-lemmy
lemmy.usernameLEMMY_USERNAMEchannel-lemmy
lemmy.passwordLEMMY_PASSWORDchannel-lemmy
google.accessTokenGOOGLE_ACCESS_TOKENchannel-google-business
reddit.clientIdREDDIT_CLIENT_IDchannel-reddit
reddit.clientSecretREDDIT_CLIENT_SECRETchannel-reddit
reddit.usernameREDDIT_USERNAMEchannel-reddit
reddit.passwordREDDIT_PASSWORDchannel-reddit
youtube.apiKeyYOUTUBE_API_KEYchannel-youtube
pinterest.accessTokenPINTEREST_ACCESS_TOKENchannel-pinterest
tiktok.accessTokenTIKTOK_ACCESS_TOKENchannel-tiktok
email.smtpHostSMTP_HOSTchannel-email
email.smtpUserSMTP_USERchannel-email
email.smtpPasswordSMTP_PASSWORDchannel-email
email.resendApiKeyRESEND_API_KEYchannel-email

Selective loading examples

// Only web search and giphy, no channels
const manifest = await createCuratedManifest({
  tools: ['web-search', 'giphy'],
  channels: 'none',
});

// Only Telegram and Discord channels, all tools
const manifest = await createCuratedManifest({
  channels: ['telegram', 'discord'],
  tools: 'all',
  secrets: {
    'telegram.botToken': process.env.TELEGRAM_BOT_TOKEN!,
    'discord.botToken': process.env.DISCORD_BOT_TOKEN!,
  },
});

// Override specific extension options
const manifest = await createCuratedManifest({
  tools: 'all',
  channels: 'none',
  overrides: {
    'web-search': { priority: 10 },
    'cli-executor': { enabled: false },
  },
});

Create a new extension

# Copy the template, then give the copy its name, its role and its own CHANGELOG.md,
# as CONTRIBUTING.md's "Adding an extension pack" says
cp -r templates/basic-tool registry/curated/category/my-extension
cd registry/curated/category/my-extension
pnpm install
pnpm run dev

Releasing & Publishing

The release runs once a day at 10:17 UTC when releasable changes have merged to master: it publishes every package whose shipped files changed since its newest version on npm, from the tarball CI built and tested, and tags and releases each version on GitHub. A merge publishes nothing by itself. To release at once, run gh workflow run release.yml --repo framerslab/agentos-extensions --ref master (add -f dry_run=true to see what would be released), or Actions, Release & Publish, Run workflow. New versions publish from GitHub Actions through npm trusted publishing, with a provenance statement; a new package's first version publishes through the token, as RELEASING.md describes. Nobody writes a changeset or a release note: the merged pull request's title is the note. See RELEASING.md for the full workflow.

TL;DR

# 1. Change one or more extensions on a branch, and open a pull request titled in
#    the Conventional Commits form: fix(web-search): ..., or feat(web-search)!: ...
#    for a change that breaks users: a minor in place of a patch below 1.0.0;
#    at 1.0.0 or above CI refuses the mark until package.json names the next major

# 2. Read the summary of CI's step "The packages this push would publish":
#    each package the merge publishes, with its version and the reason

# 3. Merge it: the next daily release (10:17 UTC) publishes those packages to
#    npm, tags each version <name>@<version> and makes its GitHub release
#    (gh workflow run release.yml --ref master releases at once)

Each extension is versioned and published independently. A change to web-search does not bump telegram.

Naming Convention

TypePatternExample
Extension@framers/agentos-ext-{name}@framers/agentos-ext-web-search
Template@framers/agentos-template-{type}@framers/agentos-template-basic-tool

CI/CD

All extensions get free CI/CD via GitHub Actions:

  • CI (ci.yml): plans what the push would publish (scripts/release-plan.mjs), builds the AgentOS core and every pack, runs the release-script tests and each pack's tests, and runs the pack guard on the planned packages, on every pull request
  • Release (release.yml): runs daily at 10:17 UTC and by hand; a gate ends the run in seconds when nothing is releasable, otherwise it runs CI on master's head, then publishes the tarballs CI tested for the packages that changed, tags each version, makes its GitHub release, and writes the images' version tags
  • TypeDoc (pages-typedoc.yml): API docs deployed to framerslab.github.io/agentos-extensions on a push to master, one deploy at a time: a deploy that has started runs to the end, and a push that lands during it waits, the last push to come in replacing any earlier one still waiting
  • Lockfile (lockfile.yml): resolves the workspace's dependency ranges and offers pnpm-lock.yaml as an artifact to commit, run by hand on a branch whose package.json files changed
  • Meeting bot image (meeting-bot-image.yml): builds the browser meeting bot's container image and runs its lifecycle test on every pull request that touches registry/curated/meetings/browser/, and pushes the image to GHCR from master; the bot's nightly real-join check (nightly-real-join.yml) runs daily and by hand, and its capacity measurement on a worker (measure-meeting-bots.yml) by hand only, as the pack's README describes
  • Document parser image (document-parser-image.yml): builds the document parser's container image and runs its lifecycle test on a pull request that touches registry/curated/tools/document-parser/ or pnpm-lock.yaml, once it is ready for review, and on a push to master that touches the pack, which also pushes the tested image to GHCR as ghcr.io/framerslab/agentos-document-parser:sha-<commit>; the release workflow tags a released version's image :<version>, as the release guide and the pack's README describe. document-parser.yml runs the pack's tests on Node 24, beside CI's Node 22, when a pull request or a push to master touches the pack, pnpm-lock.yaml or pnpm-workspace.yaml
  • Dependabot: weekly dependency updates. dependabot-auto-merge.yml labels an npm minor or patch update landing, and posts one comment for its head commit naming the guards that passed, when CI's build check and the links check have succeeded on that commit, no other workflow check there is pending or failed (skipped and neutral count as passed), every commit is Dependabot's, its review threads are settled and ten minutes have passed since its last push. It never merges: a labelled update lands once its review comments on GitHub are read, those that name a failing input fixed and the rest answered, and its threads resolved. It decides again when a CI or Links run of the update is requested, starts or finishes, when a review is submitted or a comment is made on its diff, and every hour; when a push moves the head or a guard fails, it takes off a label it added, and a label a maintainer added, took off or put back stays. A thread resolved or reopened sends no event a workflow can take, so the next of those runs decides it; a landing waits for every thread to be resolved whatever the label says. Major updates, GitHub Actions updates, and a pull request whose head commit message names a different version than its title (left from an older update after a rebase) wait for a maintainer. The decision is scripts/dependabot-merge-lib.mjs. Dependabot updates pnpm-lock.yaml with pnpm's minimumReleaseAge at three days; pnpm-workspace.yaml exempts @framers/*, the family whose pins the weekly bump (bump-framers-deps.yml) moves to the newest release, and the bump runs Dependabot's update before it opens its pull request

Quality Standards

All Extensions

  • TypeScript with strict mode
  • 80% test coverage

  • Apache 2.0 license
  • No hardcoded secrets

Additional for Curated

  • Professional code review
  • Performance benchmarks
  • Integration tests
  • Migration guides

Documentation

Contributing and support

GuideWhat
ContributingDevelopment setup, adding a pack, commit messages and releases, pull request rules, review threads, contribution licensing
Release guideWhat the daily release publishes, and at which version
Agent instructionsCommands and conventions for coding agents
MaintainersWho reviews and merges changes
Code of ConductCommunity standards
Security PolicyReporting vulnerabilities privately
SupportWhere to get help

License

All extensions in this repository are Apache 2.0 licensed.


AgentOS     Frame.dev

Built by Frame
Contact: [email protected]

版本与发布记录

@framers/agentos-extensions 共发布 58 个版本,首次发布于 2026/02/07;过去 12 个月发布了 58 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.57latest2026/11/141 天前
1.0.562026/11/132 天前
1.0.552026/11/123 天前
1.0.542026/11/124 天前
1.0.532026/11/124 天前
1.0.522026/11/114 天前

关于 @framers/agentos-extensions 的常见问题

@framers/agentos-extensions 是什么?

Extension source for AgentOS — implementations, templates, and manifests for tools, channel adapters, and integrations. Companion to the @framers/agentos TypeScript AI agent runtime.

如何安装 @framers/agentos-extensions?

在项目目录运行 npm install @framers/agentos-extensions,或使用 pnpm add / yarn add / bun add。

@framers/agentos-extensions 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@framers/agentos-extensions 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@framers/agentos-extensions 可以商用吗?

@framers/agentos-extensions 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@framers/agentos-extensions 的下载量有多少?

根据 npm 官方下载统计,@framers/agentos-extensions 在 2026/10/16 – 2026/11/14 这 30 天内被下载 11,807 次,日均约 394 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@framers/agentos-extensions 还在维护吗?

最新版本 1.0.57 发布于 2026/11/14(1 天前);至今共发布 58 个版本,其中过去 12 个月发布了 58 个;首次发布于 2026/02/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。