Skip to content

feat: add Daytona Code Mode isolate driver - #645

Merged
AlemTuzlak merged 9 commits into
TanStack:mainfrom
mu-hashmi:feat/daytona-adapter
Aug 7, 2026
Merged

feat: add Daytona Code Mode isolate driver#645
AlemTuzlak merged 9 commits into
TanStack:mainfrom
mu-hashmi:feat/daytona-adapter

Conversation

@mu-hashmi

@mu-hashmi mu-hashmi commented May 26, 2026

Copy link
Copy Markdown
Contributor

Changes

This adds @tanstack/ai-isolate-daytona, a Code Mode isolate driver for caller-owned Daytona sandboxes.

The driver sends wrapped Code Mode programs to sandbox.process.codeRun, reads the marker envelope from Daytona stdout/result, and keeps TanStack tool implementations on the host. When generated code calls an external_* tool, Daytona returns need_tools; the host runs the matching ToolBinding.execute callbacks and replays the program with the tool results.

A few details matter here:

  • createContext is a logical Code Mode context. It does not create or delete Daytona sandboxes.
  • timeout is a total execution budget in milliseconds. Daytona receives the remaining budget as a per-call seconds timeout.
  • maxToolRounds counts host tool callback rounds, not raw codeRun calls.
  • The stdout marker is generated per execution so user output containing the public marker prefix does not spoof the result envelope.

The PR also updates the Code Mode isolate docs and adds a changeset for the new package.

Test plan

  • pnpm test:pr
  • pnpm test:e2e
  • DAYTONA_LIVE_TEST=1 DAYTONA_API_KEY=<redacted> pnpm --filter @tanstack/ai-isolate-daytona test:live

I also ran the narrower package checks while developing:

  • pnpm --filter @tanstack/ai-isolate-daytona test:lib -- --run tests/isolate-driver.test.ts tests/wrap-code.test.ts tests/live.test.ts
  • pnpm --filter @tanstack/ai-isolate-daytona test:types
  • pnpm --filter @tanstack/ai-isolate-daytona test:eslint
  • pnpm --filter @tanstack/ai-isolate-daytona build
  • pnpm --filter @tanstack/ai-isolate-daytona test:build

Notes:

  • The live Daytona suite created real TypeScript, JavaScript, and Python sandboxes and cleaned them up in finally.
  • Vitest/Vite prints the existing examples/ts-svelte-chat/.svelte-kit/tsconfig.json warning during several commands. The commands still passed.
  • E2E prints existing mocked provider error logs during some tests. The Playwright run still passed.

Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested this code locally with pnpm run test:pr.

Release impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

Summary by CodeRabbit

  • New Features

    • Added Daytona sandbox isolate support for Code Mode, enabling remote execution with configurable timeouts and tool-round limits.
    • Added a companion Daytona integration package with setup and usage guidance.
  • Documentation

    • Updated Code Mode and isolate-driver documentation with Daytona installation, configuration, execution-flow, and sandbox guidance.

@coderabbitai

coderabbitai Bot commented May 26, 2026

Copy link
Copy Markdown
Contributor

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

Adds a Daytona-backed IsolateDriver implementation and package. The driver runs Code Mode code in a Daytona sandbox, replays host-owned tools, enforces execution limits, and reports normalized results. README and Code Mode documentation describe installation and configuration.

Changes

Daytona Isolate Driver

Layer / File(s) Summary
Release and Code Mode documentation
.changeset/daytona-isolate-driver.md, docs/code-mode/code-mode.md, docs/code-mode/code-mode-isolates.md
Adds the minor release changeset. Updates installation, driver selection, comparison, sandbox guidance, configuration, and execution-flow documentation for Daytona.
Package API and usage contract
packages/ai-isolate-daytona/README.md
Documents installation, createDaytonaIsolateDriver(config), sandbox requirements, host-owned tool replay, and local and live validation commands.
Driver configuration and execution parsing
packages/ai-isolate-daytona/src/isolate-driver.ts
Adds the public configuration interface, helper utilities, timeout handling, envelope parsing, tool-call validation, and tool dispatch.
Isolate context and tool replay
packages/ai-isolate-daytona/src/isolate-driver.ts
Implements sandbox execution, disposal handling, timeout budgets, repeated need_tools rounds, result caching, log accumulation, and normalized errors.
Driver factory wiring
packages/ai-isolate-daytona/src/isolate-driver.ts
Exports createDaytonaIsolateDriver, validates configuration, and creates contexts with the configured sandbox and execution limits.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Caller
  participant DaytonaIsolateContext
  participant DaytonaSandbox
  participant HostToolBindings
  Caller->>DaytonaIsolateContext: execute(code, bindings)
  DaytonaIsolateContext->>DaytonaSandbox: process.codeRun(wrapped code)
  DaytonaSandbox-->>DaytonaIsolateContext: done or need_tools envelope
  DaytonaIsolateContext->>HostToolBindings: execute requested tools
  HostToolBindings-->>DaytonaIsolateContext: tool results
  DaytonaIsolateContext->>DaytonaSandbox: process.codeRun(tool results)
  DaytonaSandbox-->>Caller: final execution result
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the addition of the Daytona Code Mode isolate driver.
Description check ✅ Passed The description explains the implementation, test coverage, checklist completion, and release impact, including the generated changeset.
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.
✨ 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.

@mu-hashmi
mu-hashmi marked this pull request as ready for review May 26, 2026 17:39

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (1)
packages/typescript/ai-isolate-daytona/tests/wrap-code.test.ts (1)

1-276: ⚡ Quick win

Move this unit test file to be colocated with the source module.

wrap-code.test.ts should sit alongside src/wrap-code.ts rather than under tests/ to match the repo’s unit test placement rule.

As per coding guidelines: "Define unit tests in *.test.ts files alongside source files".

🤖 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 `@packages/typescript/ai-isolate-daytona/tests/wrap-code.test.ts` around lines
1 - 276, The test file wrap-code.test.ts is currently under tests/ but must be
colocated with its module; move the entire wrap-code.test.ts so it sits next to
src/wrap-code.ts, update any import paths if necessary (ensure imports like
'../src/wrap-code' still resolve from the new location or change them to
'./wrap-code'), and run the test suite to verify nothing breaks; keep the test
filename and contents unchanged aside from import path fixes and ensure test
runner picks up the colocated *.test.ts file.
🤖 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 `@docs/code-mode/code-mode-isolates.md`:
- Around line 230-239: The fenced diagram block starting with the lines "Driver
(your server)              Daytona sandbox" is missing a fence language and
triggers MD040; update the triple-backtick fence that surrounds that ASCII
diagram to include a language label (e.g., change ``` to ```text) so the code
block is explicitly marked as plain text and will satisfy markdown linting.

In `@packages/typescript/ai-isolate-daytona/package.json`:
- Around line 1-59: Add the required packageManager field to this package.json
to pin pnpm to the repo standard: add "packageManager": "pnpm@10.17.0" at the
top-level of the JSON (near other root keys such as "name" and "version") so the
manifest explicitly declares pnpm@10.17.0 for consistent lockfile/tooling
behavior.

In `@packages/typescript/ai-isolate-daytona/README.md`:
- Around line 62-70: The fenced diagram block in the README is unlabeled and
triggers MD040; update the opening triple-backtick fence for the diagram (the
block starting with "Host process                         Daytona sandbox") to
include a language label (e.g., change ``` to ```text) so the block becomes a
labeled code fence and satisfies the markdown linter.

In `@packages/typescript/ai-isolate-daytona/src/isolate-driver.ts`:
- Around line 130-133: The timeoutAfter helper currently creates an uncancelled
timer; change timeoutAfter(milliseconds) to return both a promise and a cancel
function (e.g., { promise, cancel } or [promise, cancel]) where cancel calls
clearTimeout on the stored timer id; then update the Promise.race call sites
that race timeoutAfter() with work (the two Promise.race usages) to call the
cancel function when the work branch wins so the pending timer is cleared and
not left accumulating.

---

Nitpick comments:
In `@packages/typescript/ai-isolate-daytona/tests/wrap-code.test.ts`:
- Around line 1-276: The test file wrap-code.test.ts is currently under tests/
but must be colocated with its module; move the entire wrap-code.test.ts so it
sits next to src/wrap-code.ts, update any import paths if necessary (ensure
imports like '../src/wrap-code' still resolve from the new location or change
them to './wrap-code'), and run the test suite to verify nothing breaks; keep
the test filename and contents unchanged aside from import path fixes and ensure
test runner picks up the colocated *.test.ts file.
🪄 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

Run ID: 6f9da31f-ab9d-49c6-afaa-7116d73a5dc0

📥 Commits

Reviewing files that changed from the base of the PR and between 0de0cba and 31b5eac.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (14)
  • .changeset/daytona-isolate-driver.md
  • docs/code-mode/code-mode-isolates.md
  • docs/code-mode/code-mode.md
  • packages/typescript/ai-isolate-daytona/README.md
  • packages/typescript/ai-isolate-daytona/package.json
  • packages/typescript/ai-isolate-daytona/src/index.ts
  • packages/typescript/ai-isolate-daytona/src/isolate-driver.ts
  • packages/typescript/ai-isolate-daytona/src/types.ts
  • packages/typescript/ai-isolate-daytona/src/wrap-code.ts
  • packages/typescript/ai-isolate-daytona/tests/isolate-driver.test.ts
  • packages/typescript/ai-isolate-daytona/tests/live.test.ts
  • packages/typescript/ai-isolate-daytona/tests/wrap-code.test.ts
  • packages/typescript/ai-isolate-daytona/tsconfig.json
  • packages/typescript/ai-isolate-daytona/vite.config.ts

Comment thread docs/code-mode/code-mode-isolates.md Outdated
Comment on lines +1 to +59
{
"name": "@tanstack/ai-isolate-daytona",
"version": "0.0.1",
"description": "Daytona sandbox driver for TanStack AI Code Mode TypeScript execution.",
"author": "",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/TanStack/ai.git",
"directory": "packages/typescript/ai-isolate-daytona"
},
"type": "module",
"module": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts",
"exports": {
".": {
"types": "./dist/esm/index.d.ts",
"import": "./dist/esm/index.js"
}
},
"sideEffects": false,
"engines": {
"node": ">=18"
},
"files": [
"dist",
"src"
],
"scripts": {
"build": "vite build",
"clean": "premove ./build ./dist",
"lint:fix": "eslint ./src --fix",
"test:build": "publint --strict",
"test:eslint": "eslint ./src",
"test:live": "vitest --run tests/live.test.ts",
"test:lib": "vitest --passWithNoTests",
"test:lib:dev": "pnpm test:lib --watch",
"test:types": "tsc"
},
"keywords": [
"ai",
"ai-sdk",
"typescript",
"tanstack",
"code-mode",
"daytona",
"sandbox",
"isolate",
"code-execution"
],
"peerDependencies": {
"@tanstack/ai-code-mode": "workspace:*"
},
"devDependencies": {
"@daytona/sdk": "^0.180.0",
"@tanstack/ai-code-mode": "workspace:*",
"@vitest/coverage-v8": "4.0.14"
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Add packageManager to pin pnpm version.

This manifest does not declare the required package manager pin, which can lead to inconsistent lockfile/tooling behavior across contributors.

Suggested fix
 {
   "name": "`@tanstack/ai-isolate-daytona`",
   "version": "0.0.1",
+  "packageManager": "pnpm@10.17.0",
   "description": "Daytona sandbox driver for TanStack AI Code Mode TypeScript execution.",

As per coding guidelines "**/package.json: Use pnpm@10.17.0 as the package manager for this repository".

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{
"name": "@tanstack/ai-isolate-daytona",
"version": "0.0.1",
"description": "Daytona sandbox driver for TanStack AI Code Mode TypeScript execution.",
"author": "",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/TanStack/ai.git",
"directory": "packages/typescript/ai-isolate-daytona"
},
"type": "module",
"module": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts",
"exports": {
".": {
"types": "./dist/esm/index.d.ts",
"import": "./dist/esm/index.js"
}
},
"sideEffects": false,
"engines": {
"node": ">=18"
},
"files": [
"dist",
"src"
],
"scripts": {
"build": "vite build",
"clean": "premove ./build ./dist",
"lint:fix": "eslint ./src --fix",
"test:build": "publint --strict",
"test:eslint": "eslint ./src",
"test:live": "vitest --run tests/live.test.ts",
"test:lib": "vitest --passWithNoTests",
"test:lib:dev": "pnpm test:lib --watch",
"test:types": "tsc"
},
"keywords": [
"ai",
"ai-sdk",
"typescript",
"tanstack",
"code-mode",
"daytona",
"sandbox",
"isolate",
"code-execution"
],
"peerDependencies": {
"@tanstack/ai-code-mode": "workspace:*"
},
"devDependencies": {
"@daytona/sdk": "^0.180.0",
"@tanstack/ai-code-mode": "workspace:*",
"@vitest/coverage-v8": "4.0.14"
}
}
{
"name": "`@tanstack/ai-isolate-daytona`",
"version": "0.0.1",
"packageManager": "pnpm@10.17.0",
"description": "Daytona sandbox driver for TanStack AI Code Mode TypeScript execution.",
"author": "",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/TanStack/ai.git",
"directory": "packages/typescript/ai-isolate-daytona"
},
"type": "module",
"module": "./dist/esm/index.js",
"types": "./dist/esm/index.d.ts",
"exports": {
".": {
"types": "./dist/esm/index.d.ts",
"import": "./dist/esm/index.js"
}
},
"sideEffects": false,
"engines": {
"node": ">=18"
},
"files": [
"dist",
"src"
],
"scripts": {
"build": "vite build",
"clean": "premove ./build ./dist",
"lint:fix": "eslint ./src --fix",
"test:build": "publint --strict",
"test:eslint": "eslint ./src",
"test:live": "vitest --run tests/live.test.ts",
"test:lib": "vitest --passWithNoTests",
"test:lib:dev": "pnpm test:lib --watch",
"test:types": "tsc"
},
"keywords": [
"ai",
"ai-sdk",
"typescript",
"tanstack",
"code-mode",
"daytona",
"sandbox",
"isolate",
"code-execution"
],
"peerDependencies": {
"`@tanstack/ai-code-mode`": "workspace:*"
},
"devDependencies": {
"`@daytona/sdk`": "^0.180.0",
"`@tanstack/ai-code-mode`": "workspace:*",
"`@vitest/coverage-v8`": "4.0.14"
}
}
🤖 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 `@packages/typescript/ai-isolate-daytona/package.json` around lines 1 - 59, Add
the required packageManager field to this package.json to pin pnpm to the repo
standard: add "packageManager": "pnpm@10.17.0" at the top-level of the JSON
(near other root keys such as "name" and "version") so the manifest explicitly
declares pnpm@10.17.0 for consistent lockfile/tooling behavior.

Comment thread packages/ai-isolate-daytona/README.md Outdated
Comment thread packages/ai-isolate-daytona/src/isolate-driver.ts Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
packages/ai-isolate-daytona/src/isolate-driver.ts (1)

130-146: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Timer type should be ReturnType<typeof setTimeout> for Node.js compatibility.

In Node.js, setTimeout returns a Timeout object rather than a number. Using number here is incorrect for the Node.js runtime, though it works at runtime since clearTimeout accepts both types. The past review's proposed fix correctly used ReturnType<typeof setTimeout>.

🔧 Proposed fix
 async function withTimeout<T>(
   promise: Promise<T>,
   milliseconds: number,
 ): Promise<T | undefined> {
-  let timer: number | undefined
+  let timer: ReturnType<typeof setTimeout> | undefined
   const timeout = new Promise<undefined>((resolve) => {
     timer = setTimeout(resolve, milliseconds)
   })
🤖 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 `@packages/ai-isolate-daytona/src/isolate-driver.ts` around lines 130 - 146,
The timer variable in withTimeout is typed as number which is incorrect for
Node.js; change the type of timer to ReturnType<typeof setTimeout> (and adjust
the timeout Promise factory to assign timer via setTimeout) so clearTimeout
receives the proper type — update the declaration "let timer: number |
undefined" to use ReturnType<typeof setTimeout> and ensure other uses (timer !==
undefined, clearTimeout(timer)) remain valid.
🤖 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.

Duplicate comments:
In `@packages/ai-isolate-daytona/src/isolate-driver.ts`:
- Around line 130-146: The timer variable in withTimeout is typed as number
which is incorrect for Node.js; change the type of timer to ReturnType<typeof
setTimeout> (and adjust the timeout Promise factory to assign timer via
setTimeout) so clearTimeout receives the proper type — update the declaration
"let timer: number | undefined" to use ReturnType<typeof setTimeout> and ensure
other uses (timer !== undefined, clearTimeout(timer)) remain valid.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fb620614-05cd-4438-99d6-bc837bb9abb5

📥 Commits

Reviewing files that changed from the base of the PR and between c5a8374 and 132edff.

📒 Files selected for processing (3)
  • docs/code-mode/code-mode-isolates.md
  • packages/ai-isolate-daytona/README.md
  • packages/ai-isolate-daytona/src/isolate-driver.ts
✅ Files skipped from review due to trivial changes (2)
  • packages/ai-isolate-daytona/README.md
  • docs/code-mode/code-mode-isolates.md

mu-hashmi and others added 3 commits May 26, 2026 11:15
# Conflicts:
#	pnpm-lock.yaml
The package shipped eslint lint scripts (lint:fix/test:eslint) while the
rest of the monorepo standardized on oxlint. This left the package's
source outside the CI lint gate (nx affected --target=test:oxlint skipped
it) and tripped knip with an unlisted 'eslint' binary. Align with sibling
drivers (oxlint src --type-aware).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@nx-cloud

nx-cloud Bot commented Aug 2, 2026

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 6410c5d

Command Status Duration Result
nx run-many --targets=build --exclude=examples/... ✅ Succeeded 7s View ↗

☁️ Nx Cloud last updated this comment at 2026-08-07 12:14:24 UTC

@pkg-pr-new

pkg-pr-new Bot commented Aug 2, 2026

Copy link
Copy Markdown

Open in StackBlitz

@tanstack/ai

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai@645

@tanstack/ai-acp

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-acp@645

@tanstack/ai-angular

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-angular@645

@tanstack/ai-anthropic

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-anthropic@645

@tanstack/ai-bedrock

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-bedrock@645

@tanstack/ai-byteplus

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-byteplus@645

@tanstack/ai-claude-code

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-claude-code@645

@tanstack/ai-client

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-client@645

@tanstack/ai-code-mode

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-code-mode@645

@tanstack/ai-code-mode-skills

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-code-mode-skills@645

@tanstack/ai-codex

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-codex@645

@tanstack/ai-devtools-core

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-devtools-core@645

@tanstack/ai-durable-stream

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-durable-stream@645

@tanstack/ai-elevenlabs

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-elevenlabs@645

@tanstack/ai-event-client

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-event-client@645

@tanstack/ai-fal

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-fal@645

@tanstack/ai-gemini

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-gemini@645

@tanstack/ai-grok

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-grok@645

@tanstack/ai-grok-build

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-grok-build@645

@tanstack/ai-groq

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-groq@645

@tanstack/ai-isolate-cloudflare

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-isolate-cloudflare@645

@tanstack/ai-isolate-daytona

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-isolate-daytona@645

@tanstack/ai-isolate-node

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-isolate-node@645

@tanstack/ai-isolate-quickjs

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-isolate-quickjs@645

@tanstack/ai-isolate-quickjs-bun

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-isolate-quickjs-bun@645

@tanstack/ai-mcp

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-mcp@645

@tanstack/ai-memory

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-memory@645

@tanstack/ai-mistral

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-mistral@645

@tanstack/ai-ollama

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-ollama@645

@tanstack/ai-openai

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-openai@645

@tanstack/ai-opencode

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-opencode@645

@tanstack/ai-openrouter

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-openrouter@645

@tanstack/ai-persistence

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-persistence@645

@tanstack/ai-preact

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-preact@645

@tanstack/ai-react

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-react@645

@tanstack/ai-react-ui

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-react-ui@645

@tanstack/ai-sandbox

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox@645

@tanstack/ai-sandbox-cloudflare

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox-cloudflare@645

@tanstack/ai-sandbox-daytona

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox-daytona@645

@tanstack/ai-sandbox-docker

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox-docker@645

@tanstack/ai-sandbox-local-process

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox-local-process@645

@tanstack/ai-sandbox-sprites

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox-sprites@645

@tanstack/ai-sandbox-vercel

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox-vercel@645

@tanstack/ai-solid

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-solid@645

@tanstack/ai-solid-ui

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-solid-ui@645

@tanstack/ai-svelte

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-svelte@645

@tanstack/ai-utils

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-utils@645

@tanstack/ai-vue

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-vue@645

@tanstack/ai-vue-ui

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-vue-ui@645

@tanstack/openai-base

npm i https://pkg.pr.new/TanStack/ai/@tanstack/openai-base@645

@tanstack/preact-ai-devtools

npm i https://pkg.pr.new/TanStack/ai/@tanstack/preact-ai-devtools@645

@tanstack/react-ai-devtools

npm i https://pkg.pr.new/TanStack/ai/@tanstack/react-ai-devtools@645

@tanstack/solid-ai-devtools

npm i https://pkg.pr.new/TanStack/ai/@tanstack/solid-ai-devtools@645

commit: 6410c5d

jherr and others added 3 commits August 3, 2026 08:37
…erif

Merging main brought in @tanstack/ai-sandbox-daytona, which depends on
@daytona/sdk@^0.191.0. This package still pinned ^0.180.0, so sherif's
multiple-dependency-versions rule failed the Test job (single-version policy
across the workspace).

Bump the devDependency to ^0.191.0 to match. It stays a devDependency: this
driver is bring-your-own-SDK (the caller passes a Daytona sandbox via the
`DaytonaSandboxLike` structural type and the driver never imports @daytona/sdk
at runtime), so the SDK is only needed for dev/type-checking. Build, types,
oxlint, and the unit suite all pass against 0.191.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@AlemTuzlak
AlemTuzlak merged commit 8a159db into TanStack:main Aug 7, 2026
@github-actions github-actions Bot mentioned this pull request Aug 7, 2026
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.

3 participants