Skip to content

feat(api): proxy box network tunnels#998

Merged
DorianZheng merged 7 commits into
boxlite-ai:mainfrom
G4614:codex/api-box-network-tunnel
Jul 22, 2026
Merged

feat(api): proxy box network tunnels#998
DorianZheng merged 7 commits into
boxlite-ai:mainfrom
G4614:codex/api-box-network-tunnel

Conversation

@G4614

@G4614 G4614 commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Expose box service -- sdks

Test plan:

  • git diff --check
  • Added a regression test for downstream CONNECT acknowledgement and bidirectional piping
  • Targeted Jest execution requires workspace node_modules

Summary by CodeRabbit

  • New Features
    • Added box network tunneling (HTTP + raw TCP) via new REST and WebSocket endpoints using short-lived single-use tickets.
    • Added cross-SDK networking tunnel APIs (endpoint discovery, reusable handles) for Python, Node.js, Go, and C.
    • Added a CLI command to print publicly reachable service URLs.
  • Bug Fixes
    • Box public now correctly defaults to true when omitted (including warm-pool assignments).
    • Improved port preview URL generation and examples for non-terminal service ports.
  • Documentation
    • Refreshed OpenAPI/Swagger examples for network tunnel and port preview URL templates.

@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR adds box network tunneling across the API, proxy, runner, Rust runtime, CLI, and C, Go, Node, and Python SDKs. It includes ticket-authenticated WebSocket transport, guest-port proxying, reusable local and remote tunnels, preview URL encoding updates, and integration tests validating HTTP relay through the tunnels.

Changes

Box network tunnel

Layer / File(s) Summary
API tunnel endpoints, tickets, and routing
apps/api/src/box/..., apps/api/src/boxlite-rest/..., openapi/box.openapi.yaml, apps/infra/sst.config.ts
Adds POST tunnel endpoint returning URL and single-use Redis ticket, unified WebSocket path matching for attach and tunnel upgrades, encoded direct-preview box IDs, public-box defaulting to true, module wiring, and OpenAPI documentation.
Trusted forwarding and proxy infrastructure
apps/common-go/pkg/proxy/..., apps/proxy/pkg/proxy/...
Adds forwarded-header parsing/formatting helpers, direct-preview box ID decoding and validation, escaped-path preservation, guest-port proxy path parsing, and HTTP reverse-proxy setup for tunneled requests.
Runner guest-port tunneling and WebSocket transport
apps/runner/pkg/api/controllers/..., apps/runner/pkg/boxlite/..., apps/runner/pkg/api/server.go
Adds guest-port HTTP proxying with host/path rewriting, WebSocket-to-TCP bidirectional frame/byte bridging, authenticated /network/proxy and /network/tunnel routes, guest-port dialing transport, and integration tests verifying HTTP relay.
Core Rust tunnel model and REST implementation
src/boxlite/src/litebox/..., src/boxlite/src/rest/..., src/cli/...
Refactors BoxTunnel with typed BoxEndpoint (URL or UnixSocket) and reusable connectors, adds local Unix-socket forwarding, enables REST-backed tunnels, implements ticket-authenticated WebSocket transport with half-close, removes old into_fd API, and adds tunnel CLI command.
Cross-language SDK tunnel bindings
sdks/c/..., sdks/go/..., sdks/node/..., sdks/python/...
Adds per-box network getter and tunnel creation across all SDKs, with C opaque handles and FFI functions, Go Cgo bridges, Node N-API bindings, and Python PyO3 classes wrapping reusable tunnel endpoints and connection opens.
End-to-end integration and test coverage
scripts/test/e2e/..., sdks/node/tests/..., sdks/python/tests/..., apps/runner/pkg/api/controllers/...
Adds tunnel E2E tests for Node and Python SDKs using local and REST runtimes, runner integration tests with real VMs, proxy routing tests, SDK unit tests for endpoint/connection behavior, and test infrastructure for marker-based validation.

