Releases: rocketride-org/rocketride-server
Release list
RocketRide VS Code Extension v1.2.0 (prerelease)
Automated prerelease from develop — VS Code Extension v1.2.0.
VS Code Extension v1.2.0
RocketRide Server v3.3.0 (prerelease)
Automated prerelease from develop — Server v3.3.0.
Server v3.3.0
RocketRide TypeScript Client v1.3.0 (prerelease)
Automated prerelease from develop — TypeScript Client v1.3.0.
TypeScript Client v1.3.0
RocketRide Python Client v1.3.0 (prerelease)
Automated prerelease from develop — Python Client v1.3.0.
Python Client v1.3.0
RocketRide MCP Client v1.2.0 (prerelease)
Automated prerelease from develop — MCP Client v1.2.0.
MCP Client v1.2.0
RocketRide VS Code Extension v1.3.0
⚠ Breaking Changes: Client SDKs (rocketride / rocketride-python)
These changes affect code that imports and calls the Python or TypeScript client SDKs directly. The old connect() / disconnect() signatures are preserved as backward-compatible wrappers, but callers should migrate to the new layered API.
Connection API (both SDKs)
| Before (1.0.x) | After (1.1.0) | Notes |
|---|---|---|
connect(auth?, uri?, timeout?) → void |
connect(credential?, { uri?, timeout? }) → ConnectResult |
Now returns full user identity (userId, organizations, apps, teams). The auth param is renamed credential to reflect that it accepts API keys, Zitadel access tokens, and rr_* user tokens. Old positional auth/uri kwargs still accepted but deprecated. |
disconnect() → void |
disconnect() → void |
Signature unchanged; internally calls logout() + detach(). |
| (not available) | attach(uri?) → void |
Opens the WebSocket without authenticating. Required for public/unauthenticated operations like catalog browsing. |
| (not available) | login(credential?) → ConnectResult |
Sends the DAP auth command over an attached transport. Supports credential rotation (auto-logout if credential differs). |
| (not available) | logout() → void |
Sends new deauth DAP command, reverts the connection to unauthenticated without closing the socket. |
| (not available) | detach() → void |
Tears down the WebSocket and cancels the reconnect engine. |
isConnected() |
isConnected() (unchanged) |
Returns true only when both attached and authenticated. |
| (not available) | isAttached() |
true when the WebSocket is open, regardless of auth state. |
| (not available) | isAuthenticated() |
true when the auth handshake has succeeded on the current connection. |
Reconnection engine rewritten: the old flag soup (_manualDisconnect, _authRejected, _didNotifyConnected) is replaced by a _desiredState model ('detached' | 'attached' | 'authenticated'). Linear backoff (250ms increments, 15s cap) replaces exponential backoff, reconnection now never gives up. maxRetryTime is accepted for backward compatibility but ignored.
Python-specific breaking changes
async withcontext manager removed:__aenter__/__aexit__are deleted. Replaceasync with RocketRideClient(...) as client:with explicitawait client.connect()/await client.disconnect()in a try/finally.connect()now returnsConnectResult: previously returnedNone. Callers that didawait client.connect()without capturing the result are unaffected; callers that typed the return asNonewill need to update.use()no longer substitutes${ROCKETRIDE_*}client-side: the raw pipeline is sent to the server, which handles all variable resolution viaget_merged_env(). If you were relying on client-side.envinterpolation, variables must now be set server-side (via the Variables page orclient.account.set_env()).- Event type renames:
EVENT_STATUS_UPDATE→EVENT_STATUS;EVENT_TASK→ split intoTASK_EVENT,TASK_EVENT_FLOW,TASK_EVENT_RUNNING,TASK_EVENT_BEGIN,TASK_EVENT_END,TASK_EVENT_RESTART. Code that imports the old names will getImportError. authcredential removed from transport layer:TransportWebSocketno longer stores or exposesauth. Auth is exclusively managed by theConnectionMixin/RocketRideClientlayer.
TypeScript-specific breaking changes
connect()signature changed: old:connect(options?: number | { uri?, auth?, timeout? })→void. New:connect(credential?, options?: { uri?, timeout? })→Promise<ConnectResult>. Theauthproperty inside options is removed; pass the credential as the first argument. The numeric-only shorthandconnect(5000)is removed.DataPipeerrors changed fromErrortoPipeException:open(),write(), andclose()now throwPipeException(extendsError) instead of plainErrorwhen the server reports a failure. Callers catchingErrorare still compatible; callers matching on error message strings may need to update.PipeExceptioncarries the full DAP response body.setConnectionParams()removed: uselogin(credential, { uri })or callattach(newUri)+login()instead.- Project store methods removed:
saveProject(),getProject(),deleteProject(),getAllProjects()are deleted. Use the new filesystem API:fsOpen(),fsRead(),fsWrite(),fsClose(),fsDelete(),fsListDir(),fsMkdir(),fsRmdir(),fsStat(),fsRename(),fsReadString(),fsWriteString(),fsReadJson(),fsWriteJson(). validate()return type changed: previously returnedRecord<string, unknown>. Now returnsValidationResult(typed interface withvalid,errors,warningsfields).getServices()return type changed: previously returnedRecord<string, unknown>. Now returnsServicesResponse(typed interface).
Both SDKs: new exception types
PipeException(Python: subclass ofRuntimeError; TypeScript: subclass ofError): thrown byDataPipe.open(),.write(),.close()when the server reports failure. Carries the full DAP response includingmessage,body, and error code. Replaces genericRuntimeError/Error.ConnectionException(TypeScript): thrown on transport-level failures.
Added
New Nodes
- Exa Search: semantic web search node integrating with the Exa API (exa.ai) for real-time data enrichment in pipelines. Agents invoke the tool to search the web and retrieve structured results including titles, URLs, text content, relevance scores, and published dates. Includes configurable
numResultswith min/max validation, retry exception sanitization to prevent API key leakage, and defensive boolean config parsing (#386, #509) - Bland AI: voice call tool node for AI-driven phone calls via the Bland AI platform (#521)
- OpenAI Compatible: generic LLM node supporting any OpenAI-compatible API endpoint, allowing connection to self-hosted or third-party inference servers that follow the OpenAI chat completions API (#518)
- GMI Cloud: LLM connector for GMI Cloud inference platform (api.gmi-serving.com) hosting 100+ models on H100/H200 GPUs. Two tiers: shared (always-on, key-only: DeepSeek, GPT, Claude, Gemini) and deploy-on-demand (endpoint URL + key: Llama 4, Qwen3). Custom profile for arbitrary model/endpoint combinations (#540)
- Guardrails: AI safety node with comprehensive input/output validation. Input: prompt injection detection (regex + keyword scoring), topic restriction (allowed/blocked keyword lists), input length enforcement (char + token limits). Output: hallucination detection (sentence-level grounding), content safety (self-harm, violence, illegal activity patterns), PII leak detection (email, phone, SSN, credit card, IP), format compliance (JSON, markdown, bullet/numbered lists). Policy modes: block/warn/log. Profiles: basic (injection + PII), strict (all checks), custom. 87 tests (#534)
- Video Embedding: extracts frames from video input (MP4, AVI, MOV, WebM) at configurable intervals and generates vector embeddings using CLIP/ViT models for semantic search and RAG pipelines. Configurable frame interval, max frames, start time, duration, and max video file size (default 500 MB) to prevent unbounded memory. VideoCapture resource leak fixed with finally block (#516)
- Kokoro TTS: self-contained text-to-speech node using the Kokoro engine. Slim requirements (no piper/transformers/cloud). KokoroLoader, spacy_en_model, wav_to_mp3 utilities. Supports question, answer, and document lanes (RR-411, #662)
- Telegram Bot: source node connecting a Telegram bot to a pipeline via long polling or webhook. Routes incoming messages to appropriate lanes by content type (text, image, audio, video, documents) and sends pipeline responses back as replies (#659)
- GitHub Tool: tool node for GitHub API operations (issues, PRs, repositories) with full test suite for tool calling (#640)
- Git Tool: self-contained Git operations using pygit2 (libgit2), no host git binary required. Capabilities: clone, init, status, log, show, diff, blame, file_at, ls_files, grep, stage, commit, stash, branch create/checkout/merge/delete, fetch, pull, push (token + SSH auth), write_file with path-traversal guard. Safe mode (default on) blocks force-push and force branch deletion. Full unit test suite + integration tests (activated via
GIT_TEST_REPO_PATHenv). Includesgit_agent_example.pipe(#654, #731) - Filesystem Tool: file system operations (read, write, list, mkdir, delete) with path whitelist security check via
_prepare()method. Operations can be selectively enabled/disabled at the node level. Shared prologue extraction via keyword flags (path_required, needs_encoding, needs_content) (#682) - Pipeline Tool: run pipelines as tool calls from other pipelines, enabling pipeline composition and hierarchical agent workflows (#647)
- LLM Vision (Gemini): image understanding via Gemini models with cache management (non-symmetric cache + empty frame guard)
- LLM Vision (OpenAI): image understanding via OpenAI vision models
- Webhook: question lane support for webhook-triggered pipelines (#431)
- CrewAI Orchestrator: multi-agent orchestration via CrewAI framework. Exposes expert config fields (goal, backstory, expected_output, max_iter) for both agent and orchestrator node types. Advanced mode for fine-grained control. Sub-agent config propagated through
crewai.describe(). Manager node renamed from Orchestrator, tool invoke removed from manager (#608)
VS Code Extension
- Engine management overhaul: replaced scattered engine lifecycle code (connection/, deploy/) with a clean
EngineBackendhierarchy undersrc/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
RocketRide Server v3.3.1
⚠ Breaking Changes: Client SDKs (rocketride / rocketride-python)
These changes affect code that imports and calls the Python or TypeScript client SDKs directly. The old connect() / disconnect() signatures are preserved as backward-compatible wrappers, but callers should migrate to the new layered API.
Connection API (both SDKs)
| Before (1.0.x) | After (1.1.0) | Notes |
|---|---|---|
connect(auth?, uri?, timeout?) → void |
connect(credential?, { uri?, timeout? }) → ConnectResult |
Now returns full user identity (userId, organizations, apps, teams). The auth param is renamed credential to reflect that it accepts API keys, Zitadel access tokens, and rr_* user tokens. Old positional auth/uri kwargs still accepted but deprecated. |
disconnect() → void |
disconnect() → void |
Signature unchanged; internally calls logout() + detach(). |
| (not available) | attach(uri?) → void |
Opens the WebSocket without authenticating. Required for public/unauthenticated operations like catalog browsing. |
| (not available) | login(credential?) → ConnectResult |
Sends the DAP auth command over an attached transport. Supports credential rotation (auto-logout if credential differs). |
| (not available) | logout() → void |
Sends new deauth DAP command, reverts the connection to unauthenticated without closing the socket. |
| (not available) | detach() → void |
Tears down the WebSocket and cancels the reconnect engine. |
isConnected() |
isConnected() (unchanged) |
Returns true only when both attached and authenticated. |
| (not available) | isAttached() |
true when the WebSocket is open, regardless of auth state. |
| (not available) | isAuthenticated() |
true when the auth handshake has succeeded on the current connection. |
Reconnection engine rewritten: the old flag soup (_manualDisconnect, _authRejected, _didNotifyConnected) is replaced by a _desiredState model ('detached' | 'attached' | 'authenticated'). Linear backoff (250ms increments, 15s cap) replaces exponential backoff, reconnection now never gives up. maxRetryTime is accepted for backward compatibility but ignored.
Python-specific breaking changes
async withcontext manager removed:__aenter__/__aexit__are deleted. Replaceasync with RocketRideClient(...) as client:with explicitawait client.connect()/await client.disconnect()in a try/finally.connect()now returnsConnectResult: previously returnedNone. Callers that didawait client.connect()without capturing the result are unaffected; callers that typed the return asNonewill need to update.use()no longer substitutes${ROCKETRIDE_*}client-side: the raw pipeline is sent to the server, which handles all variable resolution viaget_merged_env(). If you were relying on client-side.envinterpolation, variables must now be set server-side (via the Variables page orclient.account.set_env()).- Event type renames:
EVENT_STATUS_UPDATE→EVENT_STATUS;EVENT_TASK→ split intoTASK_EVENT,TASK_EVENT_FLOW,TASK_EVENT_RUNNING,TASK_EVENT_BEGIN,TASK_EVENT_END,TASK_EVENT_RESTART. Code that imports the old names will getImportError. authcredential removed from transport layer:TransportWebSocketno longer stores or exposesauth. Auth is exclusively managed by theConnectionMixin/RocketRideClientlayer.
TypeScript-specific breaking changes
connect()signature changed: old:connect(options?: number | { uri?, auth?, timeout? })→void. New:connect(credential?, options?: { uri?, timeout? })→Promise<ConnectResult>. Theauthproperty inside options is removed; pass the credential as the first argument. The numeric-only shorthandconnect(5000)is removed.DataPipeerrors changed fromErrortoPipeException:open(),write(), andclose()now throwPipeException(extendsError) instead of plainErrorwhen the server reports a failure. Callers catchingErrorare still compatible; callers matching on error message strings may need to update.PipeExceptioncarries the full DAP response body.setConnectionParams()removed: uselogin(credential, { uri })or callattach(newUri)+login()instead.- Project store methods removed:
saveProject(),getProject(),deleteProject(),getAllProjects()are deleted. Use the new filesystem API:fsOpen(),fsRead(),fsWrite(),fsClose(),fsDelete(),fsListDir(),fsMkdir(),fsRmdir(),fsStat(),fsRename(),fsReadString(),fsWriteString(),fsReadJson(),fsWriteJson(). validate()return type changed: previously returnedRecord<string, unknown>. Now returnsValidationResult(typed interface withvalid,errors,warningsfields).getServices()return type changed: previously returnedRecord<string, unknown>. Now returnsServicesResponse(typed interface).
Both SDKs: new exception types
PipeException(Python: subclass ofRuntimeError; TypeScript: subclass ofError): thrown byDataPipe.open(),.write(),.close()when the server reports failure. Carries the full DAP response includingmessage,body, and error code. Replaces genericRuntimeError/Error.ConnectionException(TypeScript): thrown on transport-level failures.
Added
New Nodes
- Exa Search: semantic web search node integrating with the Exa API (exa.ai) for real-time data enrichment in pipelines. Agents invoke the tool to search the web and retrieve structured results including titles, URLs, text content, relevance scores, and published dates. Includes configurable
numResultswith min/max validation, retry exception sanitization to prevent API key leakage, and defensive boolean config parsing (#386, #509) - Bland AI: voice call tool node for AI-driven phone calls via the Bland AI platform (#521)
- OpenAI Compatible: generic LLM node supporting any OpenAI-compatible API endpoint, allowing connection to self-hosted or third-party inference servers that follow the OpenAI chat completions API (#518)
- GMI Cloud: LLM connector for GMI Cloud inference platform (api.gmi-serving.com) hosting 100+ models on H100/H200 GPUs. Two tiers: shared (always-on, key-only: DeepSeek, GPT, Claude, Gemini) and deploy-on-demand (endpoint URL + key: Llama 4, Qwen3). Custom profile for arbitrary model/endpoint combinations (#540)
- Guardrails: AI safety node with comprehensive input/output validation. Input: prompt injection detection (regex + keyword scoring), topic restriction (allowed/blocked keyword lists), input length enforcement (char + token limits). Output: hallucination detection (sentence-level grounding), content safety (self-harm, violence, illegal activity patterns), PII leak detection (email, phone, SSN, credit card, IP), format compliance (JSON, markdown, bullet/numbered lists). Policy modes: block/warn/log. Profiles: basic (injection + PII), strict (all checks), custom. 87 tests (#534)
- Video Embedding: extracts frames from video input (MP4, AVI, MOV, WebM) at configurable intervals and generates vector embeddings using CLIP/ViT models for semantic search and RAG pipelines. Configurable frame interval, max frames, start time, duration, and max video file size (default 500 MB) to prevent unbounded memory. VideoCapture resource leak fixed with finally block (#516)
- Kokoro TTS: self-contained text-to-speech node using the Kokoro engine. Slim requirements (no piper/transformers/cloud). KokoroLoader, spacy_en_model, wav_to_mp3 utilities. Supports question, answer, and document lanes (RR-411, #662)
- Telegram Bot: source node connecting a Telegram bot to a pipeline via long polling or webhook. Routes incoming messages to appropriate lanes by content type (text, image, audio, video, documents) and sends pipeline responses back as replies (#659)
- GitHub Tool: tool node for GitHub API operations (issues, PRs, repositories) with full test suite for tool calling (#640)
- Git Tool: self-contained Git operations using pygit2 (libgit2), no host git binary required. Capabilities: clone, init, status, log, show, diff, blame, file_at, ls_files, grep, stage, commit, stash, branch create/checkout/merge/delete, fetch, pull, push (token + SSH auth), write_file with path-traversal guard. Safe mode (default on) blocks force-push and force branch deletion. Full unit test suite + integration tests (activated via
GIT_TEST_REPO_PATHenv). Includesgit_agent_example.pipe(#654, #731) - Filesystem Tool: file system operations (read, write, list, mkdir, delete) with path whitelist security check via
_prepare()method. Operations can be selectively enabled/disabled at the node level. Shared prologue extraction via keyword flags (path_required, needs_encoding, needs_content) (#682) - Pipeline Tool: run pipelines as tool calls from other pipelines, enabling pipeline composition and hierarchical agent workflows (#647)
- LLM Vision (Gemini): image understanding via Gemini models with cache management (non-symmetric cache + empty frame guard)
- LLM Vision (OpenAI): image understanding via OpenAI vision models
- Webhook: question lane support for webhook-triggered pipelines (#431)
- CrewAI Orchestrator: multi-agent orchestration via CrewAI framework. Exposes expert config fields (goal, backstory, expected_output, max_iter) for both agent and orchestrator node types. Advanced mode for fine-grained control. Sub-agent config propagated through
crewai.describe(). Manager node renamed from Orchestrator, tool invoke removed from manager (#608)
VS Code Extension
- Engine management overhaul: replaced scattered engine lifecycle code (connection/, deploy/) with a clean
EngineBackendhierarchy undersrc/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
RocketRide Server v3.3.0
⚠ Breaking Changes: Client SDKs (rocketride / rocketride-python)
These changes affect code that imports and calls the Python or TypeScript client SDKs directly. The old connect() / disconnect() signatures are preserved as backward-compatible wrappers, but callers should migrate to the new layered API.
Connection API (both SDKs)
| Before (1.0.x) | After (1.1.0) | Notes |
|---|---|---|
connect(auth?, uri?, timeout?) → void |
connect(credential?, { uri?, timeout? }) → ConnectResult |
Now returns full user identity (userId, organizations, apps, teams). The auth param is renamed credential to reflect that it accepts API keys, Zitadel access tokens, and rr_* user tokens. Old positional auth/uri kwargs still accepted but deprecated. |
disconnect() → void |
disconnect() → void |
Signature unchanged; internally calls logout() + detach(). |
| (not available) | attach(uri?) → void |
Opens the WebSocket without authenticating. Required for public/unauthenticated operations like catalog browsing. |
| (not available) | login(credential?) → ConnectResult |
Sends the DAP auth command over an attached transport. Supports credential rotation (auto-logout if credential differs). |
| (not available) | logout() → void |
Sends new deauth DAP command, reverts the connection to unauthenticated without closing the socket. |
| (not available) | detach() → void |
Tears down the WebSocket and cancels the reconnect engine. |
isConnected() |
isConnected() (unchanged) |
Returns true only when both attached and authenticated. |
| (not available) | isAttached() |
true when the WebSocket is open, regardless of auth state. |
| (not available) | isAuthenticated() |
true when the auth handshake has succeeded on the current connection. |
Reconnection engine rewritten: the old flag soup (_manualDisconnect, _authRejected, _didNotifyConnected) is replaced by a _desiredState model ('detached' | 'attached' | 'authenticated'). Linear backoff (250ms increments, 15s cap) replaces exponential backoff, reconnection now never gives up. maxRetryTime is accepted for backward compatibility but ignored.
Python-specific breaking changes
async withcontext manager removed:__aenter__/__aexit__are deleted. Replaceasync with RocketRideClient(...) as client:with explicitawait client.connect()/await client.disconnect()in a try/finally.connect()now returnsConnectResult: previously returnedNone. Callers that didawait client.connect()without capturing the result are unaffected; callers that typed the return asNonewill need to update.use()no longer substitutes${ROCKETRIDE_*}client-side: the raw pipeline is sent to the server, which handles all variable resolution viaget_merged_env(). If you were relying on client-side.envinterpolation, variables must now be set server-side (via the Variables page orclient.account.set_env()).- Event type renames:
EVENT_STATUS_UPDATE→EVENT_STATUS;EVENT_TASK→ split intoTASK_EVENT,TASK_EVENT_FLOW,TASK_EVENT_RUNNING,TASK_EVENT_BEGIN,TASK_EVENT_END,TASK_EVENT_RESTART. Code that imports the old names will getImportError. authcredential removed from transport layer:TransportWebSocketno longer stores or exposesauth. Auth is exclusively managed by theConnectionMixin/RocketRideClientlayer.
TypeScript-specific breaking changes
connect()signature changed: old:connect(options?: number | { uri?, auth?, timeout? })→void. New:connect(credential?, options?: { uri?, timeout? })→Promise<ConnectResult>. Theauthproperty inside options is removed; pass the credential as the first argument. The numeric-only shorthandconnect(5000)is removed.DataPipeerrors changed fromErrortoPipeException:open(),write(), andclose()now throwPipeException(extendsError) instead of plainErrorwhen the server reports a failure. Callers catchingErrorare still compatible; callers matching on error message strings may need to update.PipeExceptioncarries the full DAP response body.setConnectionParams()removed: uselogin(credential, { uri })or callattach(newUri)+login()instead.- Project store methods removed:
saveProject(),getProject(),deleteProject(),getAllProjects()are deleted. Use the new filesystem API:fsOpen(),fsRead(),fsWrite(),fsClose(),fsDelete(),fsListDir(),fsMkdir(),fsRmdir(),fsStat(),fsRename(),fsReadString(),fsWriteString(),fsReadJson(),fsWriteJson(). validate()return type changed: previously returnedRecord<string, unknown>. Now returnsValidationResult(typed interface withvalid,errors,warningsfields).getServices()return type changed: previously returnedRecord<string, unknown>. Now returnsServicesResponse(typed interface).
Both SDKs: new exception types
PipeException(Python: subclass ofRuntimeError; TypeScript: subclass ofError): thrown byDataPipe.open(),.write(),.close()when the server reports failure. Carries the full DAP response includingmessage,body, and error code. Replaces genericRuntimeError/Error.ConnectionException(TypeScript): thrown on transport-level failures.
Added
New Nodes
- Exa Search: semantic web search node integrating with the Exa API (exa.ai) for real-time data enrichment in pipelines. Agents invoke the tool to search the web and retrieve structured results including titles, URLs, text content, relevance scores, and published dates. Includes configurable
numResultswith min/max validation, retry exception sanitization to prevent API key leakage, and defensive boolean config parsing (#386, #509) - Bland AI: voice call tool node for AI-driven phone calls via the Bland AI platform (#521)
- OpenAI Compatible: generic LLM node supporting any OpenAI-compatible API endpoint, allowing connection to self-hosted or third-party inference servers that follow the OpenAI chat completions API (#518)
- GMI Cloud: LLM connector for GMI Cloud inference platform (api.gmi-serving.com) hosting 100+ models on H100/H200 GPUs. Two tiers: shared (always-on, key-only: DeepSeek, GPT, Claude, Gemini) and deploy-on-demand (endpoint URL + key: Llama 4, Qwen3). Custom profile for arbitrary model/endpoint combinations (#540)
- Guardrails: AI safety node with comprehensive input/output validation. Input: prompt injection detection (regex + keyword scoring), topic restriction (allowed/blocked keyword lists), input length enforcement (char + token limits). Output: hallucination detection (sentence-level grounding), content safety (self-harm, violence, illegal activity patterns), PII leak detection (email, phone, SSN, credit card, IP), format compliance (JSON, markdown, bullet/numbered lists). Policy modes: block/warn/log. Profiles: basic (injection + PII), strict (all checks), custom. 87 tests (#534)
- Video Embedding: extracts frames from video input (MP4, AVI, MOV, WebM) at configurable intervals and generates vector embeddings using CLIP/ViT models for semantic search and RAG pipelines. Configurable frame interval, max frames, start time, duration, and max video file size (default 500 MB) to prevent unbounded memory. VideoCapture resource leak fixed with finally block (#516)
- Kokoro TTS: self-contained text-to-speech node using the Kokoro engine. Slim requirements (no piper/transformers/cloud). KokoroLoader, spacy_en_model, wav_to_mp3 utilities. Supports question, answer, and document lanes (RR-411, #662)
- Telegram Bot: source node connecting a Telegram bot to a pipeline via long polling or webhook. Routes incoming messages to appropriate lanes by content type (text, image, audio, video, documents) and sends pipeline responses back as replies (#659)
- GitHub Tool: tool node for GitHub API operations (issues, PRs, repositories) with full test suite for tool calling (#640)
- Git Tool: self-contained Git operations using pygit2 (libgit2), no host git binary required. Capabilities: clone, init, status, log, show, diff, blame, file_at, ls_files, grep, stage, commit, stash, branch create/checkout/merge/delete, fetch, pull, push (token + SSH auth), write_file with path-traversal guard. Safe mode (default on) blocks force-push and force branch deletion. Full unit test suite + integration tests (activated via
GIT_TEST_REPO_PATHenv). Includesgit_agent_example.pipe(#654, #731) - Filesystem Tool: file system operations (read, write, list, mkdir, delete) with path whitelist security check via
_prepare()method. Operations can be selectively enabled/disabled at the node level. Shared prologue extraction via keyword flags (path_required, needs_encoding, needs_content) (#682) - Pipeline Tool: run pipelines as tool calls from other pipelines, enabling pipeline composition and hierarchical agent workflows (#647)
- LLM Vision (Gemini): image understanding via Gemini models with cache management (non-symmetric cache + empty frame guard)
- LLM Vision (OpenAI): image understanding via OpenAI vision models
- Webhook: question lane support for webhook-triggered pipelines (#431)
- CrewAI Orchestrator: multi-agent orchestration via CrewAI framework. Exposes expert config fields (goal, backstory, expected_output, max_iter) for both agent and orchestrator node types. Advanced mode for fine-grained control. Sub-agent config propagated through
crewai.describe(). Manager node renamed from Orchestrator, tool invoke removed from manager (#608)
VS Code Extension
- Engine management overhaul: replaced scattered engine lifecycle code (connection/, deploy/) with a clean
EngineBackendhierarchy undersrc/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
RocketRide TypeScript Client v1.3.0
⚠ Breaking Changes: Client SDKs (rocketride / rocketride-python)
These changes affect code that imports and calls the Python or TypeScript client SDKs directly. The old connect() / disconnect() signatures are preserved as backward-compatible wrappers, but callers should migrate to the new layered API.
Connection API (both SDKs)
| Before (1.0.x) | After (1.1.0) | Notes |
|---|---|---|
connect(auth?, uri?, timeout?) → void |
connect(credential?, { uri?, timeout? }) → ConnectResult |
Now returns full user identity (userId, organizations, apps, teams). The auth param is renamed credential to reflect that it accepts API keys, Zitadel access tokens, and rr_* user tokens. Old positional auth/uri kwargs still accepted but deprecated. |
disconnect() → void |
disconnect() → void |
Signature unchanged; internally calls logout() + detach(). |
| (not available) | attach(uri?) → void |
Opens the WebSocket without authenticating. Required for public/unauthenticated operations like catalog browsing. |
| (not available) | login(credential?) → ConnectResult |
Sends the DAP auth command over an attached transport. Supports credential rotation (auto-logout if credential differs). |
| (not available) | logout() → void |
Sends new deauth DAP command, reverts the connection to unauthenticated without closing the socket. |
| (not available) | detach() → void |
Tears down the WebSocket and cancels the reconnect engine. |
isConnected() |
isConnected() (unchanged) |
Returns true only when both attached and authenticated. |
| (not available) | isAttached() |
true when the WebSocket is open, regardless of auth state. |
| (not available) | isAuthenticated() |
true when the auth handshake has succeeded on the current connection. |
Reconnection engine rewritten: the old flag soup (_manualDisconnect, _authRejected, _didNotifyConnected) is replaced by a _desiredState model ('detached' | 'attached' | 'authenticated'). Linear backoff (250ms increments, 15s cap) replaces exponential backoff, reconnection now never gives up. maxRetryTime is accepted for backward compatibility but ignored.
Python-specific breaking changes
async withcontext manager removed:__aenter__/__aexit__are deleted. Replaceasync with RocketRideClient(...) as client:with explicitawait client.connect()/await client.disconnect()in a try/finally.connect()now returnsConnectResult: previously returnedNone. Callers that didawait client.connect()without capturing the result are unaffected; callers that typed the return asNonewill need to update.use()no longer substitutes${ROCKETRIDE_*}client-side: the raw pipeline is sent to the server, which handles all variable resolution viaget_merged_env(). If you were relying on client-side.envinterpolation, variables must now be set server-side (via the Variables page orclient.account.set_env()).- Event type renames:
EVENT_STATUS_UPDATE→EVENT_STATUS;EVENT_TASK→ split intoTASK_EVENT,TASK_EVENT_FLOW,TASK_EVENT_RUNNING,TASK_EVENT_BEGIN,TASK_EVENT_END,TASK_EVENT_RESTART. Code that imports the old names will getImportError. authcredential removed from transport layer:TransportWebSocketno longer stores or exposesauth. Auth is exclusively managed by theConnectionMixin/RocketRideClientlayer.
TypeScript-specific breaking changes
connect()signature changed: old:connect(options?: number | { uri?, auth?, timeout? })→void. New:connect(credential?, options?: { uri?, timeout? })→Promise<ConnectResult>. Theauthproperty inside options is removed; pass the credential as the first argument. The numeric-only shorthandconnect(5000)is removed.DataPipeerrors changed fromErrortoPipeException:open(),write(), andclose()now throwPipeException(extendsError) instead of plainErrorwhen the server reports a failure. Callers catchingErrorare still compatible; callers matching on error message strings may need to update.PipeExceptioncarries the full DAP response body.setConnectionParams()removed: uselogin(credential, { uri })or callattach(newUri)+login()instead.- Project store methods removed:
saveProject(),getProject(),deleteProject(),getAllProjects()are deleted. Use the new filesystem API:fsOpen(),fsRead(),fsWrite(),fsClose(),fsDelete(),fsListDir(),fsMkdir(),fsRmdir(),fsStat(),fsRename(),fsReadString(),fsWriteString(),fsReadJson(),fsWriteJson(). validate()return type changed: previously returnedRecord<string, unknown>. Now returnsValidationResult(typed interface withvalid,errors,warningsfields).getServices()return type changed: previously returnedRecord<string, unknown>. Now returnsServicesResponse(typed interface).
Both SDKs: new exception types
PipeException(Python: subclass ofRuntimeError; TypeScript: subclass ofError): thrown byDataPipe.open(),.write(),.close()when the server reports failure. Carries the full DAP response includingmessage,body, and error code. Replaces genericRuntimeError/Error.ConnectionException(TypeScript): thrown on transport-level failures.
Added
New Nodes
- Exa Search: semantic web search node integrating with the Exa API (exa.ai) for real-time data enrichment in pipelines. Agents invoke the tool to search the web and retrieve structured results including titles, URLs, text content, relevance scores, and published dates. Includes configurable
numResultswith min/max validation, retry exception sanitization to prevent API key leakage, and defensive boolean config parsing (#386, #509) - Bland AI: voice call tool node for AI-driven phone calls via the Bland AI platform (#521)
- OpenAI Compatible: generic LLM node supporting any OpenAI-compatible API endpoint, allowing connection to self-hosted or third-party inference servers that follow the OpenAI chat completions API (#518)
- GMI Cloud: LLM connector for GMI Cloud inference platform (api.gmi-serving.com) hosting 100+ models on H100/H200 GPUs. Two tiers: shared (always-on, key-only: DeepSeek, GPT, Claude, Gemini) and deploy-on-demand (endpoint URL + key: Llama 4, Qwen3). Custom profile for arbitrary model/endpoint combinations (#540)
- Guardrails: AI safety node with comprehensive input/output validation. Input: prompt injection detection (regex + keyword scoring), topic restriction (allowed/blocked keyword lists), input length enforcement (char + token limits). Output: hallucination detection (sentence-level grounding), content safety (self-harm, violence, illegal activity patterns), PII leak detection (email, phone, SSN, credit card, IP), format compliance (JSON, markdown, bullet/numbered lists). Policy modes: block/warn/log. Profiles: basic (injection + PII), strict (all checks), custom. 87 tests (#534)
- Video Embedding: extracts frames from video input (MP4, AVI, MOV, WebM) at configurable intervals and generates vector embeddings using CLIP/ViT models for semantic search and RAG pipelines. Configurable frame interval, max frames, start time, duration, and max video file size (default 500 MB) to prevent unbounded memory. VideoCapture resource leak fixed with finally block (#516)
- Kokoro TTS: self-contained text-to-speech node using the Kokoro engine. Slim requirements (no piper/transformers/cloud). KokoroLoader, spacy_en_model, wav_to_mp3 utilities. Supports question, answer, and document lanes (RR-411, #662)
- Telegram Bot: source node connecting a Telegram bot to a pipeline via long polling or webhook. Routes incoming messages to appropriate lanes by content type (text, image, audio, video, documents) and sends pipeline responses back as replies (#659)
- GitHub Tool: tool node for GitHub API operations (issues, PRs, repositories) with full test suite for tool calling (#640)
- Git Tool: self-contained Git operations using pygit2 (libgit2), no host git binary required. Capabilities: clone, init, status, log, show, diff, blame, file_at, ls_files, grep, stage, commit, stash, branch create/checkout/merge/delete, fetch, pull, push (token + SSH auth), write_file with path-traversal guard. Safe mode (default on) blocks force-push and force branch deletion. Full unit test suite + integration tests (activated via
GIT_TEST_REPO_PATHenv). Includesgit_agent_example.pipe(#654, #731) - Filesystem Tool: file system operations (read, write, list, mkdir, delete) with path whitelist security check via
_prepare()method. Operations can be selectively enabled/disabled at the node level. Shared prologue extraction via keyword flags (path_required, needs_encoding, needs_content) (#682) - Pipeline Tool: run pipelines as tool calls from other pipelines, enabling pipeline composition and hierarchical agent workflows (#647)
- LLM Vision (Gemini): image understanding via Gemini models with cache management (non-symmetric cache + empty frame guard)
- LLM Vision (OpenAI): image understanding via OpenAI vision models
- Webhook: question lane support for webhook-triggered pipelines (#431)
- CrewAI Orchestrator: multi-agent orchestration via CrewAI framework. Exposes expert config fields (goal, backstory, expected_output, max_iter) for both agent and orchestrator node types. Advanced mode for fine-grained control. Sub-agent config propagated through
crewai.describe(). Manager node renamed from Orchestrator, tool invoke removed from manager (#608)
VS Code Extension
- Engine management overhaul: replaced scattered engine lifecycle code (connection/, deploy/) with a clean
EngineBackendhierarchy undersrc/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
RocketRide Python Client v1.3.0
⚠ Breaking Changes: Client SDKs (rocketride / rocketride-python)
These changes affect code that imports and calls the Python or TypeScript client SDKs directly. The old connect() / disconnect() signatures are preserved as backward-compatible wrappers, but callers should migrate to the new layered API.
Connection API (both SDKs)
| Before (1.0.x) | After (1.1.0) | Notes |
|---|---|---|
connect(auth?, uri?, timeout?) → void |
connect(credential?, { uri?, timeout? }) → ConnectResult |
Now returns full user identity (userId, organizations, apps, teams). The auth param is renamed credential to reflect that it accepts API keys, Zitadel access tokens, and rr_* user tokens. Old positional auth/uri kwargs still accepted but deprecated. |
disconnect() → void |
disconnect() → void |
Signature unchanged; internally calls logout() + detach(). |
| (not available) | attach(uri?) → void |
Opens the WebSocket without authenticating. Required for public/unauthenticated operations like catalog browsing. |
| (not available) | login(credential?) → ConnectResult |
Sends the DAP auth command over an attached transport. Supports credential rotation (auto-logout if credential differs). |
| (not available) | logout() → void |
Sends new deauth DAP command, reverts the connection to unauthenticated without closing the socket. |
| (not available) | detach() → void |
Tears down the WebSocket and cancels the reconnect engine. |
isConnected() |
isConnected() (unchanged) |
Returns true only when both attached and authenticated. |
| (not available) | isAttached() |
true when the WebSocket is open, regardless of auth state. |
| (not available) | isAuthenticated() |
true when the auth handshake has succeeded on the current connection. |
Reconnection engine rewritten: the old flag soup (_manualDisconnect, _authRejected, _didNotifyConnected) is replaced by a _desiredState model ('detached' | 'attached' | 'authenticated'). Linear backoff (250ms increments, 15s cap) replaces exponential backoff, reconnection now never gives up. maxRetryTime is accepted for backward compatibility but ignored.
Python-specific breaking changes
async withcontext manager removed:__aenter__/__aexit__are deleted. Replaceasync with RocketRideClient(...) as client:with explicitawait client.connect()/await client.disconnect()in a try/finally.connect()now returnsConnectResult: previously returnedNone. Callers that didawait client.connect()without capturing the result are unaffected; callers that typed the return asNonewill need to update.use()no longer substitutes${ROCKETRIDE_*}client-side: the raw pipeline is sent to the server, which handles all variable resolution viaget_merged_env(). If you were relying on client-side.envinterpolation, variables must now be set server-side (via the Variables page orclient.account.set_env()).- Event type renames:
EVENT_STATUS_UPDATE→EVENT_STATUS;EVENT_TASK→ split intoTASK_EVENT,TASK_EVENT_FLOW,TASK_EVENT_RUNNING,TASK_EVENT_BEGIN,TASK_EVENT_END,TASK_EVENT_RESTART. Code that imports the old names will getImportError. authcredential removed from transport layer:TransportWebSocketno longer stores or exposesauth. Auth is exclusively managed by theConnectionMixin/RocketRideClientlayer.
TypeScript-specific breaking changes
connect()signature changed: old:connect(options?: number | { uri?, auth?, timeout? })→void. New:connect(credential?, options?: { uri?, timeout? })→Promise<ConnectResult>. Theauthproperty inside options is removed; pass the credential as the first argument. The numeric-only shorthandconnect(5000)is removed.DataPipeerrors changed fromErrortoPipeException:open(),write(), andclose()now throwPipeException(extendsError) instead of plainErrorwhen the server reports a failure. Callers catchingErrorare still compatible; callers matching on error message strings may need to update.PipeExceptioncarries the full DAP response body.setConnectionParams()removed: uselogin(credential, { uri })or callattach(newUri)+login()instead.- Project store methods removed:
saveProject(),getProject(),deleteProject(),getAllProjects()are deleted. Use the new filesystem API:fsOpen(),fsRead(),fsWrite(),fsClose(),fsDelete(),fsListDir(),fsMkdir(),fsRmdir(),fsStat(),fsRename(),fsReadString(),fsWriteString(),fsReadJson(),fsWriteJson(). validate()return type changed: previously returnedRecord<string, unknown>. Now returnsValidationResult(typed interface withvalid,errors,warningsfields).getServices()return type changed: previously returnedRecord<string, unknown>. Now returnsServicesResponse(typed interface).
Both SDKs: new exception types
PipeException(Python: subclass ofRuntimeError; TypeScript: subclass ofError): thrown byDataPipe.open(),.write(),.close()when the server reports failure. Carries the full DAP response includingmessage,body, and error code. Replaces genericRuntimeError/Error.ConnectionException(TypeScript): thrown on transport-level failures.
Added
New Nodes
- Exa Search: semantic web search node integrating with the Exa API (exa.ai) for real-time data enrichment in pipelines. Agents invoke the tool to search the web and retrieve structured results including titles, URLs, text content, relevance scores, and published dates. Includes configurable
numResultswith min/max validation, retry exception sanitization to prevent API key leakage, and defensive boolean config parsing (#386, #509) - Bland AI: voice call tool node for AI-driven phone calls via the Bland AI platform (#521)
- OpenAI Compatible: generic LLM node supporting any OpenAI-compatible API endpoint, allowing connection to self-hosted or third-party inference servers that follow the OpenAI chat completions API (#518)
- GMI Cloud: LLM connector for GMI Cloud inference platform (api.gmi-serving.com) hosting 100+ models on H100/H200 GPUs. Two tiers: shared (always-on, key-only: DeepSeek, GPT, Claude, Gemini) and deploy-on-demand (endpoint URL + key: Llama 4, Qwen3). Custom profile for arbitrary model/endpoint combinations (#540)
- Guardrails: AI safety node with comprehensive input/output validation. Input: prompt injection detection (regex + keyword scoring), topic restriction (allowed/blocked keyword lists), input length enforcement (char + token limits). Output: hallucination detection (sentence-level grounding), content safety (self-harm, violence, illegal activity patterns), PII leak detection (email, phone, SSN, credit card, IP), format compliance (JSON, markdown, bullet/numbered lists). Policy modes: block/warn/log. Profiles: basic (injection + PII), strict (all checks), custom. 87 tests (#534)
- Video Embedding: extracts frames from video input (MP4, AVI, MOV, WebM) at configurable intervals and generates vector embeddings using CLIP/ViT models for semantic search and RAG pipelines. Configurable frame interval, max frames, start time, duration, and max video file size (default 500 MB) to prevent unbounded memory. VideoCapture resource leak fixed with finally block (#516)
- Kokoro TTS: self-contained text-to-speech node using the Kokoro engine. Slim requirements (no piper/transformers/cloud). KokoroLoader, spacy_en_model, wav_to_mp3 utilities. Supports question, answer, and document lanes (RR-411, #662)
- Telegram Bot: source node connecting a Telegram bot to a pipeline via long polling or webhook. Routes incoming messages to appropriate lanes by content type (text, image, audio, video, documents) and sends pipeline responses back as replies (#659)
- GitHub Tool: tool node for GitHub API operations (issues, PRs, repositories) with full test suite for tool calling (#640)
- Git Tool: self-contained Git operations using pygit2 (libgit2), no host git binary required. Capabilities: clone, init, status, log, show, diff, blame, file_at, ls_files, grep, stage, commit, stash, branch create/checkout/merge/delete, fetch, pull, push (token + SSH auth), write_file with path-traversal guard. Safe mode (default on) blocks force-push and force branch deletion. Full unit test suite + integration tests (activated via
GIT_TEST_REPO_PATHenv). Includesgit_agent_example.pipe(#654, #731) - Filesystem Tool: file system operations (read, write, list, mkdir, delete) with path whitelist security check via
_prepare()method. Operations can be selectively enabled/disabled at the node level. Shared prologue extraction via keyword flags (path_required, needs_encoding, needs_content) (#682) - Pipeline Tool: run pipelines as tool calls from other pipelines, enabling pipeline composition and hierarchical agent workflows (#647)
- LLM Vision (Gemini): image understanding via Gemini models with cache management (non-symmetric cache + empty frame guard)
- LLM Vision (OpenAI): image understanding via OpenAI vision models
- Webhook: question lane support for webhook-triggered pipelines (#431)
- CrewAI Orchestrator: multi-agent orchestration via CrewAI framework. Exposes expert config fields (goal, backstory, expected_output, max_iter) for both agent and orchestrator node types. Advanced mode for fine-grained control. Sub-agent config propagated through
crewai.describe(). Manager node renamed from Orchestrator, tool invoke removed from manager (#608)
VS Code Extension
- Engine management overhaul: replaced scattered engine lifecycle code (connection/, deploy/) with a clean
EngineBackendhierarchy undersrc/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...