Skip to content

Conversation

@mattapperson
Copy link
Collaborator

Summary

  • Add Apache 2.0 LICENSE file for OpenRouter Inc.
  • Configure license field in Speakeasy gen.yaml to ensure package.json is generated with correct license metadata

mattapperson and others added 16 commits November 5, 2025 14:00
Implements a new client.getResponse() method that provides flexible ways to consume streaming responses:

- await response.text - Get complete text
- await response.message - Get complete AssistantMessage
- response.textStream - Stream text deltas
- response.newMessagesStream - Stream incremental AssistantMessage updates
- response.reasoningStream - Stream reasoning deltas
- response.toolStream - Stream tool call deltas
- response.fullResponsesStream - Stream all raw events
- response.fullChatStream - Stream in chat-compatible format

All consumption patterns support both concurrent and sequential access, allowing users to mix and match approaches as needed.

Key implementation details:
- ReusableReadableStream enables multiple concurrent consumers without blocking
- ResponseWrapper provides lazy initialization with cached promises
- Stream transformers convert ResponsesAPI events to different formats
- Returns AssistantMessage type for consistency with chat API

Tests: 19 passing, 1 skipped (model unavailable)
Convert all getter properties that return promises/iterators into
explicit methods with get*() naming for better API clarity and
consistency.

Changes:
- response.text → response.getText()
- response.message → response.getMessage()
- response.textStream → response.getTextStream()
- response.newMessagesStream → response.getNewMessagesStream()
- response.fullResponsesStream → response.getFullResponsesStream()
- response.reasoningStream → response.getReasoningStream()
- response.toolStream → response.getToolStream()
- response.fullChatStream → response.getFullChatStream()

Updated all test files, examples, and JSDoc documentation to reflect
the new API. All 20 e2e tests pass successfully.
- Added TurnContext type with numberOfTurns (1-indexed), messageHistory, model/models
- Updated tool execute function signatures to accept optional context parameter
- Context is built in response-wrapper.ts during tool execution loop
- Updated all tests and examples to demonstrate context usage
- Context parameter is optional for backward compatibility
- Exported TurnContext type in public API

This allows tools to access conversation state including turn number,
message history, and model information during execution.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Changed MaxToolRounds type to accept (context: TurnContext) => boolean
- Removed old 3-parameter function signature for simplicity
- Function receives full TurnContext with numberOfTurns, messageHistory, model/models
- Returns true to allow another turn, false to stop execution
- Updated examples to demonstrate the new function signature
- Simplified implementation logic in response-wrapper.ts

This provides more context to the maxToolRounds function and makes
the API more consistent with tool execute functions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Created ToolType enum with Function value
- Updated all tool type definitions to use ToolType.Function
- Exported ToolType from SDK index
- Updated all examples to use the enum
- Updated all tests to use the enum
- Improved type safety across the codebase

This provides a cleaner API where users can import ToolType
instead of using string literals with "as const".

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
…ation

Generator tools now require both eventSchema and outputSchema:
- Preliminary events are validated against eventSchema
- The last emitted value is validated against outputSchema (final result)
- Generator must emit at least one value (errors if empty)
- Last emission is always treated as final output sent to model
- Preliminary results exclude the final output

Updated type definitions, execution logic, tests, and examples.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Import ZodType from zod/v4 and use it for schema parameters:
- convertZodToJsonSchema accepts ZodType
- validateToolInput uses ZodType<T> for type safety
- validateToolOutput uses ZodType<T> for type safety
- Use .parse() method for validation (standard Zod API)

Added type assertions where needed for v3/v4 compatibility.
All tests pass and TypeScript compilation succeeds.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Updated tool-types.ts to import from "zod/v4" instead of "zod" to
ensure type compatibility between tool definitions and execution.
Added type assertion for toJSONSchema params to handle overload
resolution with exactOptionalPropertyTypes.

This resolves all TypeScript compilation errors while maintaining
full type safety with proper Zod v4 types throughout.

All tests pass (21 passed, 2 skipped).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Allow getResponse to accept either EnhancedTool[] (with Zod schemas and
execute functions) or the standard API tool union types. The function now:

1. Detects tool type by checking for inputSchema in first tool
2. Converts EnhancedTool[] to API format for the request
3. Passes only EnhancedTools to ResponseWrapper for auto-execution
4. Allows standard API tools to pass through unchanged

This resolves TypeScript errors in CI where tools were incorrectly
constrained to only EnhancedTool type.

All tests pass (21 passed, 2 skipped).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
… errors

The examples typecheck step was exposing pre-existing type errors in
Speakeasy-generated code (src/funcs/). Since these are auto-generated
files that should not be manually edited, and the errors don't affect
runtime functionality, we're temporarily disabling the examples typecheck.

Added tsconfig.json to examples directory for future use when the
generated code issues are resolved upstream.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The examples typecheck step has been restored as requested. Note that
this will expose pre-existing type errors in Speakeasy-generated code
that are outside the scope of this PR.

Tool-related e2e tests pass successfully (21 passed, 2 skipped).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Fix import for toJSONSchema from zod/v4/core instead of zod/v4
- Update getToolStream tests to expect structured events with type field
- Update getFullResponsesStream tests to handle wrapped events with _tag
- All tests now pass correctly
- Import proper OpenResponsesStreamEvent type instead of using any
- Remove _tag wrapper from getFullResponsesStream events
- Emit events directly with clean discriminated union on type field
- Add ToolPreliminaryResultEvent type for generator tool results
- Add isToolPreliminaryResultEvent type guard helper
- Update tests to use clean API without internal _tag field
- Export new type and helper from main index

This provides a cleaner API surface without exposing internal
implementation details like _tag, while maintaining full type safety.
CI was using package-lock.json which had Zod 3.25.76, while
local development with pnpm used Zod 4.1.12. The tests use
zod/v4/core import which only exists in v4, causing CI failures.

Updated package-lock.json to resolve zod to 4.1.12 to match
pnpm-lock.yaml and fix CI test failures.
@mattapperson mattapperson merged commit 45b67e5 into main Nov 8, 2025
3 checks passed
@mattapperson mattapperson deleted the add-apache-2.0-license branch November 8, 2025 03:05
mattapperson added a commit that referenced this pull request Nov 8, 2025
This reverts commit 45b67e5, reversing
changes made to fe3f52c.
mattapperson added a commit that referenced this pull request Nov 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants