Repository navigation
Conversation
Extracted clean plugin documentation from the superseded cheaper-inference#3555 branch, applied directly onto current release/v3.8.24. Three files: - PLUGIN_DEVELOPMENT.md (new) — dev mode, testing, doctor, signing, lifecycle - PLUGIN_MARKETPLACE.md (new) — discover, install, publish, Phase 1+2 - PLUGIN_SDK.md (updated) — fixed doc-fiction, accurate event tables, cleaned PluginContext, dev-mode caveats, lifecycle event notes
…solve SDK conflict markers
There was a problem hiding this comment.
Code Review
This pull request adds comprehensive documentation for OmniRoute's plugin system, including new guides for plugin development and the marketplace, alongside updates to the Plugin SDK reference. The feedback highlights critical issues in the marketplace documentation examples where asynchronous functions (listMarketplacePlugins, searchMarketplace, and getMarketplaceEntry) are not awaited, which would cause runtime errors or logical failures in user implementations.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| ```ts | ||
| import { listMarketplacePlugins } from "omniroute/plugins/marketplace"; | ||
|
|
||
| const plugins = listMarketplacePlugins(); |
There was a problem hiding this comment.
The listMarketplacePlugins function is asynchronous and returns a Promise. It must be awaited to retrieve the actual array of plugins, otherwise iterating over it with for...of will throw a TypeError at runtime.
| const plugins = listMarketplacePlugins(); | |
| const plugins = await listMarketplacePlugins(); |
| const loggingPlugins = searchMarketplace("logging"); | ||
| const securityPlugins = searchMarketplace("security"); |
There was a problem hiding this comment.
The searchMarketplace function is asynchronous and returns a Promise. Both calls should be awaited to obtain the filtered plugin lists.
| const loggingPlugins = searchMarketplace("logging"); | |
| const securityPlugins = searchMarketplace("security"); | |
| const loggingPlugins = await searchMarketplace("logging"); | |
| const securityPlugins = await searchMarketplace("security"); |
| ```ts | ||
| import { getMarketplaceEntry } from "omniroute/plugins/marketplace"; | ||
|
|
||
| const entry = getMarketplaceEntry("request-logger"); |
There was a problem hiding this comment.
The getMarketplaceEntry function is asynchronous and returns a Promise. It must be awaited, otherwise the subsequent if (entry) check will always evaluate to true because a Promise object is truthy.
| const entry = getMarketplaceEntry("request-logger"); | |
| const entry = await getMarketplaceEntry("request-logger"); |
|
Thanks @oyi77 — the cleanup (branched fresh from release, corrected examples) is appreciated, and the marketplace/manifest parts map to real code (
Also FYI: #4006 and #4007 have identical diffs (both contain all three docs) — one of them is redundant; keep a single PR. Rebase onto current |
|
Closing in favor of #4007 — both PRs had identical diffs. Consolidated into
All changes are now in #4007. |
|
Closing — consolidated into #4007. See comment above for details. |
Replaces #3784 as a clean, non-contaminated PR branched from release/v3.8.27.
Updates the Plugin SDK reference documentation with:
Only docs/plugins/ changes, no unrelated churn.
Supersedes: #3784