* Add example usage to HTTPClientTransport documentation comments
* Add documentation comments to NetworkTransport
* Improve documentation comments for StdioTransport
* Delay SSE GET connection until after session ID is established
- Add a signaling mechanism to ensure the SSE streaming task waits for the initial session ID to be set before attempting the GET connection.
- Use a TaskGroup to race between session ID signal and a 10-second timeout, logging the outcome.
- Trigger the signal when a session ID is received for the first time from any response.
- Add detailed logging for all code paths to aid debugging and clarify connection timing.
- Clean up signal resources on disconnect to prevent leaks.
This addresses the initialization timing issue where the SSE GET could be attempted before the session was established, as discussed in MCP PR #91.
* Update tests for SSE timing
* Use configurable timeout for acquiring session ID
* Remove Actor protocol conformance for HTTPClientTransport
* Configure shorter session ID timeout for tests
* Add documentation comments to HTTPClientTransport
* Rename sessionIDWaitTimeout to sseInitializationTimeout
* Add package dependency for github.com/loopwork-ai/EventSource
* Use EventSource for SSE implementation
* Refactor response stream and content type handling
Co-authored-by: Stephen Tallent <stallent@mercury.io>
* Conditionalize use of streaming for supported platforms
* Refactor conditional platform handling
* Conditionalize code and package dependency on Linux
---------
Co-authored-by: Stephen Tallent <stallent@mercury.io>
* Add test coverage for Client with HTTPClientTransport
* Configure HTTP client transport to stream by default
* Add example usage of streaming HTTP transport to README
* Explicitly set streaming to false in test
* support 405 response from servers that don’t support streaming
* Rephrase comment
---------
Co-authored-by: Stephen Tallent <stallent@mercury.io>
Co-authored-by: Mattt Zmuda <mattt@loopwork.com>
* Optimized code in `connectToEventStream` to use `.lines` computed value of `AsyncSequence` to produce a `AsyncLineSequence` instead of building a lines manually.
* - Reverter use of `lines` (it swallows newlines)
- Fiexed original issue I experienced with line 229 `while let newlineIndex = buffer.firstIndex(of: "\n") {` not handling "\r\n" properly
- Added unit test to test for "\r\n" scenario
- Simplified `end of event` test - `line` creation trims newline, added code trims carriage return. Only thing that should be left is an empty line
* Rename file to Transport.swift
* Rename file to StdioTransportTests.swift
* Add .index-build/ to .gitignore
* Implement HTTP client transport
* Add test coverage for streamable HTTP client transport
* Conditionally import FoundationNetworking
* Conditionalize streaming for unsupported platforms
* Import FoundationNetworking in tests
* Add 5 minute timeout to CI jobs
* Remove debug logging
* Formatting
* Skip SSE tests on platforms that don't support streaming