chore: version packages#57
Conversation
8fef5b9 to
f030a4d
Compare
There was a problem hiding this comment.
⚠️ APPROVE unavailable on this installation — the maintainer GitHub App is not
configured with write access on this org, so the verdict below is posted as COMMENT.
Event-level approval (for branch-protection / review requirements) must be added out-of-band.
Perry's Review
Automated Changesets "version packages" PR — deletes 3 consumed changeset files and bumps @openrouter/agent (0.7.2→0.8.0) and @openrouter/mcp (0.1.0→0.2.0) with matching CHANGELOG entries.
Verdict: ✅ LGTM
Details
Risk: 🟢 Low — mechanical version/changelog bump only, no source code touched
CI: all passing ✅ (e2e-tests, lint, structural-gate, typecheck, unit-tests)
Findings: none
Research: n/a — small tier, no deep research pass
Security: no concerns — diff touches only changeset markdown files, CHANGELOG.md entries, and package.json version fields; no secrets, no code paths
Test coverage: n/a — no code changed
Unresolved threads: none
Verification: all 3 deleted changesets correspond exactly to entries appended to both CHANGELOGs; both version bumps are minor bumps matching their "### Minor Changes" sections; @openrouter/mcp's workspace dependency on @openrouter/agent resolves automatically, no other file needed updating.
Scope: first review (full)
Review: tier=small · model=claude-sonnet-latest · score=0.8
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@openrouter/agent@0.8.0
Minor Changes
#56
209499aThanks @mattapperson! - Add asourcediscriminant to tool results so untyped MCP tools no longer collapse the type safety of typed tools.Previously, mixing an MCP tool (whose output schema is
unknown) with fully-typed tools in onecallModel({ tools })array collapsed the entire result union tounknown— one untyped tool poisoned every other tool's result type.ToolExecutionResult(andToolExecutionResultUnion) now carrysource: 'client' | 'mcp'. Narrowing onsource === 'client'recovers the precise, schema-derived results for your own tools; MCP results stay isolated asunknownundersource === 'mcp'.ToolResultEvent(streaming:getFullResponsesStream,getToolStream) gains the samesourcefield. Breaking: thetool.resultevent payload now includessource; consumers that constructed or exhaustively matched these events may need to account for it.@openrouter/agentexports amarkMcp()helper, anisMcpTool()guard, and theMcpBrandedtype.@openrouter/mcpbrands every wrapped tool (including syntheticlist_resources/read_resource) so the discrimination is automatic — callers just spreadmcp.toolsas before.type: 'function'; the brand is purely informational and does not change runtime behavior.Patch Changes
8edae63Thanks @ayush-or! - Stop the tool-execution loop when a round contains unresolved manual (client-executed) tool calls, instead of sending a follow-up request whose input carries afunction_callwith no matchingfunction_call_output— a history providers reject with a 400 "No tool output found for function call ...". The response is surfaced so the caller can execute the manual calls and continue, mirroring the existing all-manual behavior.@openrouter/mcp@0.2.0
Minor Changes
#56
209499aThanks @mattapperson! - Add asourcediscriminant to tool results so untyped MCP tools no longer collapse the type safety of typed tools.Previously, mixing an MCP tool (whose output schema is
unknown) with fully-typed tools in onecallModel({ tools })array collapsed the entire result union tounknown— one untyped tool poisoned every other tool's result type.ToolExecutionResult(andToolExecutionResultUnion) now carrysource: 'client' | 'mcp'. Narrowing onsource === 'client'recovers the precise, schema-derived results for your own tools; MCP results stay isolated asunknownundersource === 'mcp'.ToolResultEvent(streaming:getFullResponsesStream,getToolStream) gains the samesourcefield. Breaking: thetool.resultevent payload now includessource; consumers that constructed or exhaustively matched these events may need to account for it.@openrouter/agentexports amarkMcp()helper, anisMcpTool()guard, and theMcpBrandedtype.@openrouter/mcpbrands every wrapped tool (including syntheticlist_resources/read_resource) so the discrimination is automatic — callers just spreadmcp.toolsas before.type: 'function'; the brand is purely informational and does not change runtime behavior.#56
26336b5Thanks @mattapperson! - Add@openrouter/mcp: expose remote MCP server tools (Streamable HTTP / SSE) ascallModeltools.createMCPTools()connects to a non-stdio MCP server, authenticates once (bearer token, custom headers, or a pluggableOAuthClientProvider), and returns a handle whose.toolsdrop straight intocallModel({ tools }). The same auth is reused for tool discovery and every tool call.convertMcpInputSchema) so the model sees real parameters; tool output schemas are mapped too.serialize()/rehydrateMCPTools()/ pluggableMCPCacheStore+InMemoryMCPCacheStore) that skips re-listing and, opt-in, re-authentication. Credential caching is off by default.tools/list_changedauto-refresh, cancellation via an abort signal, resources exposed as syntheticlist_resources/read_resourcetools, and elicitation with an optional handler (auto-declines when none is provided).Patch Changes
209499a,8edae63]: