Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
d049c4e
feat(server): add native Mistral Vibe provider via vibe-app-server
Nov 6, 2026
1384e36
fix(provider-vibe): address review comments on #31881
Nov 6, 2026
f372acc
fix(provider-vibe): resolve coderabbit follow-ups on #31881
Nov 6, 2026
3a9c2eb
fix(provider-vibe): resolve latest review batch on #31881
Nov 6, 2026
46938b9
fix(provider-vibe): resolve latest review batch on #31881
Nov 6, 2026
5a6693f
Merge branch 'main' into feat/vibe-provider-v2
GijsRommers Nov 6, 2026
d3340a6
fix(provider-vibe): resolve latest adapter review items on #31881
Nov 6, 2026
a5d9354
fix(provider-vibe): confine clientTool paths, full-history reads, cal…
Nov 6, 2026
ed7a28b
fix(provider-vibe): harden clientTool containment against symlink esc…
Nov 6, 2026
5b73442
fix(provider-vibe): canonicalize clientTool target before I/O on #31881
Nov 6, 2026
c320d37
fix(provider-vibe): concatenate streamed assistant text instead of re…
Nov 6, 2026
1534bfb
feat(provider-vibe): show tool calls and reasoning in the timeline
Nov 6, 2026
663b155
feat(provider-vibe): give Vibe agents T3's MCP tools and instructions
Nov 6, 2026
625bca7
fix(provider-vibe): label the provider Vibe and polish tool names and…
Nov 6, 2026
1cb46b6
fix(provider-vibe): list Vibe under "Show more" in the add-provider d…
Nov 6, 2026
8a01686
fix(provider-vibe): show pace on the monthly usage limit
Nov 6, 2026
bcec70c
fix(provider-vibe): run No-project sessions in place instead of faili…
Nov 6, 2026
f9756fb
fix(provider-vibe): Vibe threads no longer hang, and No-project chats…
Nov 6, 2026
0afcf2a
fix(provider-vibe): show when Vibe rejects the selected model
Nov 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
"@t3tools/provider-muse": "workspace:*",
"@t3tools/provider-opencode": "workspace:*",
"@t3tools/provider-pi": "workspace:*",
"@t3tools/provider-vibe": "workspace:*",
"@t3tools/source-control-azure-devops": "workspace:*",
"@t3tools/source-control-bitbucket": "workspace:*",
"@t3tools/source-control-core": "workspace:*",
Expand Down
2 changes: 2 additions & 0 deletions apps/server/src/policy/managedProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { kiroClient } from "@t3tools/provider-kiro/client";
import { museClient } from "@t3tools/provider-muse/client";
import { openCodeClient } from "@t3tools/provider-opencode/client";
import { piClient } from "@t3tools/provider-pi/client";
import { vibeClient } from "@t3tools/provider-vibe/client";
import type { ProviderClientDefinition } from "@t3tools/provider-core/client";

interface KnownDriver {
Expand Down Expand Up @@ -50,6 +51,7 @@ const PACKAGED_CLIENTS: ReadonlyArray<ProviderClientDefinition> = [
museClient,
openCodeClient,
piClient,
vibeClient,
acpRegistryClient,
];

Expand Down
5 changes: 4 additions & 1 deletion apps/server/src/provider/builtInDrivers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { GrokDriver, type GrokDriverEnv } from "@t3tools/provider-grok/server";
import { OpenCodeDriver, type OpenCodeDriverEnv } from "@t3tools/provider-opencode/server";
import { MuseDriver, type MuseDriverEnv } from "@t3tools/provider-muse/server";
import { PiDriver, type PiDriverEnv } from "@t3tools/provider-pi/server";
import { VibeDriver, type VibeDriverEnv } from "@t3tools/provider-vibe/server";
import type {
AnyProviderDriver,
ProviderUsageReaderEnv,
Expand All @@ -28,7 +29,8 @@ export type BuiltInDriversEnv =
| KiroDriverEnv
| OpenCodeDriverEnv
| PiDriverEnv
| MuseDriverEnv;
| MuseDriverEnv
| VibeDriverEnv;

export const BUILT_IN_DRIVERS: ReadonlyArray<AnyProviderDriver<BuiltInDriversEnv>> = [
CodexDriver,
Expand All @@ -42,6 +44,7 @@ export const BUILT_IN_DRIVERS: ReadonlyArray<AnyProviderDriver<BuiltInDriversEnv
PiDriver,
MuseDriver,
AcpRegistryDriver,
VibeDriver,
];

export type BuiltInUsageReadersEnv =
Expand Down
2 changes: 2 additions & 0 deletions apps/server/src/settingsSecrets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { kiroClient } from "@t3tools/provider-kiro/client";
import { museClient } from "@t3tools/provider-muse/client";
import { openCodeClient } from "@t3tools/provider-opencode/client";
import { piClient } from "@t3tools/provider-pi/client";
import { vibeClient } from "@t3tools/provider-vibe/client";
import {
readSecretFieldValues,
SOURCE_CONTROL_HOST_SECRET_FIELDS,
Expand All @@ -38,6 +39,7 @@ const providerSecretFields = new Map([
museClient,
openCodeClient,
piClient,
vibeClient,
acpRegistryClient,
].map(
(definition) =>
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"knip": "knip --preprocessor ./scripts/knip-schemas.ts",
"knip:check": "vp run knip:check:all",
"knip:check:files": "knip --include files,dependencies --no-config-hints",
"knip:check:exports": "knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-fx --workspace packages/provider-grok --workspace packages/provider-kiro --workspace packages/secret-provider-core --workspace packages/secret-provider-definitions --workspace packages/secret-provider-onepassword --workspace packages/source-control-core --workspace packages/source-control-definitions --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints",
"knip:check:exports": "knip --workspace apps/server --workspace apps/desktop --workspace apps/web --workspace packages/client-runtime --workspace packages/contracts --workspace packages/effect-acp --workspace packages/effect-codex-app-server --workspace packages/shared --workspace packages/ssh --workspace packages/tailscale --workspace packages/provider-core --workspace packages/provider-acp --workspace packages/provider-acp-registry --workspace packages/provider-testing --workspace packages/provider-pi --workspace packages/provider-muse --workspace packages/provider-opencode --workspace packages/provider-cursor --workspace packages/provider-fx --workspace packages/provider-grok --workspace packages/provider-vibe --workspace packages/vibe-app-server --workspace packages/provider-kiro --workspace packages/secret-provider-core --workspace packages/secret-provider-definitions --workspace packages/secret-provider-onepassword --workspace packages/source-control-core --workspace packages/source-control-definitions --workspace packages/source-control-azure-devops --workspace packages/source-control-bitbucket --workspace packages/source-control-forgejo --workspace packages/source-control-gitcafe --workspace packages/source-control-github --workspace packages/source-control-gitlab --workspace packages/source-control-testing --exports --preprocessor ./scripts/knip-schemas.ts --no-config-hints",
"knip:production": "knip --production --preprocessor ./scripts/knip-schemas.ts",
"lint:mobile": "node scripts/mobile-native-static-check.ts",
"mobile:install": "node scripts/mobile-native-client.ts ensure",
Expand Down
1 change: 1 addition & 0 deletions packages/client-runtime/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,7 @@
"@t3tools/provider-muse": "workspace:*",
"@t3tools/provider-opencode": "workspace:*",
"@t3tools/provider-pi": "workspace:*",
"@t3tools/provider-vibe": "workspace:*",
"@t3tools/secret-provider-definitions": "workspace:*",
"@t3tools/shared": "workspace:*",
"@t3tools/source-control-core": "workspace:*",
Expand Down
2 changes: 2 additions & 0 deletions packages/client-runtime/src/providerClients.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { kiroClient } from "@t3tools/provider-kiro/client";
import { museClient } from "@t3tools/provider-muse/client";
import { openCodeClient } from "@t3tools/provider-opencode/client";
import { piClient } from "@t3tools/provider-pi/client";
import { vibeClient } from "@t3tools/provider-vibe/client";

export const providerClients = makeProviderClientRegistry([
{
Expand All @@ -35,6 +36,7 @@ export const providerClients = makeProviderClientRegistry([
grokClient,
fxClient,
openCodeClient,
vibeClient,
{
driverKind: ProviderDriverKind.make("antigravity"),
label: "Antigravity",
Expand Down
4 changes: 4 additions & 0 deletions packages/contracts/src/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ const MUSE_DRIVER_KIND = ProviderDriverKind.make("muse");
const PI_DRIVER_KIND = ProviderDriverKind.make("pi");
const ACP_REGISTRY_DRIVER_KIND = ProviderDriverKind.make("acpRegistry");
const OPENCODE_DRIVER_KIND = ProviderDriverKind.make("opencode");
const VIBE_DRIVER_KIND = ProviderDriverKind.make("vibe");

export const DEFAULT_MODEL = "gpt-6-astra";

Expand Down Expand Up @@ -155,6 +156,7 @@ export const DEFAULT_MODEL_BY_PROVIDER: Partial<Record<ProviderDriverKind, strin
// "default" defers to the user's own Pi settings.json model selection.
[PI_DRIVER_KIND]: "default",
[OPENCODE_DRIVER_KIND]: "openai/gpt-5",
[VIBE_DRIVER_KIND]: "mistral-medium-3.5",
[ProviderDriverKind.make("antigravity")]: ANTIGRAVITY_DEFAULT_MODEL,
};

Expand All @@ -166,6 +168,7 @@ export const DEFAULT_TEXT_GENERATION_MODEL_BY_PROVIDER: Partial<
[CLAUDE_DRIVER_KIND]: "claude-haiku-5-5",
[CURSOR_DRIVER_KIND]: "composer-2",
[OPENCODE_DRIVER_KIND]: "opencode/big-pickle",
[VIBE_DRIVER_KIND]: "mistral-medium-3.5",
};

export const MODEL_SLUG_ALIASES_BY_PROVIDER: Partial<
Expand Down Expand Up @@ -206,4 +209,5 @@ export const PROVIDER_DISPLAY_NAMES: Partial<Record<ProviderDriverKind, string>>
[ACP_REGISTRY_DRIVER_KIND]: "ACP Registry",
[PI_DRIVER_KIND]: "Pi",
[OPENCODE_DRIVER_KIND]: "OpenCode",
[VIBE_DRIVER_KIND]: "Vibe",
};
1 change: 1 addition & 0 deletions packages/provider-core/src/server/failure.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ function curatedCauseMessages(cause: unknown): {
case "ClaudeMcpRegistrationTimeoutError":
case "ClaudeCodeRootRefusalError":
case "CursorModelUnavailableError":
case "VibeModelUnavailableError":
case "CodexGoalObjectiveTooLongError":
case "ProviderSetupError":
case "ProviderAdapterThreadInUseError":
Expand Down
35 changes: 35 additions & 0 deletions packages/provider-vibe/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "@t3tools/provider-vibe",
"private": true,
"type": "module",
"exports": {
"./client": {
"types": "./src/client.ts",
"import": "./src/client.ts"
},
"./settings": {
"types": "./src/settings.ts",
"import": "./src/settings.ts"
},
"./server": {
"types": "./src/server.ts",
"import": "./src/server.ts"
}
},
"scripts": {
"typecheck": "effect-tsgo tsrs --noEmit",
"test": "vp test run --config ../../vite.config.ts --dir ."
},
"dependencies": {
"@t3tools/contracts": "workspace:*",
"@t3tools/provider-core": "workspace:*",
"@t3tools/shared": "workspace:*",
"@t3tools/vibe-app-server": "workspace:*",
"effect": "catalog:"
},
"devDependencies": {
"@effect/vitest": "catalog:",
"@types/node": "catalog:",
"vite-plus": "catalog:"
}
}
33 changes: 33 additions & 0 deletions packages/provider-vibe/src/client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { ProviderDriverKind } from "@t3tools/contracts";
import { defineProviderClient } from "@t3tools/provider-core/client";

import { VibeSettings } from "./settings.ts";

export const vibeClient = defineProviderClient({
driverKind: ProviderDriverKind.make("vibe"),
label: "Vibe",
featured: false,
modelFamilies: ["Mistral ", "Devstral"],
acpRegistryAgentIds: ["mistral-vibe"],
settingsSchema: VibeSettings,
badgeLabel: "Early Access",
environmentFields: [
{
name: "MISTRAL_API_KEY",
label: "Mistral API key",
description:
"Optional. La Plateforme API key used by vibe-app-server instead of an interactive login.",
placeholder: "Paste API key",
sensitive: true,
},
],
icon: {
viewBox: "0 0 24 24",
fill: { light: "#FF7000", dark: "#FF7000" },
paths: [
{
d: "M3 3h4v4H3V3Zm14 0h4v4h-4V3ZM3 7h8v4H3V7Zm10 0h8v4h-8V7ZM3 11h18v10h-4v-6h-3v4h-4v-4H7v6H3V11Z",
},
],
},
});
2 changes: 2 additions & 0 deletions packages/provider-vibe/src/server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { VibeDriver, type VibeDriverEnv } from "./server/driver.ts";
export { type VibeAdapterV2Env } from "./server/adapter.ts";
Loading
Loading