Skip to content

Releases: rocketride-org/rocketride-server

RocketRide VS Code Extension v1.2.0 (prerelease)

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:06
4a09a43

Automated prerelease from developVS Code Extension v1.2.0.

VS Code Extension v1.2.0

RocketRide Server v3.3.0 (prerelease)

Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:06
4a09a43

Automated prerelease from developServer v3.3.0.

Server v3.3.0

RocketRide TypeScript Client v1.3.0 (prerelease)

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:06
4a09a43

Automated prerelease from developTypeScript Client v1.3.0.

TypeScript Client v1.3.0

RocketRide Python Client v1.3.0 (prerelease)

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:06
4a09a43

Automated prerelease from developPython Client v1.3.0.

Python Client v1.3.0

RocketRide MCP Client v1.2.0 (prerelease)

Choose a tag to compare

@github-actions github-actions released this 18 Jul 21:06
4a09a43

Automated prerelease from developMCP Client v1.2.0.

MCP Client v1.2.0

RocketRide VS Code Extension v1.3.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 03:22
d0d7e3d

⚠ 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 with context manager removed: __aenter__ / __aexit__ are deleted. Replace async with RocketRideClient(...) as client: with explicit await client.connect() / await client.disconnect() in a try/finally.
  • connect() now returns ConnectResult: previously returned None. Callers that did await client.connect() without capturing the result are unaffected; callers that typed the return as None will need to update.
  • use() no longer substitutes ${ROCKETRIDE_*} client-side: the raw pipeline is sent to the server, which handles all variable resolution via get_merged_env(). If you were relying on client-side .env interpolation, variables must now be set server-side (via the Variables page or client.account.set_env()).
  • Event type renames: EVENT_STATUS_UPDATEEVENT_STATUS; EVENT_TASK → split into TASK_EVENT, TASK_EVENT_FLOW, TASK_EVENT_RUNNING, TASK_EVENT_BEGIN, TASK_EVENT_END, TASK_EVENT_RESTART. Code that imports the old names will get ImportError.
  • auth credential removed from transport layer: TransportWebSocket no longer stores or exposes auth. Auth is exclusively managed by the ConnectionMixin / RocketRideClient layer.

TypeScript-specific breaking changes

  • connect() signature changed: old: connect(options?: number | { uri?, auth?, timeout? })void. New: connect(credential?, options?: { uri?, timeout? })Promise<ConnectResult>. The auth property inside options is removed; pass the credential as the first argument. The numeric-only shorthand connect(5000) is removed.
  • DataPipe errors changed from Error to PipeException: open(), write(), and close() now throw PipeException (extends Error) instead of plain Error when the server reports a failure. Callers catching Error are still compatible; callers matching on error message strings may need to update. PipeException carries the full DAP response body.
  • setConnectionParams() removed: use login(credential, { uri }) or call attach(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 returned Record<string, unknown>. Now returns ValidationResult (typed interface with valid, errors, warnings fields).
  • getServices() return type changed: previously returned Record<string, unknown>. Now returns ServicesResponse (typed interface).

Both SDKs: new exception types

  • PipeException (Python: subclass of RuntimeError; TypeScript: subclass of Error): thrown by DataPipe.open(), .write(), .close() when the server reports failure. Carries the full DAP response including message, body, and error code. Replaces generic RuntimeError / 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 numResults with 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_PATH env). Includes git_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 EngineBackend hierarchy under src/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
Read more

RocketRide Server v3.3.1

Choose a tag to compare

@github-actions github-actions released this 07 Jul 05:20
a0817cc

⚠ 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 with context manager removed: __aenter__ / __aexit__ are deleted. Replace async with RocketRideClient(...) as client: with explicit await client.connect() / await client.disconnect() in a try/finally.
  • connect() now returns ConnectResult: previously returned None. Callers that did await client.connect() without capturing the result are unaffected; callers that typed the return as None will need to update.
  • use() no longer substitutes ${ROCKETRIDE_*} client-side: the raw pipeline is sent to the server, which handles all variable resolution via get_merged_env(). If you were relying on client-side .env interpolation, variables must now be set server-side (via the Variables page or client.account.set_env()).
  • Event type renames: EVENT_STATUS_UPDATEEVENT_STATUS; EVENT_TASK → split into TASK_EVENT, TASK_EVENT_FLOW, TASK_EVENT_RUNNING, TASK_EVENT_BEGIN, TASK_EVENT_END, TASK_EVENT_RESTART. Code that imports the old names will get ImportError.
  • auth credential removed from transport layer: TransportWebSocket no longer stores or exposes auth. Auth is exclusively managed by the ConnectionMixin / RocketRideClient layer.

TypeScript-specific breaking changes

  • connect() signature changed: old: connect(options?: number | { uri?, auth?, timeout? })void. New: connect(credential?, options?: { uri?, timeout? })Promise<ConnectResult>. The auth property inside options is removed; pass the credential as the first argument. The numeric-only shorthand connect(5000) is removed.
  • DataPipe errors changed from Error to PipeException: open(), write(), and close() now throw PipeException (extends Error) instead of plain Error when the server reports a failure. Callers catching Error are still compatible; callers matching on error message strings may need to update. PipeException carries the full DAP response body.
  • setConnectionParams() removed: use login(credential, { uri }) or call attach(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 returned Record<string, unknown>. Now returns ValidationResult (typed interface with valid, errors, warnings fields).
  • getServices() return type changed: previously returned Record<string, unknown>. Now returns ServicesResponse (typed interface).

Both SDKs: new exception types

  • PipeException (Python: subclass of RuntimeError; TypeScript: subclass of Error): thrown by DataPipe.open(), .write(), .close() when the server reports failure. Carries the full DAP response including message, body, and error code. Replaces generic RuntimeError / 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 numResults with 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_PATH env). Includes git_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 EngineBackend hierarchy under src/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
Read more

RocketRide Server v3.3.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 03:22
d0d7e3d

⚠ 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 with context manager removed: __aenter__ / __aexit__ are deleted. Replace async with RocketRideClient(...) as client: with explicit await client.connect() / await client.disconnect() in a try/finally.
  • connect() now returns ConnectResult: previously returned None. Callers that did await client.connect() without capturing the result are unaffected; callers that typed the return as None will need to update.
  • use() no longer substitutes ${ROCKETRIDE_*} client-side: the raw pipeline is sent to the server, which handles all variable resolution via get_merged_env(). If you were relying on client-side .env interpolation, variables must now be set server-side (via the Variables page or client.account.set_env()).
  • Event type renames: EVENT_STATUS_UPDATEEVENT_STATUS; EVENT_TASK → split into TASK_EVENT, TASK_EVENT_FLOW, TASK_EVENT_RUNNING, TASK_EVENT_BEGIN, TASK_EVENT_END, TASK_EVENT_RESTART. Code that imports the old names will get ImportError.
  • auth credential removed from transport layer: TransportWebSocket no longer stores or exposes auth. Auth is exclusively managed by the ConnectionMixin / RocketRideClient layer.

TypeScript-specific breaking changes

  • connect() signature changed: old: connect(options?: number | { uri?, auth?, timeout? })void. New: connect(credential?, options?: { uri?, timeout? })Promise<ConnectResult>. The auth property inside options is removed; pass the credential as the first argument. The numeric-only shorthand connect(5000) is removed.
  • DataPipe errors changed from Error to PipeException: open(), write(), and close() now throw PipeException (extends Error) instead of plain Error when the server reports a failure. Callers catching Error are still compatible; callers matching on error message strings may need to update. PipeException carries the full DAP response body.
  • setConnectionParams() removed: use login(credential, { uri }) or call attach(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 returned Record<string, unknown>. Now returns ValidationResult (typed interface with valid, errors, warnings fields).
  • getServices() return type changed: previously returned Record<string, unknown>. Now returns ServicesResponse (typed interface).

Both SDKs: new exception types

  • PipeException (Python: subclass of RuntimeError; TypeScript: subclass of Error): thrown by DataPipe.open(), .write(), .close() when the server reports failure. Carries the full DAP response including message, body, and error code. Replaces generic RuntimeError / 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 numResults with 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_PATH env). Includes git_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 EngineBackend hierarchy under src/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
Read more

RocketRide TypeScript Client v1.3.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 03:22
d0d7e3d

⚠ 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 with context manager removed: __aenter__ / __aexit__ are deleted. Replace async with RocketRideClient(...) as client: with explicit await client.connect() / await client.disconnect() in a try/finally.
  • connect() now returns ConnectResult: previously returned None. Callers that did await client.connect() without capturing the result are unaffected; callers that typed the return as None will need to update.
  • use() no longer substitutes ${ROCKETRIDE_*} client-side: the raw pipeline is sent to the server, which handles all variable resolution via get_merged_env(). If you were relying on client-side .env interpolation, variables must now be set server-side (via the Variables page or client.account.set_env()).
  • Event type renames: EVENT_STATUS_UPDATEEVENT_STATUS; EVENT_TASK → split into TASK_EVENT, TASK_EVENT_FLOW, TASK_EVENT_RUNNING, TASK_EVENT_BEGIN, TASK_EVENT_END, TASK_EVENT_RESTART. Code that imports the old names will get ImportError.
  • auth credential removed from transport layer: TransportWebSocket no longer stores or exposes auth. Auth is exclusively managed by the ConnectionMixin / RocketRideClient layer.

TypeScript-specific breaking changes

  • connect() signature changed: old: connect(options?: number | { uri?, auth?, timeout? })void. New: connect(credential?, options?: { uri?, timeout? })Promise<ConnectResult>. The auth property inside options is removed; pass the credential as the first argument. The numeric-only shorthand connect(5000) is removed.
  • DataPipe errors changed from Error to PipeException: open(), write(), and close() now throw PipeException (extends Error) instead of plain Error when the server reports a failure. Callers catching Error are still compatible; callers matching on error message strings may need to update. PipeException carries the full DAP response body.
  • setConnectionParams() removed: use login(credential, { uri }) or call attach(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 returned Record<string, unknown>. Now returns ValidationResult (typed interface with valid, errors, warnings fields).
  • getServices() return type changed: previously returned Record<string, unknown>. Now returns ServicesResponse (typed interface).

Both SDKs: new exception types

  • PipeException (Python: subclass of RuntimeError; TypeScript: subclass of Error): thrown by DataPipe.open(), .write(), .close() when the server reports failure. Carries the full DAP response including message, body, and error code. Replaces generic RuntimeError / 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 numResults with 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_PATH env). Includes git_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 EngineBackend hierarchy under src/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
Read more

RocketRide Python Client v1.3.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 03:22
d0d7e3d

⚠ 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 with context manager removed: __aenter__ / __aexit__ are deleted. Replace async with RocketRideClient(...) as client: with explicit await client.connect() / await client.disconnect() in a try/finally.
  • connect() now returns ConnectResult: previously returned None. Callers that did await client.connect() without capturing the result are unaffected; callers that typed the return as None will need to update.
  • use() no longer substitutes ${ROCKETRIDE_*} client-side: the raw pipeline is sent to the server, which handles all variable resolution via get_merged_env(). If you were relying on client-side .env interpolation, variables must now be set server-side (via the Variables page or client.account.set_env()).
  • Event type renames: EVENT_STATUS_UPDATEEVENT_STATUS; EVENT_TASK → split into TASK_EVENT, TASK_EVENT_FLOW, TASK_EVENT_RUNNING, TASK_EVENT_BEGIN, TASK_EVENT_END, TASK_EVENT_RESTART. Code that imports the old names will get ImportError.
  • auth credential removed from transport layer: TransportWebSocket no longer stores or exposes auth. Auth is exclusively managed by the ConnectionMixin / RocketRideClient layer.

TypeScript-specific breaking changes

  • connect() signature changed: old: connect(options?: number | { uri?, auth?, timeout? })void. New: connect(credential?, options?: { uri?, timeout? })Promise<ConnectResult>. The auth property inside options is removed; pass the credential as the first argument. The numeric-only shorthand connect(5000) is removed.
  • DataPipe errors changed from Error to PipeException: open(), write(), and close() now throw PipeException (extends Error) instead of plain Error when the server reports a failure. Callers catching Error are still compatible; callers matching on error message strings may need to update. PipeException carries the full DAP response body.
  • setConnectionParams() removed: use login(credential, { uri }) or call attach(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 returned Record<string, unknown>. Now returns ValidationResult (typed interface with valid, errors, warnings fields).
  • getServices() return type changed: previously returned Record<string, unknown>. Now returns ServicesResponse (typed interface).

Both SDKs: new exception types

  • PipeException (Python: subclass of RuntimeError; TypeScript: subclass of Error): thrown by DataPipe.open(), .write(), .close() when the server reports failure. Carries the full DAP response including message, body, and error code. Replaces generic RuntimeError / 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 numResults with 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_PATH env). Includes git_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 EngineBackend hierarchy under src/engine/. Each connection mode (local, service, docker, cloud, onprem) gets its own ...
Read more