Estimated code review effort: 5 (Critical) | ~150 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant BoxliteNetworkController
  participant BoxliteTunnelTicketService as TicketService
  participant BoxliteWsProxyService as WsProxy
  participant RunnerProxyController as RunnerProxy
  participant GuestTCP

  Client->>BoxliteNetworkController: POST /network/tunnel
  BoxliteNetworkController->>BoxliteTunnelTicketService: issue(boxId, port)
  TicketService-->>Client: { url, ticket }
  
  Client->>BoxliteWsProxyService: WS upgrade /boxes/.../tunnel?ticket=...
  BoxliteWsProxyService->>BoxliteTunnelTicketService: consume(ticket)
  TicketService-->>BoxliteWsProxyService: { boxId, port }
  
  BoxliteWsProxyService->>RunnerProxyController: forward authenticated tunnel
  RunnerProxyController->>GuestTCP: dial 192.168.127.2:port
  RunnerProxyController-->>Client: bridge WS binary frames ↔ TCP bytes
Loading

Possibly related PRs:

  • boxlite-ai/boxlite#809: Updates WebSocket proxy and path matching for both attach and tunnel upgrades; overlaps with main PR's BoxliteWsProxyService refactoring to unified matchBoxWsPath.
  • boxlite-ai/boxlite#992: Adds the same POST /{prefix}/boxes/{box_id}/network/tunnel endpoint and BoxServiceEndpoint schema to OpenAPI; main PR completes the implementation.

Suggested labels: enhancement, javascript, e2e-local

Suggested reviewers: law-chain-hot

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 51.82% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning The description is largely incomplete and does not follow the required template sections for summary, changes, verify, or risks. Rewrite the PR description using the repository template with Summary, Changes, How to verify, and Risks / rollout sections.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and accurately describes the main change: proxying box network tunnels.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@G4614
G4614 force-pushed the codex/api-box-network-tunnel branch from 31bf38c to 07d77f4 Compare July 17, 2026 05:58
@G4614
G4614 changed the base branch from stack/runner-guest-port-connect to main July 17, 2026 05:58
@G4614
G4614 force-pushed the codex/api-box-network-tunnel branch from 5244570 to e60b2bd Compare July 17, 2026 13:49
@G4614
G4614 marked this pull request as ready for review July 20, 2026 13:26
@G4614
G4614 requested a review from a team as a code owner July 20, 2026 13:26
@boxlite-agent

boxlite-agent Bot commented Jul 20, 2026

Copy link
Copy Markdown

📦 BoxLite review — couldn't complete

claude exited 1

stdout:
{"type":"result","subtype":"success","is_error":true,"api_error_status":403,"duration_ms":332,"duration_api_ms":0,"num_turns":1,"result":"Your organization has disabled Claude subscription access for Claude Code · Use an Anthropic API key instead, or ask your admin to enable access","stop_reason":"stop_sequence","session_id":"cf17a4f5-fa88-4cae-8431-7302710bcac7","total_cost_usd":0,"usage":{"input_tokens":0,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":0,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{},"permission_denials":[],"terminal_reason":"api_error","fast_mode_state":"off","uuid":"a8f7d0a6-9992-47a4-952d-99ea1939fbeb"}

stderr:
<empty>

powered by BoxLite

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Caution

Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted.

Error details
putComment timed out

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 11

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/boxlite/src/net/mod.rs (1)

651-673: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Stale comments referencing the removed into_fd fd-recovery path.

With into_fd deleted, the doc comment claiming "the concrete local stream stays recoverable (the SDK fd-bridge relies on it)" (Line 653) and the dangling trailing comment "the owned OS fd is recoverable with no unsafe downcast (SDK handoff)" (Line 672) no longer describe any tested behavior. Drop/adjust them so the test intent stays accurate.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/boxlite/src/net/mod.rs` around lines 651 - 673, Update the test comments
around BoxInternalTunnel::from_local to remove references to the deleted into_fd
path, SDK fd recovery, and owned OS fd handoff. Keep comments focused on the
behavior actually tested: bidirectional byte transfer through
AsyncRead/AsyncWrite and preservation of the peer address.
🧹 Nitpick comments (6)
sdks/node/lib/native-contracts.ts (2)

257-265: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add TSDoc comments to the exported interfaces and methods.

As per coding guidelines, please write comprehensive JSDoc/TSDoc comments for functions, classes, and exported modules, including these new interfaces and their methods.

📝 Proposed documentation
+/**
+ * Handle for network operations on a box.
+ */
 export interface JsNetworkHandle {
+  /**
+   * Prepares a reusable tunnel to a specified service port inside the box.
+   */
   tunnel(port: number): Promise<JsBoxTunnel>;
 }
 
+/**
+ * A reusable tunnel to a service port inside a box.
+ */
 export interface JsBoxTunnel {
+  /**
+   * Returns the stable URL or Unix socket address prepared for the tunnel.
+   */
   endpoint(): Promise<string>;
+  /**
+   * Opens a fresh stream and returns its owned Unix file descriptor.
+   */
   _connectFd(): Promise<number>;
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sdks/node/lib/native-contracts.ts` around lines 257 - 265, Add comprehensive
TSDoc comments to the exported JsNetworkHandle and JsBoxTunnel interfaces and
each method (tunnel, endpoint, and _connectFd), documenting their purpose,
parameters, return values, and connection behavior where applicable.

Source: Coding guidelines


257-265: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add TSDoc comments to the exported interfaces and methods.

As per coding guidelines, please write comprehensive JSDoc/TSDoc comments for functions, classes, and exported modules, including these new interfaces and their methods.

📝 Proposed documentation
+/**
+ * Handle for network operations on a box.
+ */
 export interface JsNetworkHandle {
+  /**
+   * Prepares a reusable tunnel to a specified service port inside the box.
+   */
   tunnel(port: number): Promise<JsBoxTunnel>;
 }
 
+/**
+ * A reusable tunnel to a service port inside a box.
+ */
 export interface JsBoxTunnel {
+  /**
+   * Returns the stable URL or Unix socket address prepared for the tunnel.
+   */
   endpoint(): Promise<string>;
+  /**
+   * Opens a fresh stream and returns its owned Unix file descriptor.
+   */
   _connectFd(): Promise<number>;
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sdks/node/lib/native-contracts.ts` around lines 257 - 265, Add comprehensive
TSDoc comments to the exported JsNetworkHandle and JsBoxTunnel interfaces and
each of their methods, documenting their purpose, parameters, return values, and
relevant behavior while preserving the existing API signatures.

Source: Coding guidelines

sdks/python/boxlite/sync_api/_network.py (1)

18-26: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add return type annotations.

The connect and endpoint methods are missing return type annotations. (Note: you will also need to import socket at the top of the file if you prefer not to use string annotations).

♻️ Proposed type hints
-    def connect(self):
+    def connect(self) -> "socket.socket":
         """Open a blocking socket to the target service."""
         tunnel = self._box._sync(self._tunnel.connect())
         tunnel.setblocking(True)
         return tunnel
 
-    def endpoint(self):
+    def endpoint(self) -> str:
         """Return the cloud URL or local Unix socket path."""
         return self._box._sync(self._tunnel.endpoint())
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sdks/python/boxlite/sync_api/_network.py` around lines 18 - 26, Add return
type annotations to the connect and endpoint methods in the relevant sync
network class: annotate connect as returning socket.socket and endpoint with its
appropriate endpoint value type, importing socket if needed. Preserve the
existing blocking connection and endpoint delegation behavior.
sdks/node/lib/simplebox.ts (1)

274-279: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Validate the port argument.

It is recommended to validate that the port is a valid integer between 1 and 65535 before attempting to open the tunnel.

🛡️ Proposed validation
   /** Return a lazy tunnel handle for a port inside this box. */
   async tunnel(port: number): Promise<BoxTunnel> {
+    if (!Number.isInteger(port) || port < 1 || port > 65535) {
+      throw new Error(`Invalid port: ${port}. Port must be an integer between 1 and 65535.`);
+    }
     const box = await this.ensureBox();
     const tunnel = await box.network.tunnel(port);
     return tunnel instanceof BoxTunnel ? tunnel : new BoxTunnel(tunnel);
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sdks/node/lib/simplebox.ts` around lines 274 - 279, Update SimpleBox.tunnel
to validate port before calling ensureBox or opening the network tunnel: require
an integer in the inclusive range 1–65535, and reject invalid values using the
existing argument-validation convention. Preserve the current BoxTunnel wrapping
behavior for valid ports.
sdks/python/src/network.rs (2)

38-57: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add docstrings to public Python methods.

As per coding guidelines, comprehensive docstrings should be written for all public functions. The tunnel method exposed to Python lacks a docstring explaining its behavior, arguments, and return type.

📝 Proposed fix
 #[pymethods]
 impl PyNetworkHandle {
+    /// Create a lazy tunnel handle for a guest port.
+    ///
+    /// Args:
+    ///     port (int): The port number to tunnel to.
+    ///
+    /// Returns:
+    ///     BoxTunnel: A handle to the created tunnel.
     fn tunnel<'py>(&self, py: Python<'py>, port: u16) -> PyResult<Bound<'py, PyAny>> {
         if port == 0 {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sdks/python/src/network.rs` around lines 38 - 57, Add a comprehensive
Python-facing docstring to the public PyNetworkHandle::tunnel method describing
its tunneling behavior, port argument, non-zero requirement, and returned
PyBoxTunnel value (including its asynchronous nature).

Source: Coding guidelines


59-89: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add docstrings to public Python methods.

As per coding guidelines, comprehensive docstrings should be written for all public functions. The endpoint and connect methods exposed to Python lack docstrings.

📝 Proposed fix
 #[pymethods]
 impl PyBoxTunnel {
+    /// Return the cloud URL or local Unix socket path for this tunnel.
     fn endpoint<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyAny>> {
         let handle = Arc::clone(&self.handle);
         pyo3_async_runtimes::tokio::future_into_py(py, async move {
             match handle.endpoint().await.map_err(map_err)? {
                 BoxEndpoint::Url(url) => Ok(url),
                 BoxEndpoint::UnixSocket(path) => Ok(path.to_string_lossy().into_owned()),
             }
         })
     }
 
+    /// Open a connection to the target service, returning a non-blocking socket.
     fn connect<'py>(&self, py: Python<'py>) -> PyResult<Bound<'py, PyAny>> {
         let handle = Arc::clone(&self.handle);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sdks/python/src/network.rs` around lines 59 - 89, Add Python docstrings to
the public PyBoxTunnel methods endpoint and connect in the #[pymethods]
implementation, documenting each method’s purpose, asynchronous result, and
relevant endpoint or socket behavior. Keep the existing implementations
unchanged.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/runner/pkg/api/controllers/proxy_integration_test.go`:
- Around line 80-100: Synchronize concurrent stderr access in the test by
replacing the plain strings.Builder with a synchronized buffer type, adding the
required sync import. Update StartExecution to receive &stderrBuf and change the
waitForRealVMTunnelResponse closure to read stderrBuf.String(), preserving the
existing polling and cleanup behavior.

In `@sdks/go/tunnel.go`:
- Around line 131-137: Change the cFD declaration in the tunnel connection flow
to use C.int32_t, matching the pointer type expected by
C.boxlite_box_tunnel_connect. Keep the existing error handling and
negative-descriptor check unchanged.
- Around line 131-137: Change the cFD declaration used by
boxlite_box_tunnel_connect in the tunnel connection flow from C.int to C.int32_t
so its pointer type matches the C function signature. Preserve the existing
error handling and negative-descriptor check.
- Around line 101-118: Change the endpointType declaration in the tunnel
endpoint flow to use the generated cgo enum type expected by
C.boxlite_box_tunnel_endpoint instead of uint32. Preserve the existing switch
mapping and unknown-type error behavior.
- Around line 101-118: Change endpointType in the tunnel endpoint flow to use
the generated cgo enum type expected by C.boxlite_box_tunnel_endpoint instead of
uint32. Keep the existing switch mapping to EndpointTypeURL and
EndpointTypeUnixSocket unchanged, including unknown-type handling.

In `@sdks/node/lib/simplebox.ts`:
- Around line 282-294: Add TSDoc comments to the exported BoxTunnel class and
its public endpoint and connect methods, describing the tunnel wrapper, the
endpoint value returned, and the socket established by connect. Keep the
implementation unchanged and follow the repository’s existing documentation
style.

In `@sdks/python/boxlite/simplebox.py`:
- Around line 140-144: Update _create_tunnel to validate that port is within the
inclusive range 1–65535 before calling self._box.network.tunnel(port), rejecting
invalid user input with the established argument-validation error behavior while
preserving the existing box-existence check.

In `@sdks/python/pytest.ini`:
- Line 13: Update the pytest.skip call in the _required_env helper within
test_dev_tunnel_e2e.py to pass allow_module_level=True, preserving the existing
message and module-level skip behavior during collection.

In `@sdks/python/tests/test_dev_tunnel_e2e.py`:
- Line 10: Add ApiKeyCredential to the public exports in the boxlite package’s
__init__.py so the import in test_dev_tunnel_e2e.py resolves during test
collection, preserving the existing exports.
- Around line 31-33: Run the repository’s Python formatter on
test_dev_tunnel_e2e.py and apply its formatting to the request assignment,
removing the redundant parenthesized string expression as needed. Do not change
the request content or test behavior.

In `@src/boxlite/src/litebox/box_impl.rs`:
- Around line 62-69: Replace the temporary-directory socket setup around the
tunnel listener with the existing box-scoped socket path flow used for short
Unix socket paths. Update the code creating the `service.sock` path and binding
the `tokio::net::UnixListener` to reuse the runtime’s box socket layout, while
preserving the existing Network error mapping.

---

Outside diff comments:
In `@src/boxlite/src/net/mod.rs`:
- Around line 651-673: Update the test comments around
BoxInternalTunnel::from_local to remove references to the deleted into_fd path,
SDK fd recovery, and owned OS fd handoff. Keep comments focused on the behavior
actually tested: bidirectional byte transfer through AsyncRead/AsyncWrite and
preservation of the peer address.

---

Nitpick comments:
In `@sdks/node/lib/native-contracts.ts`:
- Around line 257-265: Add comprehensive TSDoc comments to the exported
JsNetworkHandle and JsBoxTunnel interfaces and each method (tunnel, endpoint,
and _connectFd), documenting their purpose, parameters, return values, and
connection behavior where applicable.
- Around line 257-265: Add comprehensive TSDoc comments to the exported
JsNetworkHandle and JsBoxTunnel interfaces and each of their methods,
documenting their purpose, parameters, return values, and relevant behavior
while preserving the existing API signatures.

In `@sdks/node/lib/simplebox.ts`:
- Around line 274-279: Update SimpleBox.tunnel to validate port before calling
ensureBox or opening the network tunnel: require an integer in the inclusive
range 1–65535, and reject invalid values using the existing argument-validation
convention. Preserve the current BoxTunnel wrapping behavior for valid ports.

In `@sdks/python/boxlite/sync_api/_network.py`:
- Around line 18-26: Add return type annotations to the connect and endpoint
methods in the relevant sync network class: annotate connect as returning
socket.socket and endpoint with its appropriate endpoint value type, importing
socket if needed. Preserve the existing blocking connection and endpoint
delegation behavior.

In `@sdks/python/src/network.rs`:
- Around line 38-57: Add a comprehensive Python-facing docstring to the public
PyNetworkHandle::tunnel method describing its tunneling behavior, port argument,
non-zero requirement, and returned PyBoxTunnel value (including its asynchronous
nature).
- Around line 59-89: Add Python docstrings to the public PyBoxTunnel methods
endpoint and connect in the #[pymethods] implementation, documenting each
method’s purpose, asynchronous result, and relevant endpoint or socket behavior.
Keep the existing implementations unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 90d9867b-30a2-4759-9695-e5033d96179d

📥 Commits

Reviewing files that changed from the base of the PR and between 2411669 and 07dc156.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (70)
  • apps/api/src/box/dto/create-box.dto.ts
  • apps/api/src/box/dto/port-preview-url.dto.ts
  • apps/api/src/box/services/box.service.spec.ts
  • apps/api/src/box/services/box.service.ts
  • apps/api/src/boxlite-rest/boxlite-network.controller.spec.ts
  • apps/api/src/boxlite-rest/boxlite-network.controller.ts
  • apps/api/src/boxlite-rest/boxlite-rest-routing.spec.ts
  • apps/api/src/boxlite-rest/boxlite-rest.module.ts
  • apps/api/src/boxlite-rest/boxlite-tunnel-ticket.service.spec.ts
  • apps/api/src/boxlite-rest/boxlite-tunnel-ticket.service.ts
  • apps/api/src/boxlite-rest/boxlite-ws-proxy.service.spec.ts
  • apps/api/src/boxlite-rest/boxlite-ws-proxy.service.ts
  • apps/api/src/main.ts
  • apps/common-go/pkg/proxy/proxy.go
  • apps/common-go/pkg/proxy/proxy_test.go
  • apps/infra/sst.config.ts
  • apps/proxy/pkg/proxy/get_box_target.go
  • apps/proxy/pkg/proxy/get_box_target_test.go
  • apps/runner/pkg/api/controllers/proxy.go
  • apps/runner/pkg/api/controllers/proxy_integration_test.go
  • apps/runner/pkg/api/controllers/proxy_test.go
  • apps/runner/pkg/api/server.go
  • apps/runner/pkg/boxlite/guest_port_tunnel.go
  • openapi/box.openapi.yaml
  • scripts/test/e2e/cases/test_node_tunnel.py
  • scripts/test/e2e/cases/test_sdk_tunnel.py
  • scripts/test/e2e/sdks/node/e2e_tunnel.ts
  • sdks/c/Cargo.toml
  • sdks/c/include/boxlite.h
  • sdks/c/src/lib.rs
  • sdks/c/src/network.rs
  • sdks/c/src/tests.rs
  • sdks/go/constants.go
  • sdks/go/tunnel.go
  • sdks/node/Cargo.toml
  • sdks/node/lib/index.ts
  • sdks/node/lib/native-contracts.ts
  • sdks/node/lib/simplebox.ts
  • sdks/node/src/box_handle.rs
  • sdks/node/src/lib.rs
  • sdks/node/src/network.rs
  • sdks/node/tests/tunnel.test.ts
  • sdks/python/Cargo.toml
  • sdks/python/boxlite/__init__.py
  • sdks/python/boxlite/simplebox.py
  • sdks/python/boxlite/sync_api/__init__.py
  • sdks/python/boxlite/sync_api/_box.py
  • sdks/python/boxlite/sync_api/_network.py
  • sdks/python/boxlite/sync_api/_simplebox.py
  • sdks/python/pytest.ini
  • sdks/python/src/box_handle.rs
  • sdks/python/src/lib.rs
  • sdks/python/src/network.rs
  • sdks/python/tests/test_dev_tunnel_e2e.py
  • sdks/python/tests/test_tunnel.py
  • src/boxlite/Cargo.toml
  • src/boxlite/src/litebox/box_impl.rs
  • src/boxlite/src/litebox/mod.rs
  • src/boxlite/src/litebox/network.rs
  • src/boxlite/src/net/gvproxy/services.rs
  • src/boxlite/src/net/mod.rs
  • src/boxlite/src/rest/client.rs
  • src/boxlite/src/rest/litebox.rs
  • src/boxlite/src/rest/runtime.rs
  • src/boxlite/src/runtime/backend.rs
  • src/boxlite/tests/gvproxy_backend.rs
  • src/cli/src/cli.rs
  • src/cli/src/commands/mod.rs
  • src/cli/src/commands/tunnel.rs
  • src/cli/src/main.rs
💤 Files with no reviewable changes (2)
  • src/boxlite/tests/gvproxy_backend.rs
  • src/boxlite/src/net/gvproxy/services.rs

Comment thread apps/runner/pkg/api/controllers/proxy_integration_test.go Outdated
Comment thread sdks/go/tunnel.go Outdated
Comment thread sdks/go/tunnel.go Outdated
Comment thread sdks/node/lib/simplebox.ts
Comment thread sdks/python/boxlite/simplebox.py
Comment thread sdks/python/pytest.ini
Comment thread sdks/python/tests/test_dev_tunnel_e2e.py Outdated
Comment thread sdks/python/tests/test_dev_tunnel_e2e.py Outdated
Comment thread src/boxlite/src/litebox/box_impl.rs Outdated
@G4614
G4614 force-pushed the codex/api-box-network-tunnel branch from fcc0a6a to b998e38 Compare July 22, 2026 10:09
@G4614
G4614 marked this pull request as ready for review July 22, 2026 10:27
@G4614
G4614 enabled auto-merge July 22, 2026 10:27
@DorianZheng
DorianZheng disabled auto-merge July 22, 2026 12:26
@DorianZheng
DorianZheng merged commit ba70f29 into boxlite-ai:main Jul 22, 2026
49 checks passed
@G4614
G4614 deleted the codex/api-box-network-tunnel branch July 23, 2026 08:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants