Skip to content

feat(ai-persistence, ai-harness): identity and access, with tenants, shared sessions, and a run context - #1812

Open
AlemTuzlak wants to merge 13 commits into
feat/harness-api-shapefrom
feat/harness-access
Open

AlemTuzlak wants to merge 13 commits into
feat/harness-api-shapefrom
feat/harness-access

Conversation

@AlemTuzlak

Copy link
Copy Markdown
Contributor

Every harness session now belongs to one tenant, and only allowed users reach it. Add access: { identify, authorize } to the host, or use the ready membersOnly() rule to share a session between users with roles. Each run acts as the user who started it, so a tool never gets another user's token. This is PR 3 of the harness redesign stack for #1755. It targets #1809 (feat/harness-api-shape).

🎯 Changes

  • Host access.
    • createHarnessHost({ access: { identify, authorize } }). The principal type is inferred from identify, so authorize and every host call are typed by it with no annotation.
    • The harness checks the tenant itself before it calls authorize.
    • host.open(harness, { threadId, principal }) returns a handle bound to that principal. A refused action throws AccessDeniedError.
    • Without access, there is one default tenant and no checks.
  • Shared sessions.
    • membersOnly({ fork: { members: 'self' | 'all' } }) has the roles owner, member, and viewer.
    • host.sessions.share, unshare, and fork({ members }) change the members. unshare cancels the removed user's work and closes their streams.
    • host.revoke({ threadId, principal }) is for apps with their own access tables.
    • host.identify({ request }) and host.hasAccess are for your own routes.
  • Tenants in every key.
    • The session index v2 in @tanstack/ai-persistence is keyed by (tenantId, threadId), with ownerId and members. getVersioned and upsertIf are required, list reads one tenant, and delete is a hard delete.
    • Log ids carry the tenant (logIdOf({ tenantId, logId })), and so do metadata, inbox, work claims, runs, interrupts, messages, and media keys.
    • host.open refuses child threads. host.sessions.delete also deletes the transcript.
  • The run context.
    • Every run has ctx.context.run in tools and middleware: tenant, user, log, thread, run, signal, credentials, and keys.
    • A session plugin's ctx.credentials and ctx.keys throw, because they have no user. This fixes D1: a background agent's tool got the token of whoever sent the latest turn.
    • Every input logs its sender. With access on, keyed (BYOK) adapters use env keys only with access.envKeys: true.
  • Network handlers fail closed.
    • createHarnessHandler, handleHarnessSocket, and createHarnessMcpServer read the user from the host's identify. Without host access they throw at the start, unless they set openAccess: true | { principal }.
    • Signed media URLs carry the user and are checked again when served.
    • The ACP agent and the CLI pass their principal (E7).

Docs: a new docs/harness/access.md, a rewritten shared-threads.md, and 18 changed pages, including store-reference.md. Changesets: the unreleased harness, persistence, MCP, ACP, and CLI changesets are edited in place.

Decisions made while building (the plan lists all of them):

  1. The run reaches tools through the core runtime context (ctx.context.run), so core does not change.
  2. The principal-bound handle comes forward from PR 4. PR 4 adds reference counts to the same handle.
  3. A read of a thread that does not exist is 404 and creates nothing. The client's events() keeps trying on 404, so a view of a new chat works.
  4. tenantStores is a small internal view that writes messages, runs, and interrupts under the tenant key. PR 5 deletes it when those stores leave the harness.
  5. Moved to later PRs: ask on the calling run (D9) to PR 7, the ownership epoch in the run to PR 5, and a full purge of media and plugin data to PR 4.

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested code changes locally with pnpm run test:pr, or these tests do not apply to this pull request.
  • I fully understand the code in this pull request, including any code generated with AI assistance.
  • Docs: I updated docs/ for this change, or this change is not user-facing.
  • Changeset: I added a changeset (pnpm changeset), or this PR does not change a published package.

🚀 Release Impact

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

Testing

Commands run:

  1. Builds of ai-persistence, ai-harness, ai-mcp, ai-acp, and ai-harness-cli.
  2. test:types and test:oxlint for those 5 packages: pass (old warnings only). test:build (publint) for ai-persistence and ai-harness: pass.
  3. Every touched test file, with --maxWorkers=2: 54 harness test files in 8 batches (about 915 tests), and the touched tests of ai-persistence, ai-mcp, ai-acp, and ai-harness-cli. All pass.
  4. oxfmt --check on every changed file, pnpm test:docs, and kiira check on the 21 changed docs pages (67 of 67 snippets).

Not run locally: pnpm test:pr, E2E (including the new harness-access.spec.ts), the testing/e2e type check, and the full suites. CI runs them.

Manual test:

  1. Run pnpm --dir packages/ai-harness exec vitest run tests/access.test.ts tests/http-access.test.ts tests/tenant-keys.test.ts tests/run-context.test.ts.
  2. Read tests/run-context.test.ts, the first case: user A's background agent keeps A's token while user B's turn runs.
  3. Read tests/tenant-keys.test.ts: two tenants open the same thread id and share nothing, on a durable host and on a message-store host.

How this PR makes testing easy:

  • tests/access.test.ts and tests/members-only.test.ts pin the roles, sharing, revoke, and the inferred principal type (tests/types.test-d.ts).
  • tests/http-access.test.ts pins the handlers that fail closed, signed URLs after unshare, and streams that close on revoke.
  • The kit has new session-index cases for tenants, members, and hard delete.
  • testing/e2e/tests/harness-access.spec.ts runs a shared thread with two members, a refused third user, and a user of another tenant.

Risk / rollback

Medium. Every network handler changes its options, and a read of a missing thread is now 404. The harness and its integrations are not released yet, and all callers in this repo are moved. To undo, revert this PR.

Public API change

Before

const host = createHarnessHost({ persistence })
const handler = createHarnessHandler({
  host,
  harness,
  authorize: (request) => userOf(request),
  canAccess: (principal, threadId) => threadId.startsWith(`${principal.id}-`),
})
// In a plugin tool: the user of the turn that runs now, maybe another user.
const token = await ctx.credentials.get('github')

After

const host = createHarnessHost({
  persistence,
  access: { identify: ({ request }) => userOf(request), authorize: membersOnly() },
})
const handler = createHarnessHandler({ host, harness })
await host.sessions.share({ threadId, userId: 'bea', role: 'member', principal })
// In a plugin tool: the user who started this run.
const tool = myTool.server<HarnessRunContext>(async (args, ctx) =>
  ctx.context.run.credentials.get('github'),
)

@changeset-bot

changeset-bot Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: cfa1721

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes changesets to release 9 packages
Name Type
@tanstack/ai-harness-cli Minor
@tanstack/ai-harness Minor
@tanstack/ai-mcp Minor
@tanstack/ai-acp Minor
@tanstack/ai-persistence Minor
@tanstack/ai-code-mode Patch
@tanstack/ai-sandbox Patch
@tanstack/ai-skills Patch
@tanstack/ai-grok-build Patch

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: TanStack/ai/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 9fde1ae5-b572-40dd-b8a6-e46031623157

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@nx-cloud

nx-cloud Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit cfa1721

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

☁️ Nx Cloud last updated this comment at 2026-10-17 17:50:58 UTC

@pkg-pr-new

pkg-pr-new Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

@tanstack/ai

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

@tanstack/ai-acp

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

@tanstack/ai-angular

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

@tanstack/ai-anthropic

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

@tanstack/ai-bedrock

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

@tanstack/ai-byteplus

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

@tanstack/ai-claude-code

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

@tanstack/ai-client

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

@tanstack/ai-cloudflare

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

@tanstack/ai-code-mode

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

@tanstack/ai-code-mode-snippets

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

@tanstack/ai-codex

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

@tanstack/ai-cohere

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-cohere@1812

@tanstack/ai-compaction

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-compaction@1812

@tanstack/ai-devtools-core

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

@tanstack/ai-durable-stream

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

@tanstack/ai-elevenlabs

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

@tanstack/ai-event-client

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

@tanstack/ai-fal

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

@tanstack/ai-gemini

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

@tanstack/ai-grok

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

@tanstack/ai-grok-build

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

@tanstack/ai-groq

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

@tanstack/ai-harness

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-harness@1812

@tanstack/ai-harness-cli

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-harness-cli@1812

@tanstack/ai-isolate-cloudflare

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

@tanstack/ai-isolate-daytona

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

@tanstack/ai-isolate-e2b

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-isolate-e2b@1812

@tanstack/ai-isolate-node

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

@tanstack/ai-isolate-quickjs

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

@tanstack/ai-isolate-quickjs-bun

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

@tanstack/ai-llmgateway

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-llmgateway@1812

@tanstack/ai-lovable

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-lovable@1812

@tanstack/ai-mcp

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

@tanstack/ai-memory

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

@tanstack/ai-mistral

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

@tanstack/ai-octane

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-octane@1812

@tanstack/ai-ollama

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

@tanstack/ai-ollaya

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-ollaya@1812

@tanstack/ai-openai

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

@tanstack/ai-opencode

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

@tanstack/ai-openrouter

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

@tanstack/ai-perplexity

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-perplexity@1812

@tanstack/ai-persistence

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

@tanstack/ai-preact

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

@tanstack/ai-react

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

@tanstack/ai-react-ui

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

@tanstack/ai-reactor

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-reactor@1812

@tanstack/ai-remix

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-remix@1812

@tanstack/ai-sandbox

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

@tanstack/ai-sandbox-blaxel

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

@tanstack/ai-sandbox-boxd

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

@tanstack/ai-sandbox-cloudflare

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

@tanstack/ai-sandbox-daytona

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

@tanstack/ai-sandbox-docker

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

@tanstack/ai-sandbox-e2b

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

@tanstack/ai-sandbox-local-process

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

@tanstack/ai-sandbox-railway

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

@tanstack/ai-sandbox-sprites

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

@tanstack/ai-sandbox-upstash-box

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-sandbox-upstash-box@1812

@tanstack/ai-sandbox-vercel

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

@tanstack/ai-skills

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-skills@1812

@tanstack/ai-solid

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

@tanstack/ai-solid-ui

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

@tanstack/ai-svelte

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

@tanstack/ai-typesafe

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-typesafe@1812

@tanstack/ai-utils

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

@tanstack/ai-vercel-gateway

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-vercel-gateway@1812

@tanstack/ai-vertex

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-vertex@1812

@tanstack/ai-vue

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

@tanstack/ai-vue-ui

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

@tanstack/ai-worldlabs

npm i https://pkg.pr.new/TanStack/ai/@tanstack/ai-worldlabs@1812

@tanstack/openai-base

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

@tanstack/preact-ai-devtools

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

@tanstack/react-ai-devtools

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

@tanstack/solid-ai-devtools

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

@tanstack/svelte-ai-devtools

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

commit: cfa1721

@github-actions

github-actions Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Coverage

✅ Coverage held across 70 compared package(s).

Each package is measured twice in this job — on this PR and on its merge-base with main — and compared. A metric fails only when it is at or above 60% on the merge-base and under 60% on this PR. Other drops are listed but do not fail. Packages your PR doesn't affect are not measured and not listed.

package statements branches functions lines
ai 91.61% (0.00) 85.29% (0.00) 92.38% (0.00) 93.26% (0.00) ok
ai-acp 82.50% (+0.20) 71.99% (+0.50) 77.20% (0.00) 84.31% (+0.18) ok
ai-angular 74.10% (0.00) 62.20% (0.00) 61.65% (0.00) 75.60% (0.00) ok
ai-anthropic 92.00% (0.00) 86.73% (0.00) 95.57% (0.00) 92.41% (0.00) ok
ai-bedrock 90.11% (0.00) 82.82% (0.00) 94.20% (0.00) 91.33% (0.00) ok
ai-byteplus 97.06% (0.00) 91.66% (0.00) 98.27% (0.00) 98.49% (0.00) ok
ai-claude-code 88.93% (0.00) 76.88% (0.00) 86.88% (0.00) 90.40% (0.00) ok
ai-client 87.96% (0.00) 80.38% (0.00) 87.13% (0.00) 90.26% (0.00) ok
ai-cloudflare 85.55% (0.00) 76.44% (0.00) 85.48% (0.00) 86.79% (0.00) ok
ai-code-mode 92.71% (0.00) 85.66% (0.00) 89.06% (0.00) 93.51% (0.00) ok
ai-code-mode-snippets 87.13% (0.00) 75.67% (0.00) 91.11% (0.00) 88.39% (0.00) ok
ai-codex 94.55% (0.00) 85.10% (0.00) 89.28% (0.00) 95.56% (0.00) ok
ai-cohere 88.97% (0.00) 88.37% (0.00) 85.71% (0.00) 91.80% (0.00) ok
ai-compaction 97.38% (0.00) 92.79% (0.00) 100.00% (0.00) 98.88% (0.00) ok
ai-devtools 83.13% (0.00) 72.77% (0.00) 87.07% (0.00) 85.22% (0.00) ok
ai-durable-stream 86.70% (0.00) 82.25% (0.00) 92.30% (0.00) 88.72% (0.00) ok
ai-elevenlabs 74.68% (0.00) 69.59% (0.00) 59.13% (0.00) 75.46% (0.00) ok
ai-event-client 56.83% (0.00) 46.87% (0.00) 68.96% (0.00) 57.89% (0.00) ok
ai-fal 91.10% (0.00) 82.63% (0.00) 92.40% (0.00) 91.60% (0.00) ok
ai-gemini 68.33% (0.00) 67.88% (0.00) 64.62% (0.00) 68.93% (0.00) ok
ai-grok 48.85% (0.00) 53.49% (0.00) 56.46% (0.00) 49.67% (0.00) ok
ai-grok-build 79.19% (0.00) 63.56% (0.00) 77.39% (0.00) 81.02% (0.00) ok
ai-groq 52.54% (0.00) 47.73% (0.00) 67.39% (0.00) 54.66% (0.00) ok
ai-harness 94.58% (+0.21) 88.86% (+0.21) 94.46% (+0.17) 95.95% (+0.26) ok
ai-harness-cli 85.94% (+1.63) 81.29% (+1.02) 80.86% (-0.17) 86.74% (+1.84) ok
ai-isolate-cloudflare 94.11% (0.00) 70.66% (0.00) 100.00% (0.00) 93.96% (0.00) ok
ai-isolate-daytona 90.25% (0.00) 81.34% (+0.75) 100.00% (0.00) 90.15% (0.00) ok
ai-isolate-e2b 92.11% (0.00) 81.48% (0.00) 97.36% (0.00) 95.05% (0.00) ok
ai-isolate-node 84.00% (0.00) 43.39% (0.00) 100.00% (0.00) 83.78% (0.00) ok
ai-isolate-quickjs 89.07% (0.00) 76.41% (0.00) 90.90% (0.00) 90.30% (0.00) ok
ai-isolate-quickjs-bun 7.76% (0.00) 8.08% (0.00) 5.00% (0.00) 8.33% (0.00) ok
ai-llmgateway 97.67% (0.00) 100.00% (0.00) 88.88% (0.00) 97.67% (0.00) ok
ai-lovable 73.21% (0.00) 55.63% (0.00) 85.07% (0.00) 73.96% (0.00) ok
ai-mcp 96.71% (+0.02) 91.73% (+0.08) 96.95% (+0.07) 98.59% (-0.03) ok
ai-memory 73.87% (0.00) 52.70% (0.00) 79.74% (0.00) 76.04% (0.00) ok
ai-mistral 84.82% (0.00) 79.88% (0.00) 92.59% (0.00) 85.46% (0.00) ok
ai-octane 90.67% (0.00) 67.74% (0.00) 86.66% (0.00) 90.79% (0.00) ok
ai-ollama 92.73% (0.00) 78.15% (0.00) 90.62% (0.00) 92.68% (0.00) ok
ai-ollaya 86.84% (0.00) 89.28% (0.00) 85.71% (0.00) 91.66% (0.00) ok
ai-openai 65.34% (0.00) 65.72% (0.00) 66.66% (0.00) 65.63% (0.00) ok
ai-opencode 69.04% (0.00) 60.82% (0.00) 65.26% (0.00) 70.87% (0.00) ok
ai-openrouter 87.88% (0.00) 73.00% (0.00) 90.78% (0.00) 89.79% (0.00) ok
ai-perplexity 91.34% (0.00) 90.43% (0.00) 100.00% (0.00) 93.87% (0.00) ok
ai-persistence 91.48% (-0.01) 78.05% (+0.03) 97.90% (+0.04) 95.89% (+0.12) ok
ai-preact 85.62% (0.00) 70.81% (0.00) 85.96% (0.00) 87.02% (0.00) ok
ai-react 72.95% (0.00) 51.89% (0.00) 73.77% (0.00) 73.07% (0.00) ok
ai-reactor 94.91% (0.00) 83.33% (0.00) 93.33% (0.00) 96.55% (0.00) ok
ai-remix 36.70% (0.00) 22.69% (0.00) 34.18% (0.00) 39.04% (0.00) ok
ai-sandbox 78.02% (+0.06) 83.10% (+0.04) 75.33% (+0.11) 78.57% (+0.05) ok
ai-sandbox-blaxel 87.64% (0.00) 77.18% (0.00) 82.26% (0.00) 89.71% (0.00) ok
ai-sandbox-boxd 95.86% (0.00) 87.12% (0.00) 95.31% (0.00) 98.17% (0.00) ok
ai-sandbox-cloudflare 67.91% (0.00) 57.47% (0.00) 71.79% (0.00) 69.62% (0.00) ok
ai-sandbox-daytona 82.70% (0.00) 81.89% (0.00) 67.14% (0.00) 85.18% (0.00) ok
ai-sandbox-docker 80.15% (+0.44) 71.49% (+0.15) 77.38% (+1.00) 82.13% (+0.48) ok
ai-sandbox-e2b 94.42% (0.00) 88.97% (0.00) 93.24% (0.00) 98.63% (0.00) ok
ai-sandbox-local-process 68.00% (0.00) 53.59% (0.00) 75.86% (0.00) 68.88% (0.00) ok
ai-sandbox-railway 94.75% (0.00) 92.68% (0.00) 90.90% (0.00) 97.59% (0.00) ok
ai-sandbox-sprites 73.23% (0.00) 59.70% (0.00) 73.83% (0.00) 76.17% (0.00) ok
ai-sandbox-upstash-box 94.82% (0.00) 91.52% (0.00) 91.04% (0.00) 97.76% (0.00) ok
ai-sandbox-vercel 44.67% (0.00) 38.18% (0.00) 35.18% (0.00) 45.76% (0.00) ok
ai-skills 83.59% (0.00) 68.58% (0.00) 87.36% (0.00) 85.63% (0.00) ok
ai-solid 52.13% (0.00) 38.29% (0.00) 49.82% (0.00) 56.87% (0.00) ok
ai-svelte 73.76% (0.00) 54.59% (0.00) 69.15% (0.00) 78.33% (0.00) ok
ai-typesafe 78.04% (0.00) 84.61% (0.00) 66.66% (0.00) 82.05% (0.00) ok
ai-utils 75.34% (0.00) 74.00% (0.00) 85.71% (0.00) 75.38% (0.00) ok
ai-vercel-gateway 75.97% (0.00) 55.63% (0.00) 85.41% (0.00) 79.38% (0.00) ok
ai-vertex 96.77% (0.00) 97.22% (0.00) 100.00% (0.00) 96.77% (0.00) ok
ai-vue 60.07% (0.00) 34.10% (0.00) 59.34% (0.00) 61.04% (0.00) ok
ai-worldlabs 79.62% (0.00) 71.50% (0.00) 91.42% (0.00) 82.66% (0.00) ok
openai-base 90.31% (0.00) 78.28% (0.00) 97.66% (0.00) 92.36% (0.00) ok

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-on: maintainer The ball is in the maintainers’ court

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants