feat: added devin provider support

- Implemented the Devin inference provider, including OAuth flow with PKCE, Connect protocol integration, and streaming support for chat requests.
- Integrated comprehensive Protobuf-based service definitions and generated TypeScript clients for Devin's API infrastructure, including model management and workspace operations.
- Updated the AI and Catalog modules to support dynamic model discovery, provider-specific configuration, and authentication.
- Standardized tool call arguments as `Record<string, unknown>` across provider implementations to ensure type safety.
This commit is contained in:
can1357
2026-06-22 04:44:37 +02:00
parent 0a1323ae80
commit fc01e3b6cb
100 changed files with 96352 additions and 48 deletions
+1
View File
@@ -61,6 +61,7 @@
"!**/node_modules/**/*",
"!**/test-sessions.ts",
"!**/agent_pb.ts",
"!**/devin-gen/**/*",
"!.worktrees/**/*",
"!.wt/**/*"
]
+9
View File
@@ -49,6 +49,7 @@
"zod": "catalog:",
},
"devDependencies": {
"@bufbuild/protoc-gen-es": "catalog:",
"@types/bun": "catalog:",
},
},
@@ -474,6 +475,10 @@
"@bufbuild/protobuf": ["@bufbuild/protobuf@2.12.0", "", {}, "sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA=="],
"@bufbuild/protoc-gen-es": ["@bufbuild/protoc-gen-es@2.12.0", "", { "dependencies": { "@bufbuild/protobuf": "2.12.0", "@bufbuild/protoplugin": "2.12.0" }, "bin": { "protoc-gen-es": "bin/protoc-gen-es" } }, "sha512-d9htF6jEkSwPbp9d/vSmZOBF7eeG18AvTMKmVg4I23afnrQOxL2w3WOXa9TaufMCyu24QakEUb4vux8apI5e7A=="],
"@bufbuild/protoplugin": ["@bufbuild/protoplugin@2.12.0", "", { "dependencies": { "@bufbuild/protobuf": "2.12.0", "@typescript/vfs": "^1.6.2", "typescript": "5.4.5" } }, "sha512-ORlDITp8AFUXzIhLRoMCG+ud+D3MPKWb5HQXBoskMMnjeyEjE1H1qLonVNPyOr8lkx3xSfYUo8a0dvOZJVAzow=="],
"@colors/colors": ["@colors/colors@1.6.0", "", {}, "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA=="],
"@dabh/diagnostics": ["@dabh/diagnostics@2.0.8", "", { "dependencies": { "@so-ric/colorspace": "^1.1.6", "enabled": "2.0.x", "kuler": "^2.0.0" } }, "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q=="],
@@ -912,6 +917,8 @@
"@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260609.1", "", { "os": "win32", "cpu": "x64" }, "sha512-qNPcss+6yRoNFfFIKQbPwJWYxDfOZwyL8JBJh4J+yMLOad/+/AOjsO4EtZsIpv5PMCjpnD75coBoDkw+5NkItw=="],
"@typescript/vfs": ["@typescript/vfs@1.6.4", "", { "dependencies": { "debug": "^4.4.3" }, "peerDependencies": { "typescript": "*" } }, "sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ=="],
"@xmldom/xmldom": ["@xmldom/xmldom@0.8.13", "", {}, "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw=="],
"@xterm/headless": ["@xterm/headless@6.0.0", "", {}, "sha512-5Yj1QINYCyzrZtf8OFIHi47iQtI+0qYFPHmouEfG8dHNxbZ9Tb9YGSuLcsEwj9Z+OL75GJqPyJbyoFer80a2Hw=="],
@@ -1458,6 +1465,8 @@
"@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
"@bufbuild/protoplugin/typescript": ["typescript@5.4.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="],
"@huggingface/transformers/onnxruntime-node": ["onnxruntime-node@1.24.3", "", { "dependencies": { "adm-zip": "^0.5.16", "global-agent": "^3.0.0", "onnxruntime-common": "1.24.3" }, "os": [ "linux", "win32", "darwin", ] }, "sha512-JH7+czbc8ALA819vlTgcV+Q214/+VjGeBHDjX81+ZCD0PCVCIFGFNtT0V4sXG/1JXypKPgScQcB3ij/hk3YnTg=="],
"@isaacs/fs-minipass/minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="],
+8 -1
View File
@@ -1,6 +1,13 @@
# Changelog
## [Unreleased]
### Added
- Added support for Devin as a provider
### Changed
- Updated tool call arguments to use `Record<string, unknown>` and `unknown` for tool results
## [16.1.11] - 2026-06-21
@@ -4025,4 +4032,4 @@ _Dedicated to Peter's shoulder ([@steipete](https://twitter.com/steipete))_
## [0.9.4] - 2025-11-26
Initial release with multi-provider LLM support.
Initial release with multi-provider LLM support.
+1
View File
@@ -45,6 +45,7 @@
"zod": "catalog:"
},
"devDependencies": {
"@bufbuild/protoc-gen-es": "catalog:",
"@types/bun": "catalog:"
},
"engines": {
+12 -2
View File
@@ -14,9 +14,10 @@ import type {
StreamOptions,
} from "./types";
const BUILTIN_APIS = new Set<KnownApi>([
const BUILTIN_API_IDS = [
"openai-completions",
"openai-responses",
"openrouter",
"openai-codex-responses",
"azure-openai-responses",
"anthropic-messages",
@@ -26,7 +27,16 @@ const BUILTIN_APIS = new Set<KnownApi>([
"google-vertex",
"ollama-chat",
"cursor-agent",
]);
"devin-agent",
] as const satisfies readonly KnownApi[];
type _MissingBuiltinApis = Exclude<KnownApi, (typeof BUILTIN_API_IDS)[number]>;
type _CheckBuiltinApis = _MissingBuiltinApis extends never
? true
: ["BUILTIN_APIS is missing KnownApi values", _MissingBuiltinApis];
true satisfies _CheckBuiltinApis;
const BUILTIN_APIS = new Set<KnownApi>(BUILTIN_API_IDS);
export type CustomStreamFn = (
model: Model<Api>,
@@ -204,7 +204,10 @@ function walkAssistantContent(
type: "toolCall",
id: block.id,
name: block.name,
arguments: block.input ?? {},
arguments:
block.input && typeof block.input === "object" && !Array.isArray(block.input)
? (block.input as Record<string, unknown>)
: {},
});
break;
default: {
+568
View File
@@ -0,0 +1,568 @@
import { gunzipSync, gzipSync } from "node:zlib";
import { create, fromBinary, toBinary } from "@bufbuild/protobuf";
import {
ChatMessageRequestType,
GetChatMessageRequestSchema,
GetChatMessageResponseSchema,
} from "@oh-my-pi/pi-catalog/discovery/devin-gen/exa/api_server_pb/api_server_pb";
import {
GetUserJwtRequestSchema,
GetUserJwtResponseSchema,
} from "@oh-my-pi/pi-catalog/discovery/devin-gen/exa/auth_pb/auth_pb";
import {
CacheControlType,
type ChatMessagePrompt,
ChatMessagePromptSchema,
ChatToolChoiceSchema,
ChatToolDefinitionSchema,
PromptCacheOptionsSchema,
} from "@oh-my-pi/pi-catalog/discovery/devin-gen/exa/chat_pb/chat_pb";
import {
ChatMessageSource,
type ChatToolCall,
ChatToolCallSchema,
CompletionConfigurationSchema,
ConversationalPlannerMode,
ImageDataSchema,
MetadataSchema,
StopReason,
} from "@oh-my-pi/pi-catalog/discovery/devin-gen/exa/codeium_common_pb/codeium_common_pb";
import { calculateCost } from "@oh-my-pi/pi-catalog/models";
import { extractHttpStatusFromError, logger } from "@oh-my-pi/pi-utils";
import type {
Api,
AssistantMessage,
Context,
Message,
Model,
StreamFunction,
StreamOptions,
TextContent,
ThinkingContent,
Tool,
ToolCall,
} from "../types";
import { AssistantMessageEventStream } from "../utils/event-stream";
import { parseStreamingJson } from "../utils/json-parse";
import { formatErrorMessageWithRetryAfter } from "../utils/retry-after";
import { toolWireSchema } from "../utils/schema/wire";
/** Base host for Codeium/Windsurf's Cascade chat API (Connect protocol over HTTP/1.1). */
export const DEVIN_API_URL = "https://server.codeium.com";
export interface DevinOptions extends StreamOptions {
/** Cascade conversation id; reused as `cascade_id` so the server threads turns. */
conversationId?: string;
/** Falls back to `cascade_id` when no `conversationId` is supplied. */
sessionId?: string;
/** Wire model uid selected after thinking-effort routing. */
chatModelUid?: string;
}
const CHAT_MESSAGE_PATH = "/exa.api_server_pb.ApiServerService/GetChatMessage";
const DEVIN_IDE_VERSION = "3.2.23";
const DEVIN_EXTENSION_VERSION = "1.48.2";
const DEVIN_SESSION_TOKEN_PREFIX = "devin-session-token$";
const DEVIN_AUTH_PATH = "/exa.auth_pb.AuthService/GetUserJwt";
const DEVIN_DEFAULT_STOP_PATTERNS = ["<|user|>", "<|bot|>", "<|context_request|>", "<|endoftext|>", "<|end_of_turn|>"];
/** Connect streaming framing: flag byte bit 0x01 = gzip payload, 0x02 = end-of-stream JSON trailers. */
const CONNECT_COMPRESSED_FLAG = 0x01;
const CONNECT_END_STREAM_FLAG = 0x02;
export const streamDevin: StreamFunction<"devin-agent"> = (
model: Model<"devin-agent">,
context: Context,
options?: DevinOptions,
): AssistantMessageEventStream => {
const stream = new AssistantMessageEventStream();
(async () => {
const startTime = Date.now();
let firstTokenTime: number | undefined;
const output: AssistantMessage = {
role: "assistant",
content: [],
api: "devin-agent" as Api,
provider: model.provider,
model: model.id,
usage: {
input: 0,
output: 0,
cacheRead: 0,
cacheWrite: 0,
totalTokens: 0,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
},
stopReason: "stop",
timestamp: Date.now(),
};
let currentTextBlock: TextContent | null = null;
let currentThinkingBlock: ThinkingContent | null = null;
// Tool-call content blocks keyed by streamed tool-call id, plus the JSON-args text
// accumulated per id (kept out of the content object so finalized tool calls stay clean).
const toolBlocks = new Map<string, ToolCall>();
const toolPartialJson = new Map<string, string>();
let activeToolCallId: string | undefined;
let latestStopReason = StopReason.UNSPECIFIED;
const markFirstToken = () => {
if (firstTokenTime === undefined) firstTokenTime = Date.now();
};
const endTextBlock = () => {
const block = currentTextBlock;
if (!block) return;
currentTextBlock = null;
stream.push({
type: "text_end",
contentIndex: output.content.indexOf(block),
content: block.text,
partial: output,
});
};
const endThinkingBlock = () => {
const block = currentThinkingBlock;
if (!block) return;
currentThinkingBlock = null;
stream.push({
type: "thinking_end",
contentIndex: output.content.indexOf(block),
content: block.thinking,
partial: output,
});
};
try {
const fetchImpl = options?.fetch ?? fetch;
const baseUrl = (model.baseUrl || DEVIN_API_URL).replace(/\/+$/, "");
const apiKey = normalizeDevinSessionToken(options?.apiKey);
const auth = await fetchDevinAuthMetadata(apiKey, baseUrl, fetchImpl, options?.signal);
const chatBaseUrl = auth.baseUrl ?? baseUrl;
const request = buildDevinChatRequest(model, context, options, apiKey, auth.userJwt);
logger.debug("devin: sending chat request", { model: model.id, tools: context.tools?.length ?? 0 });
const reqBytes = toBinary(GetChatMessageRequestSchema, request);
const gz = gzipSync(reqBytes);
const frame = Buffer.alloc(5 + gz.length);
frame[0] = CONNECT_COMPRESSED_FLAG;
frame.writeUInt32BE(gz.length, 1);
frame.set(gz, 5);
const response = await fetchImpl(chatBaseUrl + CHAT_MESSAGE_PATH, {
method: "POST",
headers: {
"content-type": "application/connect+proto",
"connect-protocol-version": "1",
"connect-content-encoding": "gzip",
"accept-encoding": "identity",
"user-agent": "connect-go/1.18.1 (go1.26.3)",
"connect-accept-encoding": "gzip",
...(options?.headers ?? {}),
},
body: frame,
signal: options?.signal,
});
if (!response.ok) {
const text = await response.text();
throw Object.assign(new Error(`Devin API error ${response.status} ${response.statusText}: ${text}`), {
status: response.status,
});
}
if (!response.body) {
throw new Error("Devin API error: response body is empty");
}
const body = response.body;
stream.push({ type: "start", partial: output });
const reader = body.getReader();
let pending = Buffer.alloc(0);
for (;;) {
const { done, value } = await reader.read();
if (value && value.length > 0) {
pending = Buffer.concat([pending, value]);
}
while (pending.length >= 5) {
const flag = pending[0];
const len = pending.readUInt32BE(1);
if (pending.length < 5 + len) break;
const payload = pending.subarray(5, 5 + len);
pending = pending.subarray(5 + len);
if (flag & CONNECT_END_STREAM_FLAG) {
const trailerBytes = flag & CONNECT_COMPRESSED_FLAG ? gunzipSync(payload) : payload;
const trailerError = readConnectTrailerError(trailerBytes.toString("utf8").trim());
if (trailerError) throw new Error(trailerError);
continue;
}
const raw = flag & CONNECT_COMPRESSED_FLAG ? gunzipSync(payload) : payload;
const msg = fromBinary(GetChatMessageResponseSchema, raw);
if (msg.messageId && !output.responseId) output.responseId = msg.messageId;
if (msg.deltaThinking) {
markFirstToken();
const block: ThinkingContent = currentThinkingBlock ?? { type: "thinking", thinking: "" };
if (currentThinkingBlock !== block) {
output.content.push(block);
currentThinkingBlock = block;
stream.push({
type: "thinking_start",
contentIndex: output.content.length - 1,
partial: output,
});
}
block.thinking += msg.deltaThinking;
if (msg.deltaSignature) block.thinkingSignature = msg.deltaSignature;
stream.push({
type: "thinking_delta",
contentIndex: output.content.indexOf(block),
delta: msg.deltaThinking,
partial: output,
});
}
if (msg.deltaText) {
markFirstToken();
endThinkingBlock();
const block: TextContent = currentTextBlock ?? { type: "text", text: "" };
if (currentTextBlock !== block) {
output.content.push(block);
currentTextBlock = block;
stream.push({ type: "text_start", contentIndex: output.content.length - 1, partial: output });
}
block.text += msg.deltaText;
stream.push({
type: "text_delta",
contentIndex: output.content.indexOf(block),
delta: msg.deltaText,
partial: output,
});
}
if (msg.deltaToolCalls.length > 0) {
markFirstToken();
endTextBlock();
endThinkingBlock();
for (const tc of msg.deltaToolCalls) {
const toolCallId = tc.id || activeToolCallId;
if (!toolCallId) continue;
let block = toolBlocks.get(toolCallId);
if (!block) {
block = { type: "toolCall", id: toolCallId, name: tc.name, arguments: {} };
output.content.push(block);
toolBlocks.set(toolCallId, block);
toolPartialJson.set(toolCallId, "");
stream.push({
type: "toolcall_start",
contentIndex: output.content.length - 1,
partial: output,
});
}
if (tc.name) block.name = tc.name;
activeToolCallId = toolCallId;
if (!tc.argumentsJson) continue;
const previousJson = toolPartialJson.get(toolCallId) ?? "";
const accumulated = tc.argumentsJson.startsWith(previousJson)
? tc.argumentsJson
: previousJson + tc.argumentsJson;
const delta = accumulated.slice(previousJson.length);
toolPartialJson.set(toolCallId, accumulated);
block.arguments = parseStreamingJson(accumulated);
stream.push({
type: "toolcall_delta",
contentIndex: output.content.indexOf(block),
delta,
partial: output,
});
}
}
if (msg.stopReason !== StopReason.UNSPECIFIED) {
latestStopReason = msg.stopReason;
}
if (msg.usage) {
output.usage.input = Number(msg.usage.inputTokens);
output.usage.output = Number(msg.usage.outputTokens);
output.usage.cacheRead = Number(msg.usage.cacheReadTokens);
output.usage.cacheWrite = Number(msg.usage.cacheWriteTokens);
output.usage.totalTokens = output.usage.input + output.usage.output;
}
}
if (done) break;
}
endTextBlock();
endThinkingBlock();
for (const [id, block] of toolBlocks) {
block.arguments = parseStreamingJson(toolPartialJson.get(id));
stream.push({
type: "toolcall_end",
contentIndex: output.content.indexOf(block),
toolCall: block,
partial: output,
});
}
const doneReason: "stop" | "length" | "toolUse" =
toolBlocks.size > 0 ? "toolUse" : latestStopReason === StopReason.MAX_TOKENS ? "length" : "stop";
output.stopReason = doneReason;
calculateCost(model, output.usage);
output.duration = Date.now() - startTime;
if (firstTokenTime) output.ttft = firstTokenTime - startTime;
stream.push({ type: "done", reason: doneReason, message: output });
stream.end();
} catch (error) {
logger.error("devin: stream failed", { error: String(error) });
const errorReason: "aborted" | "error" = options?.signal?.aborted ? "aborted" : "error";
output.stopReason = errorReason;
output.errorStatus = extractHttpStatusFromError(error);
output.errorMessage = formatErrorMessageWithRetryAfter(error);
output.duration = Date.now() - startTime;
if (firstTokenTime) output.ttft = firstTokenTime - startTime;
stream.push({ type: "error", reason: errorReason, error: output });
stream.end();
}
})();
return stream;
};
function normalizeDevinSessionToken(apiKey: string | undefined): string {
if (!apiKey) return "";
return apiKey.startsWith(DEVIN_SESSION_TOKEN_PREFIX) ? apiKey : `${DEVIN_SESSION_TOKEN_PREFIX}${apiKey}`;
}
async function fetchDevinAuthMetadata(
apiKey: string,
baseUrl: string,
fetchImpl: NonNullable<StreamOptions["fetch"]>,
signal: AbortSignal | undefined,
): Promise<{ userJwt: string; baseUrl?: string }> {
const request = create(GetUserJwtRequestSchema, {
metadata: create(MetadataSchema, {
apiKey,
ideName: "windsurf",
ideVersion: DEVIN_IDE_VERSION,
extensionName: "windsurf",
extensionVersion: DEVIN_EXTENSION_VERSION,
locale: "en",
}),
});
const response = await fetchImpl(`${baseUrl}${DEVIN_AUTH_PATH}`, {
method: "POST",
headers: {
"content-type": "application/proto",
"connect-protocol-version": "1",
accept: "*/*",
},
body: toBinary(GetUserJwtRequestSchema, request),
signal,
});
const payload = new Uint8Array(await response.arrayBuffer());
if (!response.ok) {
throw Object.assign(
new Error(`Devin auth error ${response.status} ${response.statusText}: ${new TextDecoder().decode(payload)}`),
{ status: response.status },
);
}
const decoded = decodeDevinUserJwtResponse(payload);
if (!decoded.userJwt) {
throw new Error("Devin auth error: GetUserJwt returned an empty user JWT");
}
const customBaseUrl = decoded.customApiServerUrl.trim();
return { userJwt: decoded.userJwt, ...(customBaseUrl ? { baseUrl: customBaseUrl.replace(/\/+$/, "") } : undefined) };
}
function decodeDevinUserJwtResponse(payload: Uint8Array) {
try {
return fromBinary(GetUserJwtResponseSchema, payload);
} catch {
return fromBinary(GetUserJwtResponseSchema, gunzipSync(payload));
}
}
/**
* Build a {@link GetChatMessageRequest} for one Cascade turn. Auth rides inside
* `Metadata.apiKey`; the system prompt is the flattened `prompt` string and the
* conversation history maps to `chatMessagePrompts`.
*/
function buildDevinChatRequest(
model: Model<"devin-agent">,
context: Context,
options: DevinOptions | undefined,
apiKey: string,
userJwt: string,
) {
const cascadeId = options?.conversationId ?? options?.sessionId ?? crypto.randomUUID();
const stopPatterns =
options?.stopSequences && options.stopSequences.length > 0
? [...DEVIN_DEFAULT_STOP_PATTERNS, ...options.stopSequences]
: DEVIN_DEFAULT_STOP_PATTERNS;
return create(GetChatMessageRequestSchema, {
metadata: create(MetadataSchema, {
apiKey,
userJwt,
ideName: "windsurf",
ideVersion: DEVIN_IDE_VERSION,
extensionName: "windsurf",
extensionVersion: DEVIN_EXTENSION_VERSION,
locale: "en",
}),
prompt: (context.systemPrompt ?? []).join("\n\n"),
chatMessagePrompts: buildChatMessagePrompts(context.messages, cascadeId),
chatModelUid: options?.chatModelUid ?? model.requestModelId ?? model.id,
requestType: ChatMessageRequestType.CASCADE,
plannerMode: ConversationalPlannerMode.DEFAULT,
toolChoice: create(ChatToolChoiceSchema, { choice: { case: "optionName", value: "auto" } }),
systemPromptCacheOptions: create(PromptCacheOptionsSchema, { type: CacheControlType.EPHEMERAL }),
disableParallelToolCalls: false,
cascadeId,
executionId: crypto.randomUUID(),
configuration: create(CompletionConfigurationSchema, {
numCompletions: 1n,
maxTokens: BigInt(options?.maxTokens ?? model.maxTokens ?? 64000),
maxNewlines: 200n,
temperature: options?.temperature ?? 0.4,
firstTemperature: options?.temperature ?? 0.4,
topK: 50n,
topP: options?.topP ?? 1,
stopPatterns,
fimEotProbThreshold: 1,
}),
tools: (context.tools ?? []).map((tool: Tool) =>
create(ChatToolDefinitionSchema, {
name: tool.name,
description: tool.description,
jsonSchemaString: JSON.stringify(toolWireSchema(tool)),
strict: tool.strict ?? false,
}),
),
});
}
/** Map omp `Message` history onto Cascade `ChatMessagePrompt`s (USER / SYSTEM / TOOL channels). */
function buildChatMessagePrompts(messages: Message[], cascadeId: string): ChatMessagePrompt[] {
const prompts: ChatMessagePrompt[] = [];
for (const [index, msg] of messages.entries()) {
if (msg.role === "user" || msg.role === "developer") {
let promptText = "";
const images = [];
if (typeof msg.content === "string") {
promptText = msg.content;
} else {
for (const part of msg.content) {
if (part.type === "text") {
promptText += part.text;
} else if (part.type === "image") {
images.push(create(ImageDataSchema, { base64Data: part.data, mimeType: part.mimeType }));
}
}
}
prompts.push(
create(ChatMessagePromptSchema, {
messageId: deterministicMessageId(`${cascadeId}\0${index}\0${msg.role}`),
source: ChatMessageSource.USER,
prompt: promptText,
images,
}),
);
} else if (msg.role === "assistant") {
let promptText = "";
let thinkingText = "";
let signature = "";
const toolCalls: ChatToolCall[] = [];
for (const part of msg.content) {
if (part.type === "text") {
promptText += part.text;
} else if (part.type === "thinking") {
thinkingText += part.thinking;
if (!signature && part.thinkingSignature) signature = part.thinkingSignature;
} else if (part.type === "toolCall") {
toolCalls.push(
create(ChatToolCallSchema, {
id: part.id,
name: part.name,
argumentsJson: JSON.stringify(part.arguments),
}),
);
}
}
prompts.push(
create(ChatMessagePromptSchema, {
messageId: msg.responseId ?? `bot-${deterministicMessageId(`${cascadeId}\0${index}\0assistant`)}`,
source: ChatMessageSource.SYSTEM,
prompt: promptText,
thinking: thinkingText,
signature,
signatureType: "",
toolCalls,
}),
);
} else {
let resultText = "";
const images = [];
for (const part of msg.content) {
if (part.type === "text") {
resultText += part.text;
} else if (part.type === "image") {
images.push(create(ImageDataSchema, { base64Data: part.data, mimeType: part.mimeType }));
}
}
prompts.push(
create(ChatMessagePromptSchema, {
messageId: deterministicMessageId(`${cascadeId}\0${index}\0tool\0${msg.toolCallId}`),
source: ChatMessageSource.TOOL,
toolCallId: msg.toolCallId,
toolResultIsError: msg.isError,
prompt: resultText,
images,
}),
);
}
}
return prompts;
}
/**
* Deterministic UUID-shaped message id derived from a stable per-message seed.
* Seed is `${cascadeId}\0${index}\0${role}[...]` — prompt text is intentionally
* excluded so ids stay stable across content edits / history rebuilds.
*/
function deterministicMessageId(seed: string): string {
const hex = new Bun.CryptoHasher("sha256").update(seed).digest("hex");
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
}
/**
* Parse a Connect end-of-stream JSON trailer and return a human-readable error
* string when it carries `{ error: { code, message } }`, else `null`. The trailer
* is untrusted server output, so the shape is checked with guards rather than asserted.
*/
function readConnectTrailerError(text: string): string | null {
if (text.length === 0) return null;
let parsed: unknown;
try {
parsed = JSON.parse(text);
} catch {
return null;
}
if (!parsed || typeof parsed !== "object" || !("error" in parsed)) return null;
const err = parsed.error;
if (!err || typeof err !== "object") return null;
const code = "code" in err && typeof err.code === "string" ? err.code : "";
const message = "message" in err && typeof err.message === "string" ? err.message : "";
if (!code && !message) return null;
return `Devin stream error${code ? ` ${code}` : ""}: ${message}`;
}
@@ -0,0 +1,33 @@
version: v2
# Codegen is scoped to the api_server.proto transitive closure (the RPCs the
# devin provider actually uses). The rest of the reverse-engineered Codeium
# corpus is kept in this directory for reference/maintenance but is NOT
# generated. Vendored google/* WKTs are intentionally absent — buf bundles them.
inputs:
- directory: .
paths:
- buf/validate/validate.proto
- exa/analytics_pb/analytics.proto
- exa/api_server_pb/api_server.proto
- exa/auth_pb/auth.proto
- exa/auto_cascade_common_pb/auto_cascade_common.proto
- exa/bug_checker_pb/bug_checker.proto
- exa/cascade_plugins_pb/cascade_plugins.proto
- exa/chat_pb/chat.proto
- exa/code_edit/code_edit_pb/code_edit.proto
- exa/codeium_common_pb/codeium_common.proto
- exa/context_module_pb/context_module.proto
- exa/cortex_pb/cortex.proto
- exa/diff_action_pb/diff_action.proto
- exa/index_pb/index.proto
- exa/knowledge_base_pb/knowledge_base.proto
- exa/language_server_pb/language_server.proto
- exa/opensearch_clients_pb/opensearch_clients.proto
- exa/prompt_pb/prompt.proto
- exa/reactive_component_pb/reactive_component.proto
- exa/trust_pb/trust.proto
plugins:
- local: ../../../../../../node_modules/.bin/protoc-gen-es
out: ../../../../../catalog/src/discovery/devin-gen
opt:
- target=ts
@@ -0,0 +1,17 @@
version: v2
modules:
- path: .
lint:
use:
- STANDARD
except:
- COMMENT_FIELD
- COMMENT_MESSAGE
- COMMENT_ENUM
- COMMENT_ENUM_VALUE
- COMMENT_RPC
- COMMENT_SERVICE
- COMMENT_ONEOF
breaking:
use:
- FILE
@@ -0,0 +1,468 @@
package buf.validate;
import "google/protobuf/descriptor.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
enum Ignore {
IGNORE_UNSPECIFIED = 0;
IGNORE_IF_UNPOPULATED = 1;
IGNORE_IF_DEFAULT_VALUE = 2;
IGNORE_ALWAYS = 3;
reserved "IGNORE_EMPTYIGNORE_DEFAULT";
}
enum KnownRegex {
KNOWN_REGEX_UNSPECIFIED = 0;
KNOWN_REGEX_HTTP_HEADER_NAME = 1;
KNOWN_REGEX_HTTP_HEADER_VALUE = 2;
}
message Rule {
optional string id = 1;
optional string message = 2;
optional string expression = 3;
}
message MessageRules {
optional bool disabled = 1;
repeated .buf.validate.Rule cel = 3;
}
message OneofRules {
optional bool required = 1;
}
message FieldRules {
reserved 24;
reserved 26;
reserved "skipped", "ignore_empty";
repeated .buf.validate.Rule cel = 23;
optional bool required = 25;
optional .buf.validate.Ignore ignore = 27;
oneof type {
.buf.validate.FloatRules float = 1;
.buf.validate.DoubleRules double = 2;
.buf.validate.Int32Rules int32 = 3;
.buf.validate.Int64Rules int64 = 4;
.buf.validate.UInt32Rules uint32 = 5;
.buf.validate.UInt64Rules uint64 = 6;
.buf.validate.SInt32Rules sint32 = 7;
.buf.validate.SInt64Rules sint64 = 8;
.buf.validate.Fixed32Rules fixed32 = 9;
.buf.validate.Fixed64Rules fixed64 = 10;
.buf.validate.SFixed32Rules sfixed32 = 11;
.buf.validate.SFixed64Rules sfixed64 = 12;
.buf.validate.BoolRules bool = 13;
.buf.validate.StringRules string = 14;
.buf.validate.BytesRules bytes = 15;
.buf.validate.EnumRules enum = 16;
.buf.validate.RepeatedRules repeated = 18;
.buf.validate.MapRules map = 19;
.buf.validate.AnyRules any = 20;
.buf.validate.DurationRules duration = 21;
.buf.validate.TimestampRules timestamp = 22;
}
}
message PredefinedRules {
reserved 24;
reserved 26;
reserved "skippedignore_empty";
repeated .buf.validate.Rule cel = 1;
}
message FloatRules {
extensions 1000 to max;
optional float const = 1;
oneof less_than {
float lt = 2;
float lte = 3;
}
oneof greater_than {
float gt = 4;
float gte = 5;
}
repeated float in = 6;
repeated float not_in = 7;
optional bool finite = 8;
repeated float example = 9;
}
message DoubleRules {
extensions 1000 to max;
optional double const = 1;
oneof less_than {
double lt = 2;
double lte = 3;
}
oneof greater_than {
double gt = 4;
double gte = 5;
}
repeated double in = 6;
repeated double not_in = 7;
optional bool finite = 8;
repeated double example = 9;
}
message Int32Rules {
extensions 1000 to max;
optional int32 const = 1;
oneof less_than {
int32 lt = 2;
int32 lte = 3;
}
oneof greater_than {
int32 gt = 4;
int32 gte = 5;
}
repeated int32 in = 6;
repeated int32 not_in = 7;
repeated int32 example = 8;
}
message Int64Rules {
extensions 1000 to max;
optional int64 const = 1;
oneof less_than {
int64 lt = 2;
int64 lte = 3;
}
oneof greater_than {
int64 gt = 4;
int64 gte = 5;
}
repeated int64 in = 6;
repeated int64 not_in = 7;
repeated int64 example = 9;
}
message UInt32Rules {
extensions 1000 to max;
optional uint32 const = 1;
oneof less_than {
uint32 lt = 2;
uint32 lte = 3;
}
oneof greater_than {
uint32 gt = 4;
uint32 gte = 5;
}
repeated uint32 in = 6;
repeated uint32 not_in = 7;
repeated uint32 example = 8;
}
message UInt64Rules {
extensions 1000 to max;
optional uint64 const = 1;
oneof less_than {
uint64 lt = 2;
uint64 lte = 3;
}
oneof greater_than {
uint64 gt = 4;
uint64 gte = 5;
}
repeated uint64 in = 6;
repeated uint64 not_in = 7;
repeated uint64 example = 8;
}
message SInt32Rules {
extensions 1000 to max;
optional sint32 const = 1;
oneof less_than {
sint32 lt = 2;
sint32 lte = 3;
}
oneof greater_than {
sint32 gt = 4;
sint32 gte = 5;
}
repeated sint32 in = 6;
repeated sint32 not_in = 7;
repeated sint32 example = 8;
}
message SInt64Rules {
extensions 1000 to max;
optional sint64 const = 1;
oneof less_than {
sint64 lt = 2;
sint64 lte = 3;
}
oneof greater_than {
sint64 gt = 4;
sint64 gte = 5;
}
repeated sint64 in = 6;
repeated sint64 not_in = 7;
repeated sint64 example = 8;
}
message Fixed32Rules {
extensions 1000 to max;
optional fixed32 const = 1;
oneof less_than {
fixed32 lt = 2;
fixed32 lte = 3;
}
oneof greater_than {
fixed32 gt = 4;
fixed32 gte = 5;
}
repeated fixed32 in = 6;
repeated fixed32 not_in = 7;
repeated fixed32 example = 8;
}
message Fixed64Rules {
extensions 1000 to max;
optional fixed64 const = 1;
oneof less_than {
fixed64 lt = 2;
fixed64 lte = 3;
}
oneof greater_than {
fixed64 gt = 4;
fixed64 gte = 5;
}
repeated fixed64 in = 6;
repeated fixed64 not_in = 7;
repeated fixed64 example = 8;
}
message SFixed32Rules {
extensions 1000 to max;
optional sfixed32 const = 1;
oneof less_than {
sfixed32 lt = 2;
sfixed32 lte = 3;
}
oneof greater_than {
sfixed32 gt = 4;
sfixed32 gte = 5;
}
repeated sfixed32 in = 6;
repeated sfixed32 not_in = 7;
repeated sfixed32 example = 8;
}
message SFixed64Rules {
extensions 1000 to max;
optional sfixed64 const = 1;
oneof less_than {
sfixed64 lt = 2;
sfixed64 lte = 3;
}
oneof greater_than {
sfixed64 gt = 4;
sfixed64 gte = 5;
}
repeated sfixed64 in = 6;
repeated sfixed64 not_in = 7;
repeated sfixed64 example = 8;
}
message BoolRules {
extensions 1000 to max;
optional bool const = 1;
repeated bool example = 2;
}
message StringRules {
extensions 1000 to max;
optional string const = 1;
optional uint64 len = 19;
optional uint64 min_len = 2;
optional uint64 max_len = 3;
optional uint64 len_bytes = 20;
optional uint64 min_bytes = 4;
optional uint64 max_bytes = 5;
optional string pattern = 6;
optional string prefix = 7;
optional string suffix = 8;
optional string contains = 9;
optional string not_contains = 23;
repeated string in = 10;
repeated string not_in = 11;
oneof well_known {
bool email = 12;
bool hostname = 13;
bool ip = 14;
bool ipv4 = 15;
bool ipv6 = 16;
bool uri = 17;
bool uri_ref = 18;
bool address = 21;
bool uuid = 22;
bool tuuid = 33;
bool ip_with_prefixlen = 26;
bool ipv4_with_prefixlen = 27;
bool ipv6_with_prefixlen = 28;
bool ip_prefix = 29;
bool ipv4_prefix = 30;
bool ipv6_prefix = 31;
bool host_and_port = 32;
.buf.validate.KnownRegex well_known_regex = 24;
}
optional bool strict = 25;
repeated string example = 34;
}
message BytesRules {
extensions 1000 to max;
optional bytes const = 1;
optional uint64 len = 13;
optional uint64 min_len = 2;
optional uint64 max_len = 3;
optional string pattern = 4;
optional bytes prefix = 5;
optional bytes suffix = 6;
optional bytes contains = 7;
repeated bytes in = 8;
repeated bytes not_in = 9;
oneof well_known {
bool ip = 10;
bool ipv4 = 11;
bool ipv6 = 12;
}
repeated bytes example = 14;
}
message EnumRules {
extensions 1000 to max;
optional int32 const = 1;
optional bool defined_only = 2;
repeated int32 in = 3;
repeated int32 not_in = 4;
repeated int32 example = 5;
}
message RepeatedRules {
extensions 1000 to max;
optional uint64 min_items = 1;
optional uint64 max_items = 2;
optional bool unique = 3;
optional .buf.validate.FieldRules items = 4;
}
message MapRules {
extensions 1000 to max;
optional uint64 min_pairs = 1;
optional uint64 max_pairs = 2;
optional .buf.validate.FieldRules keys = 4;
optional .buf.validate.FieldRules values = 5;
}
message AnyRules {
repeated string in = 2;
repeated string not_in = 3;
}
message DurationRules {
extensions 1000 to max;
optional .google.protobuf.Duration const = 2;
oneof less_than {
.google.protobuf.Duration lt = 3;
.google.protobuf.Duration lte = 4;
}
oneof greater_than {
.google.protobuf.Duration gt = 5;
.google.protobuf.Duration gte = 6;
}
repeated .google.protobuf.Duration in = 7;
repeated .google.protobuf.Duration not_in = 8;
repeated .google.protobuf.Duration example = 9;
}
message TimestampRules {
extensions 1000 to max;
optional .google.protobuf.Timestamp const = 2;
oneof less_than {
.google.protobuf.Timestamp lt = 3;
.google.protobuf.Timestamp lte = 4;
bool lt_now = 7;
}
oneof greater_than {
.google.protobuf.Timestamp gt = 5;
.google.protobuf.Timestamp gte = 6;
bool gt_now = 8;
}
optional .google.protobuf.Duration within = 9;
repeated .google.protobuf.Timestamp example = 10;
}
message Violations {
repeated .buf.validate.Violation violations = 1;
}
message Violation {
reserved 1;
reserved "field_path";
optional .buf.validate.FieldPath field = 5;
optional .buf.validate.FieldPath rule = 6;
optional string rule_id = 2;
optional string message = 3;
optional bool for_key = 4;
}
message FieldPath {
repeated .buf.validate.FieldPathElement elements = 1;
}
message FieldPathElement {
optional int32 field_number = 1;
optional string field_name = 2;
optional .google.protobuf.FieldDescriptorProto.Type field_type = 3;
optional .google.protobuf.FieldDescriptorProto.Type key_type = 4;
optional .google.protobuf.FieldDescriptorProto.Type value_type = 5;
oneof subscript {
uint64 index = 6;
bool bool_key = 7;
int64 int_key = 8;
uint64 uint_key = 9;
string string_key = 10;
}
}
extend .google.protobuf.MessageOptions {
optional .buf.validate.MessageRules message = 1159;
}
extend .google.protobuf.OneofOptions {
optional .buf.validate.OneofRules oneof = 1159;
}
extend .google.protobuf.FieldOptions {
optional .buf.validate.FieldRules field = 1159;
}
extend .google.protobuf.FieldOptions {
optional .buf.validate.PredefinedRules predefined = 1160;
}
@@ -0,0 +1,103 @@
syntax = "proto3";
package cel.expr;
import "cel/expr/syntax.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/struct.proto";
message CheckedExpr {
map<int64, .cel.expr.Reference> reference_map = 2;
map<int64, .cel.expr.Type> type_map = 3;
.cel.expr.SourceInfo source_info = 5;
string expr_version = 6;
.cel.expr.Expr expr = 4;
}
message Type {
message ListType {
.cel.expr.Type elem_type = 1;
}
message MapType {
.cel.expr.Type key_type = 1;
.cel.expr.Type value_type = 2;
}
message FunctionType {
.cel.expr.Type result_type = 1;
repeated .cel.expr.Type arg_types = 2;
}
message AbstractType {
string name = 1;
repeated .cel.expr.Type parameter_types = 2;
}
enum PrimitiveType {
PRIMITIVE_TYPE_UNSPECIFIED = 0;
BOOL = 1;
INT64 = 2;
UINT64 = 3;
DOUBLE = 4;
STRING = 5;
BYTES = 6;
}
enum WellKnownType {
WELL_KNOWN_TYPE_UNSPECIFIED = 0;
ANY = 1;
TIMESTAMP = 2;
DURATION = 3;
}
oneof type_kind {
.google.protobuf.Empty dyn = 1;
.google.protobuf.NullValue null = 2;
.cel.expr.Type.PrimitiveType primitive = 3;
.cel.expr.Type.PrimitiveType wrapper = 4;
.cel.expr.Type.WellKnownType well_known = 5;
.cel.expr.Type.ListType list_type = 6;
.cel.expr.Type.MapType map_type = 7;
.cel.expr.Type.FunctionType function = 8;
string message_type = 9;
string type_param = 10;
.cel.expr.Type type = 11;
.google.protobuf.Empty error = 12;
.cel.expr.Type.AbstractType abstract_type = 14;
}
}
message Decl {
message IdentDecl {
.cel.expr.Type type = 1;
.cel.expr.Constant value = 2;
string doc = 3;
}
message FunctionDecl {
message Overload {
string overload_id = 1;
repeated .cel.expr.Type params = 2;
repeated string type_params = 3;
.cel.expr.Type result_type = 4;
bool is_instance_function = 5;
string doc = 6;
}
repeated .cel.expr.Decl.FunctionDecl.Overload overloads = 1;
string doc = 2;
}
string name = 1;
oneof decl_kind {
.cel.expr.Decl.IdentDecl ident = 2;
.cel.expr.Decl.FunctionDecl function = 3;
}
}
message Reference {
string name = 1;
repeated string overload_id = 3;
.cel.expr.Constant value = 4;
}
@@ -0,0 +1,38 @@
syntax = "proto3";
package cel.expr;
import "google/protobuf/any.proto";
import "cel/expr/value.proto";
message EvalState {
message Result {
int64 expr = 1;
int64 value = 2;
}
repeated .cel.expr.ExprValue values = 1;
repeated .cel.expr.EvalState.Result results = 3;
}
message ExprValue {
oneof kind {
.cel.expr.Value value = 1;
.cel.expr.ErrorSet error = 2;
.cel.expr.UnknownSet unknown = 3;
}
}
message ErrorSet {
repeated .cel.expr.Status errors = 1;
}
message Status {
int32 code = 1;
string message = 2;
repeated .google.protobuf.Any details = 3;
}
message UnknownSet {
repeated int64 exprs = 1;
}
@@ -0,0 +1,15 @@
syntax = "proto3";
package cel.expr;
import "cel/expr/value.proto";
message Explain {
message ExprStep {
int64 id = 1;
int32 value_index = 2;
}
repeated .cel.expr.Value values = 1;
repeated .cel.expr.Explain.ExprStep expr_steps = 2;
}
@@ -0,0 +1,113 @@
syntax = "proto3";
package cel.expr;
import "google/protobuf/duration.proto";
import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
message ParsedExpr {
.cel.expr.Expr expr = 2;
.cel.expr.SourceInfo source_info = 3;
}
message Expr {
message Ident {
string name = 1;
}
message Select {
.cel.expr.Expr operand = 1;
string field = 2;
bool test_only = 3;
}
message Call {
.cel.expr.Expr target = 1;
string function = 2;
repeated .cel.expr.Expr args = 3;
}
message CreateList {
repeated .cel.expr.Expr elements = 1;
repeated int32 optional_indices = 2;
}
message CreateStruct {
message Entry {
int64 id = 1;
oneof key_kind {
string field_key = 2;
.cel.expr.Expr map_key = 3;
}
.cel.expr.Expr value = 4;
bool optional_entry = 5;
}
string message_name = 1;
repeated .cel.expr.Expr.CreateStruct.Entry entries = 2;
}
message Comprehension {
string iter_var = 1;
string iter_var2 = 8;
.cel.expr.Expr iter_range = 2;
string accu_var = 3;
.cel.expr.Expr accu_init = 4;
.cel.expr.Expr loop_condition = 5;
.cel.expr.Expr loop_step = 6;
.cel.expr.Expr result = 7;
}
int64 id = 2;
oneof expr_kind {
.cel.expr.Constant const_expr = 3;
.cel.expr.Expr.Ident ident_expr = 4;
.cel.expr.Expr.Select select_expr = 5;
.cel.expr.Expr.Call call_expr = 6;
.cel.expr.Expr.CreateList list_expr = 7;
.cel.expr.Expr.CreateStruct struct_expr = 8;
.cel.expr.Expr.Comprehension comprehension_expr = 9;
}
}
message Constant {
oneof constant_kind {
.google.protobuf.NullValue null_value = 1;
bool bool_value = 2;
int64 int64_value = 3;
uint64 uint64_value = 4;
double double_value = 5;
string string_value = 6;
bytes bytes_value = 7;
.google.protobuf.Duration duration_value = 8 [deprecated = true];
.google.protobuf.Timestamp timestamp_value = 9 [deprecated = true];
}
}
message SourceInfo {
message Extension {
message Version {
int64 major = 1;
int64 minor = 2;
}
enum Component {
COMPONENT_UNSPECIFIED = 0;
COMPONENT_PARSER = 1;
COMPONENT_TYPE_CHECKER = 2;
COMPONENT_RUNTIME = 3;
}
string id = 1;
repeated .cel.expr.SourceInfo.Extension.Component affected_components = 2;
.cel.expr.SourceInfo.Extension.Version version = 3;
}
string syntax_version = 1;
string location = 2;
repeated int32 line_offsets = 3;
map<int64, int32> positions = 4;
map<int64, .cel.expr.Expr> macro_calls = 5;
repeated .cel.expr.SourceInfo.Extension extensions = 6;
}
@@ -0,0 +1,41 @@
syntax = "proto3";
package cel.expr;
import "google/protobuf/any.proto";
import "google/protobuf/struct.proto";
message Value {
oneof kind {
.google.protobuf.NullValue null_value = 1;
bool bool_value = 2;
int64 int64_value = 3;
uint64 uint64_value = 4;
double double_value = 5;
string string_value = 6;
bytes bytes_value = 7;
.cel.expr.EnumValue enum_value = 9;
.google.protobuf.Any object_value = 10;
.cel.expr.MapValue map_value = 11;
.cel.expr.ListValue list_value = 12;
string type_value = 15;
}
}
message EnumValue {
string type = 1;
int32 value = 2;
}
message ListValue {
repeated .cel.expr.Value values = 1;
}
message MapValue {
message Entry {
.cel.expr.Value key = 1;
.cel.expr.Value value = 2;
}
repeated .cel.expr.MapValue.Entry entries = 1;
}
@@ -0,0 +1,11 @@
syntax = "proto3";
package grpc.status.v1;
import "google/protobuf/any.proto";
message Status {
int32 code = 1;
string message = 2;
repeated .google.protobuf.Any details = 3;
}
@@ -0,0 +1,56 @@
syntax = "proto3";
package cockroach.errorspb;
import "google/protobuf/any.proto";
enum MessageType {
PREFIX = 0;
FULL_MESSAGE = 1;
}
message EncodedError {
oneof error {
.cockroach.errorspb.EncodedErrorLeaf leaf = 1;
.cockroach.errorspb.EncodedWrapper wrapper = 2;
}
}
message EncodedErrorLeaf {
string message = 1;
.cockroach.errorspb.EncodedErrorDetails details = 2;
repeated .cockroach.errorspb.EncodedError multierror_causes = 3;
}
message EncodedErrorDetails {
string original_type_name = 1;
.cockroach.errorspb.ErrorTypeMark error_type_mark = 2;
repeated string reportable_payload = 3;
.google.protobuf.Any full_details = 4;
}
message EncodedWrapper {
.cockroach.errorspb.EncodedError cause = 1;
string message = 2;
.cockroach.errorspb.EncodedErrorDetails details = 3;
.cockroach.errorspb.MessageType message_type = 4;
}
message ErrorTypeMark {
string family_name = 1;
string extension = 2;
}
message StringsPayload {
repeated string details = 1;
}
message ErrnoPayload {
int64 orig_errno = 1;
string arch = 2;
bool is_permission = 3;
bool is_exist = 4;
bool is_not_exist = 5;
bool is_timeout = 6;
bool is_temporary = 7;
}
@@ -0,0 +1,7 @@
syntax = "proto3";
package cockroach.errorspb;
message StringPayload {
string msg = 1;
}
@@ -0,0 +1,10 @@
syntax = "proto3";
package cockroach.errorspb;
import "errorspb/errors.proto";
message MarkPayload {
string msg = 1;
repeated .cockroach.errorspb.ErrorTypeMark types = 2;
}
@@ -0,0 +1,12 @@
syntax = "proto3";
package cockroach.errorspb;
message TagsPayload {
repeated .cockroach.errorspb.TagPayload tags = 1;
}
message TagPayload {
string tag = 1;
string value = 2;
}
@@ -0,0 +1,6 @@
syntax = "proto3";
package cockroach.errorspb;
message TestError {
}
@@ -0,0 +1,188 @@
syntax = "proto3";
package exa.analytics_pb;
import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/context_module_pb/context_module.proto";
import "exa/cortex_pb/cortex.proto";
import "exa/prompt_pb/prompt.proto";
import "google/protobuf/timestamp.proto";
message RecordCommandUsageRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string command = 2;
string selection = 3;
.exa.codeium_common_pb.CommandRequestSource request_source = 4;
string prompt_id = 5;
string completion_id = 6;
string completion = 7;
string prompt = 8;
.exa.codeium_common_pb.Model requested_model_id = 9;
.exa.codeium_common_pb.StopReason stop_reason = 10;
.exa.codeium_common_pb.Language language = 11;
.exa.codeium_common_pb.ProviderSource provider_source = 12;
.exa.prompt_pb.UnifiedPromptComponents command_prompt_components = 13;
.exa.cortex_pb.CortexTrajectoryReference cortex_trajectory_reference = 14;
.exa.codeium_common_pb.SuperCompleteFilterReason super_complete_filter_reason = 15;
.exa.codeium_common_pb.SupercompleteTriggerCondition supercomplete_trigger_condition = 17;
repeated .exa.codeium_common_pb.PromptStageLatency prompt_stage_latencies = 16;
.exa.codeium_common_pb.CompletionProfile completion_profile = 18;
int32 char_insertions = 19;
int32 char_deletions = 20;
repeated string trajectory_step_oids = 21;
}
message RecordCommandUsageResponse {
}
message BatchRecordPromptsRequest {
repeated .exa.analytics_pb.RecordPromptRequest prompts = 1;
}
message BatchRecordPromptsResponse {
}
message RecordPromptRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.codeium_common_pb.CompletionsRequest request = 2;
string prompt_id = 3;
.google.protobuf.Timestamp timestamp = 4;
string ip = 5;
string inference_address = 6;
.exa.codeium_common_pb.ProviderSource provider_source = 7;
string api_server_address = 8;
.exa.codeium_common_pb.Model firstline_model = 9;
.exa.codeium_common_pb.PromptComponents prompt_components = 10;
bool is_server_side_prompt = 11;
.exa.prompt_pb.UnifiedPromptComponents unified_prompt_components = 12;
.exa.cortex_pb.CortexTrajectoryReference cortex_trajectory_reference = 13;
}
message RecordCompletionsRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
repeated .exa.codeium_common_pb.CompletionWithLatencyInfo completions_with_latency_info = 2;
string prompt_id = 3;
uint64 prompt_length = 4;
.exa.codeium_common_pb.ProviderSource provider_source = 5;
string relative_path = 6;
.exa.codeium_common_pb.Repository repository = 7;
string model_tag = 8;
.google.protobuf.Timestamp timestamp = 9;
}
message RecordCompletionsResponse {
}
message BatchRecordCompletionsRequest {
repeated .exa.analytics_pb.RecordCompletionsRequest completions = 1;
}
message BatchRecordCompletionsResponse {
}
message RecordContextToPromptRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.context_module_pb.ContextUseCase prompt_user = 2;
string chat_message_id = 3;
repeated .exa.context_module_pb.RetrievedCodeContextItemMetadata retrieved_code_context_item_metadata = 4;
uint64 latency_ms = 5;
.google.protobuf.Timestamp timestamp = 6;
.exa.cortex_pb.CortexWorkflowState cortex_state = 7;
string prompt_id = 8;
}
message RecordContextToPromptResponse {
}
message RecordCortexTrajectoryRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string trajectory_id = 2;
string cascade_id = 5;
optional string arena_id = 8;
.exa.cortex_pb.CortexTrajectoryType trajectory_type = 3;
.exa.cortex_pb.CortexTrajectorySource trajectory_source = 7;
repeated .exa.cortex_pb.CortexTrajectoryReference parents = 4;
.exa.cortex_pb.CortexTrajectoryMetadata trajectory_metadata = 6;
}
message RecordCortexTrajectoryResponse {
}
message RecordCortexTrajectoryStepRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.cortex_pb.CortexTrajectoryStep step = 2;
.exa.cortex_pb.CortexTrajectoryReference reference = 3;
.exa.cortex_pb.AcknowledgementType acknowledgement_type = 4;
}
message RecordCortexTrajectoryStepResponse {
}
message RecordTabTrajectoryStepRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.cortex_pb.CortexTrajectoryStep step = 2;
.exa.cortex_pb.CortexTrajectoryReference reference = 3;
string oid = 4;
repeated .exa.analytics_pb.TabTrajectoryStepEntry steps = 5;
}
message TabTrajectoryStepEntry {
.exa.cortex_pb.CortexTrajectoryStep step = 1;
.exa.cortex_pb.CortexTrajectoryReference reference = 2;
string oid = 3;
}
message RecordTabTrajectoryStepResponse {
bool uploaded = 1;
repeated string uploaded_oids = 2;
}
message RecordArenaModeTrajectoryDetailsRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string arena_id = 2;
string cascade_id = 3;
string trajectory_id = 4;
uint32 step_index = 5;
.exa.cortex_pb.CortexStepType step_type = 6;
.exa.cortex_pb.AcknowledgementType acknowledgement_type = 7;
.exa.codeium_common_pb.Model model = 8;
string label = 9;
.exa.codeium_common_pb.ModelProvider model_provider = 10;
}
message RecordArenaModeTrajectoryDetailsResponse {
}
message RecordRawCompletionRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string trajectory_id = 2;
string cascade_id = 3;
int32 step_index = 4;
string model_name = 5;
string raw_prompt = 6;
string raw_response = 7;
int64 latency = 8;
string error = 9;
.google.protobuf.Timestamp timestamp = 10;
string prompt_id = 11;
.exa.codeium_common_pb.ProviderSource provider_source = 12;
}
message BatchRecordRawCompletionsRequest {
repeated .exa.analytics_pb.RecordRawCompletionRequest records = 1;
}
message BatchRecordRawCompletionsResponse {
}
service AnalyticsService {
rpc RecordCommandUsage (.exa.analytics_pb.RecordCommandUsageRequest) returns (.exa.analytics_pb.RecordCommandUsageResponse);
rpc RecordCompletions (.exa.analytics_pb.RecordCompletionsRequest) returns (.exa.analytics_pb.RecordCompletionsResponse);
rpc RecordContextToPrompt (.exa.analytics_pb.RecordContextToPromptRequest) returns (.exa.analytics_pb.RecordContextToPromptResponse);
rpc RecordCortexTrajectory (.exa.analytics_pb.RecordCortexTrajectoryRequest) returns (.exa.analytics_pb.RecordCortexTrajectoryResponse);
rpc RecordCortexTrajectoryStep (.exa.analytics_pb.RecordCortexTrajectoryStepRequest) returns (.exa.analytics_pb.RecordCortexTrajectoryStepResponse);
rpc RecordTabTrajectoryStep (.exa.analytics_pb.RecordTabTrajectoryStepRequest) returns (.exa.analytics_pb.RecordTabTrajectoryStepResponse);
rpc BatchRecordPrompts (.exa.analytics_pb.BatchRecordPromptsRequest) returns (.exa.analytics_pb.BatchRecordPromptsResponse);
rpc BatchRecordCompletions (.exa.analytics_pb.BatchRecordCompletionsRequest) returns (.exa.analytics_pb.BatchRecordCompletionsResponse);
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,19 @@
syntax = "proto3";
package exa.auth_pb;
import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
message GetUserJwtRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
}
message GetUserJwtResponse {
string user_jwt = 1;
string custom_api_server_url = 2;
}
service AuthService {
rpc GetUserJwt (.exa.auth_pb.GetUserJwtRequest) returns (.exa.auth_pb.GetUserJwtResponse);
}
@@ -0,0 +1,79 @@
syntax = "proto3";
package exa.auto_cascade_common_pb;
import "buf/validate/validate.proto";
import "exa/cortex_pb/cortex.proto";
import "google/protobuf/timestamp.proto";
enum BranchStatus {
BRANCH_STATUS_UNSPECIFIED = 0;
BRANCH_STATUS_NO_PR = 1;
BRANCH_STATUS_PR_OPEN = 2;
BRANCH_STATUS_PR_CLOSED = 3;
BRANCH_STATUS_PR_MERGED = 4;
BRANCH_STATUS_HAS_SUGGESTION = 5;
}
enum CommentType {
COMMENT_TYPE_UNSPECIFIED = 0;
COMMENT_TYPE_MANUAL_REVIEW_TRIGGER = 1;
COMMENT_TYPE_LGTM = 2;
COMMENT_TYPE_REVIEW_BODY = 3;
COMMENT_TYPE_REVIEW_COMMENT = 4;
}
enum GithubCICheckStatus {
GITHUB_CI_CHECK_STATUS_UNSPECIFIED = 0;
GITHUB_CI_CHECK_STATUS_SUCCESS = 1;
GITHUB_CI_CHECK_STATUS_FAILED = 2;
GITHUB_CI_CHECK_STATUS_PENDING = 3;
}
enum GithubPullRequestBranchStatus {
GITHUB_PULL_REQUEST_BRANCH_STATUS_UNSPECIFIED = 0;
GITHUB_PULL_REQUEST_BRANCH_STATUS_OPEN = 1;
GITHUB_PULL_REQUEST_BRANCH_STATUS_CLOSED = 2;
GITHUB_PULL_REQUEST_BRANCH_STATUS_DRAFT = 3;
GITHUB_PULL_REQUEST_BRANCH_STATUS_MERGED = 4;
}
message GitRepoInfo {
string repo_name = 1;
string branch = 2;
string commit = 3;
string pr_url = 4;
}
message SessionInfo {
string session_id = 1;
string explanation = 2;
string ssh_url = 3;
.exa.cortex_pb.CascadeRunStatus status = 4;
string summary = 5;
.exa.cortex_pb.CortexTrajectory trajectory = 6;
string session_key = 7;
.google.protobuf.Timestamp created_at = 8;
repeated .exa.auto_cascade_common_pb.GitRepoInfo git_repos = 9;
.google.protobuf.Timestamp updated_at = 10;
}
message SessionInfos {
map<string, .exa.auto_cascade_common_pb.SessionInfo> sessions = 1;
}
message GithubPullRequestInfo {
string url = 1;
string owner = 2;
string repo = 3;
string title = 4;
string number = 5;
.exa.auto_cascade_common_pb.GithubCICheckStatus ci_status = 6;
.exa.auto_cascade_common_pb.GithubPullRequestBranchStatus branch_status = 7;
.google.protobuf.Timestamp updated_at = 8;
}
message GithubInstallationInfo {
string installation_id = 1;
string organization_name = 2;
}
@@ -0,0 +1,32 @@
syntax = "proto3";
package exa.browser_preview_pb;
import "exa/codeium_common_pb/codeium_common.proto";
message SendDOMElementRequest {
.exa.codeium_common_pb.DOMElementScopeItem dom_element = 1;
}
message SendDOMElementResponse {
}
message SendScreenshotRequest {
.exa.codeium_common_pb.ImageData image = 1;
}
message SendScreenshotResponse {
}
message SendConsoleOutputRequest {
.exa.codeium_common_pb.ConsoleLogScopeItem console_log = 1;
}
message SendConsoleOutputResponse {
}
service BrowserPreviewService {
rpc SendDOMElement (.exa.browser_preview_pb.SendDOMElementRequest) returns (.exa.browser_preview_pb.SendDOMElementResponse);
rpc SendScreenshot (.exa.browser_preview_pb.SendScreenshotRequest) returns (.exa.browser_preview_pb.SendScreenshotResponse);
rpc SendConsoleOutput (.exa.browser_preview_pb.SendConsoleOutputRequest) returns (.exa.browser_preview_pb.SendConsoleOutputResponse);
}
@@ -0,0 +1,22 @@
syntax = "proto3";
package exa.bug_checker_pb;
message Fix {
string old_str = 1;
string new_str = 2;
}
message Bug {
string id = 1;
string file = 2;
int32 start = 3;
int32 end = 4;
string title = 5;
string description = 6;
string severity = 7;
string resolution = 8;
double confidence = 9;
repeated string categories = 10;
.exa.bug_checker_pb.Fix fix = 11;
}
@@ -0,0 +1,262 @@
syntax = "proto3";
package exa.cascade_plugins_pb;
import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
message CascadePluginTemplate {
string title = 1;
string id = 2;
string link = 3;
string description = 4;
map<string, .exa.cascade_plugins_pb.CascadePluginCommand> commands = 5 [deprecated = true];
oneof configuration {
.exa.cascade_plugins_pb.CascadePluginLocalConfig local = 9;
.exa.cascade_plugins_pb.CascadePluginRemoteConfig remote = 10;
}
int64 installation_count = 6;
string trust_level = 7;
string readme = 8;
}
message CascadePluginLocalConfig {
map<string, .exa.cascade_plugins_pb.CascadePluginCommand> commands = 5;
}
message CascadePluginCommand {
.exa.cascade_plugins_pb.CascadePluginCommandTemplate template = 1;
repeated .exa.cascade_plugins_pb.CascadePluginCommandVariable variables = 2;
}
message CascadePluginCommandTemplate {
string command = 1;
repeated string args = 2;
map<string, string> env = 3;
}
message CascadePluginCommandVariable {
string name = 1;
string title = 2;
string description = 3;
string link = 4;
string type = 5;
}
message CascadePluginRemoteConfig {
.exa.cascade_plugins_pb.CascadePluginRemoteConfigTemplate template = 1;
}
message CascadePluginRemoteConfigTemplate {
string server_url = 1;
map<string, string> headers = 2;
}
message GetAvailableCascadePluginsRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string os = 2;
optional string search_query = 3 [deprecated = true];
}
message GetAvailableCascadePluginsResponse {
repeated .exa.cascade_plugins_pb.CascadePluginTemplate plugins = 1;
}
message InstallCascadePluginRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string plugin_id = 2;
}
message InstallCascadePluginResponse {
int64 installation_count = 1;
}
message GetCascadePluginByIdRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string os = 2;
string plugin_id = 3;
}
message GetCascadePluginByIdResponse {
.exa.cascade_plugins_pb.CascadePluginTemplate plugin = 1;
}
message McpClientInfo {
string client_id = 1;
string client_secret = 2;
}
message GetMcpClientInfosRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
}
message GetMcpClientInfosResponse {
map<string, .exa.cascade_plugins_pb.McpClientInfo> client_infos = 1;
}
message GetMcpRegistryServersRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string search_query = 2;
int32 limit = 3;
string cursor = 4;
string registry_url = 5;
}
message GetMcpRegistryServersResponse {
repeated .exa.cascade_plugins_pb.McpRegistryServer servers = 1;
int32 count = 2;
string next_cursor = 3;
}
message McpRegistryApiResponse {
.exa.cascade_plugins_pb.McpRegistryApiResponseMetadata metadata = 1;
repeated .exa.cascade_plugins_pb.McpRegistryApiEntry servers = 2;
}
message McpRegistryApiResponseMetadata {
int32 count = 1;
string next_cursor = 2;
}
message McpRegistryApiEntry {
.exa.cascade_plugins_pb.McpRegistryOfficialMeta meta = 1;
.exa.cascade_plugins_pb.McpRegistryServer server = 2;
}
message McpRegistryOfficialMeta {
.exa.cascade_plugins_pb.McpRegistryOfficialMetaDetail official = 1;
}
message McpRegistryOfficialMetaDetail {
bool is_latest = 1;
string status = 2;
string status_message = 3;
string published_at = 4;
string updated_at = 5;
}
message McpRegistryServer {
string name = 1;
string title = 2;
string description = 3;
string version = 4;
string website_url = 5;
.exa.cascade_plugins_pb.McpRegistryRepository repository = 6;
repeated .exa.cascade_plugins_pb.McpRegistryPackage packages = 7;
repeated .exa.cascade_plugins_pb.McpRegistryRemote remotes = 8;
repeated .exa.cascade_plugins_pb.McpRegistryIcon icons = 9;
bool is_latest = 10;
string status = 11;
string schema = 12;
}
message McpRegistryRepository {
string url = 1;
string source = 2;
string id = 3;
string subfolder = 4;
}
message McpRegistryIcon {
string src = 1;
string mime_type = 2;
string theme = 3;
repeated string sizes = 4;
}
message McpRegistryPackage {
string registry_type = 1;
string identifier = 2;
string version = 3;
string runtime_hint = 4;
repeated .exa.cascade_plugins_pb.McpRegistryEnvironmentVariable environment_variables = 5;
.exa.cascade_plugins_pb.McpRegistryTransport transport = 6;
repeated .exa.cascade_plugins_pb.McpRegistryArgument package_arguments = 7;
repeated .exa.cascade_plugins_pb.McpRegistryArgument runtime_arguments = 8;
string registry_base_url = 9;
string file_sha256 = 10;
}
message McpRegistryTransport {
string type = 1;
string url = 2;
repeated .exa.cascade_plugins_pb.McpRegistryKeyValueInput headers = 3;
map<string, .exa.cascade_plugins_pb.McpRegistryInput> variables = 4;
}
message McpRegistryEnvironmentVariable {
string name = 1;
string description = 2;
bool is_required = 3;
bool is_secret = 4;
string default = 5;
string value = 6;
string placeholder = 7;
string format = 8;
repeated string choices = 9;
map<string, .exa.cascade_plugins_pb.McpRegistryInput> variables = 10;
}
message McpRegistryRemote {
string type = 1;
string url = 2;
repeated .exa.cascade_plugins_pb.McpRegistryKeyValueInput headers = 3;
map<string, .exa.cascade_plugins_pb.McpRegistryInput> variables = 4;
}
message McpRegistryKeyValueInput {
string name = 1;
string description = 2;
bool is_required = 3;
bool is_secret = 4;
string default = 5;
string value = 6;
string placeholder = 7;
string format = 8;
repeated string choices = 9;
map<string, .exa.cascade_plugins_pb.McpRegistryInput> variables = 10;
}
message McpRegistryInput {
string description = 1;
bool is_required = 2;
bool is_secret = 3;
string default = 4;
string value = 5;
string placeholder = 6;
string format = 7;
repeated string choices = 8;
}
message McpRegistryArgument {
string type = 1;
string name = 2;
string description = 3;
bool is_required = 4;
bool is_secret = 5;
bool is_repeated = 6;
string default = 7;
string value = 8;
string placeholder = 9;
string format = 10;
repeated string choices = 11;
string value_hint = 12;
map<string, .exa.cascade_plugins_pb.McpRegistryInput> variables = 13;
}
message GetAllAcpRegistriesRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string version = 2;
}
message GetAllAcpRegistriesResponse {
string registry_json = 1;
}
service CascadePluginsService {
rpc GetAvailableCascadePlugins (.exa.cascade_plugins_pb.GetAvailableCascadePluginsRequest) returns (.exa.cascade_plugins_pb.GetAvailableCascadePluginsResponse);
rpc InstallCascadePlugin (.exa.cascade_plugins_pb.InstallCascadePluginRequest) returns (.exa.cascade_plugins_pb.InstallCascadePluginResponse);
rpc GetCascadePluginById (.exa.cascade_plugins_pb.GetCascadePluginByIdRequest) returns (.exa.cascade_plugins_pb.GetCascadePluginByIdResponse);
rpc GetMcpClientInfos (.exa.cascade_plugins_pb.GetMcpClientInfosRequest) returns (.exa.cascade_plugins_pb.GetMcpClientInfosResponse);
rpc GetAllAcpRegistries (.exa.cascade_plugins_pb.GetAllAcpRegistriesRequest) returns (.exa.cascade_plugins_pb.GetAllAcpRegistriesResponse);
}
@@ -0,0 +1,57 @@
syntax = "proto3";
package exa.chat_client_server_pb;
import "exa/codeium_common_pb/codeium_common.proto";
message StartChatClientRequestStreamRequest {
}
message ChatClientRequest {
oneof request {
.exa.chat_client_server_pb.AddCascadeInputRequest add_cascade_input = 1;
.exa.chat_client_server_pb.SendActionToChatPanelRequest send_action_to_chat_panel = 2;
.exa.chat_client_server_pb.InitialAckRequest initial_ack = 3;
.exa.chat_client_server_pb.RefreshCustomizationRequest refresh_customization = 4;
.exa.chat_client_server_pb.SendCascadeInputRequest send_cascade_input = 5;
.exa.chat_client_server_pb.ImplementPlanRequest implement_plan = 6;
}
}
message AddCascadeInputRequest {
repeated .exa.codeium_common_pb.TextOrScopeItem items = 1;
repeated .exa.codeium_common_pb.ImageData images = 2;
}
message SendCascadeInputRequest {
repeated .exa.codeium_common_pb.TextOrScopeItem items = 1;
repeated .exa.codeium_common_pb.ImageData images = 2;
}
message ImplementPlanRequest {
string plan_path = 1;
string plan_title = 2;
}
message SendActionToChatPanelRequest {
string action_type = 1;
repeated bytes payload = 2;
}
message FileDiffState {
string uri = 1;
int32 num_insertions = 2;
int32 num_deletions = 3;
optional string cascade_id = 4;
}
message InitialAckRequest {
}
message RefreshCustomizationRequest {
.exa.codeium_common_pb.RefreshCustomizationType config_type = 1;
}
service ChatClientServerService {
rpc StartChatClientRequestStream (.exa.chat_client_server_pb.StartChatClientRequestStreamRequest) returns (stream .exa.chat_client_server_pb.ChatClientRequest);
}
@@ -0,0 +1,449 @@
syntax = "proto3";
package exa.chat_pb;
import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/diff_action_pb/diff_action.proto";
import "google/protobuf/timestamp.proto";
enum ChatFeedbackType {
FEEDBACK_TYPE_UNSPECIFIED = 0;
FEEDBACK_TYPE_ACCEPT = 1;
FEEDBACK_TYPE_REJECT = 2;
FEEDBACK_TYPE_COPIED = 3;
FEEDBACK_TYPE_ACCEPT_DIFF = 4;
FEEDBACK_TYPE_REJECT_DIFF = 5;
FEEDBACK_TYPE_APPLY_DIFF = 6;
FEEDBACK_TYPE_INSERT_AT_CURSOR = 7;
}
enum ChatIntentType {
CHAT_INTENT_UNSPECIFIED = 0;
CHAT_INTENT_GENERIC = 1;
CHAT_INTENT_FUNCTION_EXPLAIN = 2;
CHAT_INTENT_FUNCTION_DOCSTRING = 3;
CHAT_INTENT_FUNCTION_REFACTOR = 4;
CHAT_INTENT_CODE_BLOCK_EXPLAIN = 5;
CHAT_INTENT_CODE_BLOCK_REFACTOR = 6;
CHAT_INTENT_FUNCTION_UNIT_TESTS = 7;
CHAT_INTENT_PROBLEM_EXPLAIN = 8;
CHAT_INTENT_GENERATE_CODE = 9;
CHAT_INTENT_CLASS_EXPLAIN = 10;
CHAT_INTENT_SEARCH = 11;
CHAT_INTENT_FAST_APPLY = 12;
}
enum DeepWikiRequestType {
DEEP_WIKI_REQUEST_TYPE_UNSPECIFIED = 0;
DEEP_WIKI_REQUEST_TYPE_SUMMARY = 1;
DEEP_WIKI_REQUEST_TYPE_ARTICLE = 2;
}
enum DeepWikiSymbolType {
DEEP_WIKI_SYMBOL_TYPE_UNSPECIFIED = 0;
DEEP_WIKI_SYMBOL_TYPE_FILE = 1;
DEEP_WIKI_SYMBOL_TYPE_MODULE = 2;
DEEP_WIKI_SYMBOL_TYPE_NAMESPACE = 3;
DEEP_WIKI_SYMBOL_TYPE_PACKAGE = 4;
DEEP_WIKI_SYMBOL_TYPE_CLASS = 5;
DEEP_WIKI_SYMBOL_TYPE_METHOD = 6;
DEEP_WIKI_SYMBOL_TYPE_PROPERTY = 7;
DEEP_WIKI_SYMBOL_TYPE_FIELD = 8;
DEEP_WIKI_SYMBOL_TYPE_CONSTRUCTOR = 9;
DEEP_WIKI_SYMBOL_TYPE_ENUM = 10;
DEEP_WIKI_SYMBOL_TYPE_INTERFACE = 11;
DEEP_WIKI_SYMBOL_TYPE_FUNCTION = 12;
DEEP_WIKI_SYMBOL_TYPE_VARIABLE = 13;
DEEP_WIKI_SYMBOL_TYPE_CONSTANT = 14;
DEEP_WIKI_SYMBOL_TYPE_STRING = 15;
DEEP_WIKI_SYMBOL_TYPE_NUMBER = 16;
DEEP_WIKI_SYMBOL_TYPE_BOOLEAN = 17;
DEEP_WIKI_SYMBOL_TYPE_ARRAY = 18;
DEEP_WIKI_SYMBOL_TYPE_OBJECT = 19;
DEEP_WIKI_SYMBOL_TYPE_KEY = 20;
DEEP_WIKI_SYMBOL_TYPE_NULL = 21;
DEEP_WIKI_SYMBOL_TYPE_ENUM_MEMBER = 22;
DEEP_WIKI_SYMBOL_TYPE_STRUCT = 23;
DEEP_WIKI_SYMBOL_TYPE_EVENT = 24;
DEEP_WIKI_SYMBOL_TYPE_OPERATOR = 25;
DEEP_WIKI_SYMBOL_TYPE_TYPE_PARAMETER = 26;
}
enum CacheControlType {
CACHE_CONTROL_TYPE_UNSPECIFIED = 0;
CACHE_CONTROL_TYPE_EPHEMERAL = 1;
}
message CodeBlockInfo {
string raw_source = 1;
int32 start_line = 2;
int32 start_col = 3;
int32 end_line = 4;
int32 end_col = 5;
}
message ChatMetrics {
uint64 response_stream_latency_ms = 1;
uint64 refresh_context_latency_ms = 2;
uint64 should_get_local_context_for_chat_latency_ms = 3;
bool should_get_local_context_for_chat = 4;
uint64 compute_change_events_latency_ms = 5;
uint64 context_to_chat_prompt_latency_ms = 6;
int32 num_prompt_tokens = 7;
int32 num_system_prompt_tokens = 8;
uint64 num_input_tokens = 16;
.google.protobuf.Timestamp start_timestamp = 9;
.google.protobuf.Timestamp end_timestamp = 10;
string active_document_absolute_path = 11;
.exa.codeium_common_pb.CodeContextItem last_active_code_context_item = 12;
uint64 num_indexed_files = 13;
uint64 num_indexed_code_context_items = 14;
.exa.codeium_common_pb.Model model_deprecated = 15 [deprecated = true];
string model_uid = 17;
}
message IntentGeneric {
string text = 1;
repeated .exa.codeium_common_pb.TextOrScopeItem items = 2;
}
message IntentFunctionExplain {
.exa.codeium_common_pb.FunctionInfo function_info = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string uri = 4;
}
message IntentFunctionRefactor {
.exa.codeium_common_pb.FunctionInfo function_info = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string refactor_description = 4;
string uri = 5;
}
message IntentFunctionUnitTests {
.exa.codeium_common_pb.FunctionInfo function_info = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string uri = 5;
string instructions = 4;
}
message IntentFunctionDocstring {
.exa.codeium_common_pb.FunctionInfo function_info = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string uri = 4;
}
message IntentClassExplain {
.exa.codeium_common_pb.ClassInfo class_info = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string uri = 4;
}
message IntentCodeBlockExplain {
.exa.chat_pb.CodeBlockInfo code_block_info = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string uri = 4;
}
message IntentCodeBlockRefactor {
.exa.chat_pb.CodeBlockInfo code_block_info = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string uri = 5;
string refactor_description = 4;
}
message IntentProblemExplain {
string diagnostic_message = 1;
.exa.chat_pb.CodeBlockInfo problematic_code = 2;
string surrounding_code_snippet = 3;
.exa.codeium_common_pb.Language language = 4;
string file_path_migrate_me_to_uri = 5 [deprecated = true];
string uri = 7;
int32 line_number = 6;
}
message IntentGenerateCode {
string instruction = 1;
.exa.codeium_common_pb.Language language = 2;
string file_path_migrate_me_to_uri = 3 [deprecated = true];
string uri = 5;
int32 line_number = 4;
}
message IntentSearch {
string query = 1;
}
message IntentFastApply {
string diff_outline = 1;
.exa.codeium_common_pb.Language language = 2;
.exa.chat_pb.CodeBlockInfo old_code = 3;
}
message ChatMessageIntent {
oneof intent {
.exa.chat_pb.IntentGeneric generic = 1;
.exa.chat_pb.IntentFunctionExplain explain_function = 2;
.exa.chat_pb.IntentFunctionDocstring function_docstring = 3;
.exa.chat_pb.IntentFunctionRefactor function_refactor = 4;
.exa.chat_pb.IntentCodeBlockExplain explain_code_block = 5;
.exa.chat_pb.IntentCodeBlockRefactor code_block_refactor = 6;
.exa.chat_pb.IntentFunctionUnitTests function_unit_tests = 7;
.exa.chat_pb.IntentProblemExplain problem_explain = 8;
.exa.chat_pb.IntentGenerateCode generate_code = 9;
.exa.chat_pb.IntentClassExplain explain_class = 10;
.exa.chat_pb.IntentSearch search = 11;
.exa.chat_pb.IntentFastApply fast_apply = 13;
}
uint32 num_tokens = 12;
}
message ChatMessageActionSearch {
}
message ChatMessageActionEdit {
string file_path_migrate_me_to_uri = 1 [deprecated = true];
string uri = 6;
.exa.diff_action_pb.DiffBlock diff = 2;
.exa.codeium_common_pb.Language language = 3;
string text_pre = 4;
string text_post = 5;
}
message ChatMessageActionGeneric {
string text = 1;
string display_text = 2;
}
message ChatMessageStatusContextRelevancy {
bool is_loading = 1;
bool is_relevant = 2;
repeated string query_suggestions = 3;
}
message ChatMessageStatus {
oneof status {
.exa.chat_pb.ChatMessageStatusContextRelevancy context_relevancy = 1;
}
}
message ChatMessageError {
string text = 1;
}
message ChatMessageAction {
oneof action {
.exa.chat_pb.ChatMessageActionGeneric generic = 1;
.exa.chat_pb.ChatMessageActionEdit edit = 3;
.exa.chat_pb.ChatMessageActionSearch search = 5;
}
uint32 num_tokens = 2;
repeated .exa.codeium_common_pb.CodeContextItem context_items = 4;
.exa.chat_pb.ChatIntentType latest_intent = 6;
.exa.chat_pb.ChatMetrics generation_stats = 7;
repeated .exa.codeium_common_pb.KnowledgeBaseItemWithMetadata knowledge_base_items = 8;
}
message ChatMessage {
string message_id = 1;
.exa.codeium_common_pb.ChatMessageSource source = 2;
.google.protobuf.Timestamp timestamp = 3;
string conversation_id = 4;
oneof content {
.exa.chat_pb.ChatMessageIntent intent = 5;
.exa.chat_pb.ChatMessageAction action = 6;
.exa.chat_pb.ChatMessageError error = 7;
.exa.chat_pb.ChatMessageStatus status = 8;
}
bool in_progress = 9;
.exa.chat_pb.GetChatMessageRequest request = 10;
bool redact = 11;
}
message Conversation {
repeated .exa.chat_pb.ChatMessage messages = 1;
}
message RawChatMessage {
string message_id = 1;
.exa.codeium_common_pb.ChatMessageSource source = 2;
.google.protobuf.Timestamp timestamp = 3;
string conversation_id = 4;
string text = 5;
bool in_progress = 6;
bool is_error = 7;
}
message DeepWikiSymbolRange {
int64 start_line = 1;
int64 start_column = 2;
int64 end_line = 3;
int64 end_column = 4;
}
message DeepWikiSymbolContext {
string symbol_name = 1;
string symbol_uri = 2;
.exa.chat_pb.DeepWikiSymbolRange symbol_range = 3;
.exa.chat_pb.DeepWikiSymbolType symbol_type = 4;
string file_context = 5;
string usage_context = 6;
string trace_context = 7;
string quick_grep_context = 8;
.google.protobuf.Timestamp timestamp = 9;
}
message DeepWikiHoverContext {
string symbol_name = 1;
string symbol_uri = 2;
.exa.chat_pb.DeepWikiSymbolRange symbol_range = 3;
.exa.chat_pb.DeepWikiSymbolType symbol_type = 4;
string hover_text = 5;
.google.protobuf.Timestamp timestamp = 6;
}
message ParameterInfo {
string label = 1;
string documentation = 2;
}
message FunctionCallInfo {
string signature_label = 1;
int32 active_parameter = 2;
int32 parameter_count = 3;
repeated .exa.chat_pb.ParameterInfo parameters = 4;
}
message DeepWikiContext {
.exa.chat_pb.DeepWikiHoverContext enclosing_hover_context = 1;
.exa.chat_pb.FunctionCallInfo function_call_info = 2;
}
message GetDeepWikiRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.chat_pb.DeepWikiRequestType request_type = 2;
string symbol_name = 3;
string symbol_uri = 4;
string context = 5;
.exa.chat_pb.DeepWikiSymbolType symbol_type = 6;
string language = 7;
}
message ChatMessagePrompt {
string message_id = 1;
.exa.codeium_common_pb.ChatMessageSource source = 2;
string prompt = 3;
uint32 num_tokens = 4;
bool safe_for_code_telemetry = 5;
repeated .exa.codeium_common_pb.ChatToolCall tool_calls = 6;
string tool_call_id = 7;
.exa.chat_pb.PromptCacheOptions prompt_cache_options = 8;
bool tool_result_is_error = 9;
repeated .exa.codeium_common_pb.ImageData images = 10;
string thinking = 11;
string signature = 12;
bool thinking_redacted = 13;
repeated .exa.codeium_common_pb.PromptAnnotationRange prompt_annotation_ranges = 14;
string output_id = 15;
string thinking_id = 16 [deprecated = true];
bytes gemini_thought_signature = 17 [deprecated = true];
string signature_type = 18;
string phase = 19;
}
message PromptCacheOptions {
.exa.chat_pb.CacheControlType type = 1;
}
message ChatToolDefinition {
reserved 4;
string name = 1;
string description = 2;
string json_schema_string = 3;
repeated string attribution_field_names = 5;
string server_name = 6;
optional bool read_only_hint = 7;
optional .exa.chat_pb.ComputerUseToolConfig computer_use_config = 8;
optional bool is_custom_tool = 9;
optional string custom_tool_grammar = 10;
optional string custom_tool_grammar_syntax = 11;
bool strict = 12;
}
message ComputerUseToolConfig {
int32 display_width_px = 1;
int32 display_height_px = 2;
int32 display_number = 3;
}
message ChatToolChoice {
oneof choice {
string option_name = 1;
string tool_name = 2;
}
}
message ChatMentionsSearchRequest {
string query = 1;
repeated .exa.codeium_common_pb.CodeContextType allowed_types = 2;
bool include_repo_info = 3;
}
message ChatMentionsSearchResponse {
repeated .exa.codeium_common_pb.CodeContextItem cci_items = 1;
repeated .exa.codeium_common_pb.GitRepoInfo repo_infos = 2;
}
message GetChatMessageRequest {
reserved 2;
reserved "prompt";
message EnterpriseExternalModelConfig {
int32 max_output_tokens = 2;
int32 max_input_tokens = 3;
}
.exa.codeium_common_pb.Metadata metadata = 1;
repeated .exa.chat_pb.ChatMessage chat_messages = 3;
.exa.codeium_common_pb.Document active_document = 5;
repeated string open_document_uris = 12;
repeated string workspace_uris = 13;
string active_selection = 11;
.exa.codeium_common_pb.ContextInclusionType context_inclusion_type = 8;
.exa.codeium_common_pb.Model chat_model = 9;
string system_prompt_override = 10;
string chat_model_name = 14;
.exa.chat_pb.GetChatMessageRequest.EnterpriseExternalModelConfig enterprise_chat_model_config = 15;
.exa.codeium_common_pb.ExperimentConfig experiment_config = 4 [deprecated = true];
repeated string open_document_paths_migrate_me_to_uris = 6 [deprecated = true];
repeated string workspace_paths_migrate_me_to_uris = 7 [deprecated = true];
}
message RawGetChatMessageRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
repeated .exa.chat_pb.ChatMessage chat_messages = 2;
string system_prompt_override = 3;
.exa.codeium_common_pb.Model chat_model = 4;
string chat_model_name = 5;
}
message ChatExperimentStatus {
.exa.codeium_common_pb.ExperimentKey experiment_key = 1;
bool enabled = 2;
}
message FormattedChatMessage {
.exa.codeium_common_pb.ChatMessageSource role = 1;
string header = 2;
string content = 3;
string footer = 4;
}
@@ -0,0 +1,186 @@
syntax = "proto3";
package exa.code_edit.code_edit_pb;
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/context_module_pb/context_module.proto";
import "exa/index_pb/index.proto";
enum RelevanceReason {
RELEVANCE_REASON_UNSPECIFIED = 0;
RELEVANCE_REASON_SAME_COMMIT_OLD = 1;
RELEVANCE_REASON_SAME_COMMIT_NEW = 2;
RELEVANCE_REASON_REF_IN_DELETION = 3;
RELEVANCE_REASON_REF_IN_INSERTION = 4;
RELEVANCE_REASON_NOT_RELEVANT = 99;
}
enum DescriptionType {
DESCRIPTION_TYPE_UNSPECIFIED = 0;
DESCRIPTION_TYPE_EDIT_COMMAND = 1;
DESCRIPTION_TYPE_INSERTION_COMMAND = 2;
}
enum IntentType {
INTENT_TYPE_UNSPECIFIED = 0;
INTENT_TYPE_COMMIT_GOAL = 1;
INTENT_TYPE_DIFF_SEARCH = 2;
INTENT_TYPE_CLEAN_COMMIT = 3;
INTENT_TYPE_CCI_SIGNATURE_SEARCH = 4;
INTENT_TYPE_CCI_RAW_SOURCE_SEARCH = 5;
}
enum RetrieverType {
RETRIEVER_TYPE_UNSPECIFIED = 0;
RETRIEVER_TYPE_CONTEXT_MODULE_LOCAL = 1;
RETRIEVER_TYPE_CONTEXT_MODULE_SEARCH = 2;
RETRIEVER_TYPE_SEARCH = 3;
RETRIEVER_TYPE_MQUERY_OPENAI = 4;
RETRIEVER_TYPE_MQUERY_CODEIUM = 5;
RETRIEVER_TYPE_CONTEXT_MODULE_SEARCH_MQUERY_SCORER = 6;
RETRIEVER_TYPE_COMMIT_GRAPH = 7;
RETRIEVER_TYPE_MORPH_NORMAL = 8;
RETRIEVER_TYPE_MORPH_ADVANCED = 9;
RETRIEVER_TYPE_GRAPH_CLUSTERS = 10;
RETRIEVER_TYPE_OPENSEARCH = 11;
}
message RelevantCodeContext {
.exa.codeium_common_pb.CodeContextItem code_context_item = 1;
.exa.code_edit.code_edit_pb.RelevanceReason relevance_reason = 3;
}
message IntentRelevance {
string intent = 1;
float relevance_score = 2;
string rationale = 3;
}
message CodeContextItemChange {
.exa.codeium_common_pb.CodeContextItem start_cci = 1;
.exa.codeium_common_pb.CodeContextItem end_cci = 2;
repeated .exa.code_edit.code_edit_pb.RelevantCodeContext relevant_code_contexts = 3;
map<string, string> description_by_type = 4;
repeated .exa.code_edit.code_edit_pb.IntentRelevance intent_relevance = 5;
}
message FileChange {
string start_file_path_migrate_me_to_uri = 1 [deprecated = true];
string start_file_uri = 10;
string start_file_rel_path = 8;
string end_file_path_migrate_me_to_uri = 2 [deprecated = true];
string end_file_uri = 11;
string end_file_rel_path = 9;
string old_file_content = 3;
string new_file_content = 4;
repeated .exa.code_edit.code_edit_pb.CodeContextItemChange code_context_item_changes = 6;
repeated .exa.codeium_common_pb.CodeContextItem unchanged_code_context_items = 7;
}
message Intent {
string intent = 1;
.exa.code_edit.code_edit_pb.IntentType intent_type = 2;
bool include_test_files = 3;
}
message CodeChangeWithContext {
reserved 7;
reserved "intent_by_type";
.exa.codeium_common_pb.GitRepoInfo repository = 1;
repeated .exa.code_edit.code_edit_pb.FileChange file_changes = 2;
repeated .exa.code_edit.code_edit_pb.FileChange test_file_changes = 9;
string intent = 3;
oneof code_change_data_source {
.exa.code_edit.code_edit_pb.GitCommit git_commit = 4;
}
.exa.index_pb.IndexStats index_stats = 5;
repeated .exa.codeium_common_pb.CodeContextItem unrelated_ccis = 6;
repeated .exa.code_edit.code_edit_pb.Intent synthetic_intents = 8;
}
message GitCommit {
string commit_hash = 1;
string parent_commit_hash = 2;
}
message CommitToFileChangeRequest {
string repo_root = 1;
.exa.codeium_common_pb.GitRepoInfo repository = 2;
int32 unrelated_cci_multiple = 3;
string db_dir = 4;
}
message GitFilePatch {
string from = 1;
string to = 2;
}
message CommitToFileChangeResponse {
repeated .exa.code_edit.code_edit_pb.FileChange file_changes = 1;
string parent_commit_hash = 2;
.exa.index_pb.IndexStats index_stats = 3;
repeated .exa.codeium_common_pb.CodeContextItem unrelated_ccis = 4;
}
message CodeRetrievalEvalTask {
.exa.codeium_common_pb.GitRepoInfo repository = 1;
.exa.code_edit.code_edit_pb.GitCommit commit_info = 5;
string query = 2;
repeated .exa.code_edit.code_edit_pb.RelevantCodeContext target_code_contexts = 3;
string subdirectory = 4;
}
message CodeRetrievalResult {
reserved 2;
reserved "retrieved_code_contexts";
.exa.codeium_common_pb.GitRepoInfo repository = 1;
string retriever_name = 3;
.exa.code_edit.code_edit_pb.RetrieverInfo retriever_info = 4;
repeated .exa.context_module_pb.CodeContextItemWithRetrievalMetadata code_context_with_metadatas = 5;
}
message RetrieverClassification {
float relevance_score = 1;
.exa.code_edit.code_edit_pb.RetrieverInfo retriever_info = 2;
}
message CodeContextItemWithClassification {
.exa.code_edit.code_edit_pb.RelevantCodeContext code_context_item = 1;
bool relevant = 2;
.exa.code_edit.code_edit_pb.RetrieverClassification prediction = 3;
}
message RetrieverInfo {
.exa.code_edit.code_edit_pb.RetrieverType type = 1;
string model_name = 2;
}
message RetrievalMetrics {
.exa.code_edit.code_edit_pb.RetrieverInfo retriever_info = 1;
float precision_score = 2;
float recall_score = 3;
float accuracy_score = 4;
float label_ranking_average_precision_score = 5;
float roc_auc_score = 6;
float average_precision_score = 7;
float threshold = 8;
}
message CodeRetrievalEvalResult {
.exa.codeium_common_pb.GitRepoInfo repository = 1;
repeated .exa.code_edit.code_edit_pb.CodeContextItemWithClassification classified_items = 2;
.exa.code_edit.code_edit_pb.RetrievalMetrics metrics = 3;
}
message InstructionWithId {
int32 id = 1;
string file = 2;
string function = 3;
string instruction = 4;
}
message InstructionWithIdList {
repeated .exa.code_edit.code_edit_pb.InstructionWithId instructions = 1;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,175 @@
syntax = "proto3";
package exa.context_module_pb;
import "buf/validate/validate.proto";
import "exa/chat_pb/chat.proto";
import "exa/codeium_common_pb/codeium_common.proto";
enum ContextChangeType {
CONTEXT_CHANGE_TYPE_UNSPECIFIED = 0;
CONTEXT_CHANGE_TYPE_ACTIVE_DOCUMENT = 1;
CONTEXT_CHANGE_TYPE_CURSOR_POSITION = 2;
CONTEXT_CHANGE_TYPE_CHAT_MESSAGE_RECEIVED = 3;
CONTEXT_CHANGE_TYPE_OPEN_DOCUMENTS = 4;
CONTEXT_CHANGE_TYPE_ORACLE_ITEMS = 5;
CONTEXT_CHANGE_TYPE_PINNED_CONTEXT = 6;
CONTEXT_CHANGE_TYPE_PINNED_GUIDELINE = 7;
CONTEXT_CHANGE_TYPE_ACTIVE_NODE = 9;
reserved 8;
}
enum ContextUseCase {
CONTEXT_USE_CASE_UNSPECIFIED = 0;
CONTEXT_USE_CASE_AUTOCOMPLETE = 1;
CONTEXT_USE_CASE_CHAT = 2;
CONTEXT_USE_CASE_CHAT_COMPLETION = 3;
CONTEXT_USE_CASE_CORTEX_RESEARCH = 4;
CONTEXT_USE_CASE_EVAL = 5;
CONTEXT_USE_CASE_CHAT_COMPLETION_GENERATE = 6;
CONTEXT_USE_CASE_SUPERCOMPLETE = 7;
CONTEXT_USE_CASE_FAST_APPLY = 8;
CONTEXT_USE_CASE_COMMAND_TERMINAL = 9;
}
enum ContextRefreshReason {
CONTEXT_REFRESH_REASON_UNSPECIFIED = 0;
CONTEXT_REFRESH_REASON_AUTOCOMPLETE = 1;
CONTEXT_REFRESH_REASON_CHAT = 2;
CONTEXT_REFRESH_REASON_IDE_ACTION = 4;
CONTEXT_REFRESH_REASON_CHAT_COMPLETION = 5;
reserved 3;
reserved "CONTEXT_REFRESH_REASON_STARTUP";
}
message ContextChangeEvent {
reserved 9;
oneof context_change_event {
.exa.context_module_pb.ContextChangeActiveDocument context_change_active_document = 1;
.exa.context_module_pb.ContextChangeCursorPosition context_change_cursor_position = 2;
.exa.context_module_pb.ContextChangeChatMessageReceived context_change_chat_message_received = 3;
.exa.context_module_pb.ContextChangeOpenDocuments context_change_open_documents = 4;
.exa.context_module_pb.ContextChangeOracleItems context_change_oracle_items = 5;
.exa.context_module_pb.ContextChangePinnedContext context_change_pinned_context = 7;
.exa.context_module_pb.ContextChangePinnedGuideline context_change_pinned_guideline = 8;
.exa.context_module_pb.ContextChangeActiveNode context_change_active_node = 10;
}
.exa.context_module_pb.ContextRefreshReason context_refresh_reason = 6;
}
message ContextChangeActiveDocument {
.exa.codeium_common_pb.Document document = 1;
}
message ContextChangeCursorPosition {
reserved 1;
reserved 3;
reserved "position", "refresh_reason";
.exa.codeium_common_pb.Document document = 2;
}
message ContextChangeChatMessageReceived {
repeated .exa.chat_pb.ChatMessage chat_messages = 1;
}
message ContextChangeOpenDocuments {
repeated .exa.codeium_common_pb.Document other_open_documents = 1;
repeated string recently_opened_uris = 2;
}
message ContextChangeOracleItems {
repeated .exa.codeium_common_pb.CodeContextItem oracle_items = 1;
}
message ContextChangePinnedContext {
oneof scope {
.exa.codeium_common_pb.ContextScope pinned_scope = 1;
.exa.codeium_common_pb.ContextScope mentioned_scope = 2;
}
}
message ContextChangePinnedGuideline {
.exa.codeium_common_pb.Guideline guideline = 1;
}
message ContextChangeActiveNode {
.exa.codeium_common_pb.CodeContextItem active_node = 1;
.exa.codeium_common_pb.Document document = 2;
bool actual_node_change = 3;
}
message RetrievedCodeContextItemMetadata {
repeated .exa.codeium_common_pb.CodeContextSource context_sources = 1;
.exa.codeium_common_pb.CodeContextType context_type = 2;
string scorer = 3;
float score = 4;
map<string, .exa.context_module_pb.CodeContextProviderMetadata> provider_metadata = 5;
bool is_in_pinned_scope = 6;
}
message CciWithSubrangeWithRetrievalMetadata {
.exa.codeium_common_pb.CciWithSubrange cci_with_subrange = 1;
.exa.context_module_pb.RetrievedCodeContextItemMetadata metadata = 2;
}
message CodeContextItemWithRetrievalMetadata {
.exa.codeium_common_pb.CodeContextItem code_context_item = 1;
.exa.context_module_pb.RetrievedCodeContextItemMetadata metadata = 2;
}
message FileNameWithRetrievalMetadata {
string absolute_uri = 1;
.exa.context_module_pb.RetrievedCodeContextItemMetadata metadata = 2;
}
message CodeContextProviderMetadata {
float relative_weight = 1;
}
message ContextModuleStats {
.exa.context_module_pb.ContextModuleStateStats context_module_state_stats = 1;
.exa.context_module_pb.CodeContextItemIndexStats code_context_item_index_stats = 2;
int64 get_stats_latency_ms = 3;
int64 context_module_age_s = 4;
}
message ContextModuleStateStats {
int64 cci_per_source_bytes = 1;
int64 active_document_bytes = 2;
int64 other_open_documents_bytes = 3;
}
message CodeContextItemIndexStats {
int64 all_ccis_bytes = 1;
int64 num_ccis_tracked = 2;
int64 term_frequency_map_bytes = 3;
int64 num_terms_tracked = 4;
int64 file_to_cci_map_bytes = 5;
int64 num_files_tracked = 6;
int64 last_modified_bytes = 7;
int64 hash_map_bytes = 8;
}
message PersistentContextModuleState {
.exa.codeium_common_pb.Guideline pinned_guideline = 1;
.exa.codeium_common_pb.ContextScope pinned_context_scope = 2;
}
message ContextModuleResult {
repeated .exa.context_module_pb.CciWithSubrangeWithRetrievalMetadata retrieved_cci_with_subranges = 1;
.exa.codeium_common_pb.Document active_document = 2;
.exa.codeium_common_pb.DocumentOutline active_document_outline = 5;
.exa.context_module_pb.LocalNodeState local_node_state = 3;
.exa.codeium_common_pb.Guideline guideline = 4;
repeated .exa.codeium_common_pb.Document open_documents = 6;
}
message LocalNodeState {
.exa.codeium_common_pb.CodeContextItem current_node = 1;
.exa.codeium_common_pb.CodeContextItem closest_above_node = 2;
.exa.codeium_common_pb.CodeContextItem closest_below_node = 3;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,26 @@
syntax = "proto3";
package exa.dev_pb;
import "exa/codeium_common_pb/codeium_common.proto";
message DevRequest {
string command = 1;
}
message DevResponse {
}
message GetLSPCompletionItemsRequest {
string document_uri = 1;
.exa.codeium_common_pb.DocumentPosition position = 2;
}
message GetLSPCompletionItemsResponse {
string completion_items_json = 1;
}
service DevService {
rpc Dev (.exa.dev_pb.DevRequest) returns (.exa.dev_pb.DevResponse);
rpc GetLSPCompletionItems (.exa.dev_pb.GetLSPCompletionItemsRequest) returns (.exa.dev_pb.GetLSPCompletionItemsResponse);
}
@@ -0,0 +1,75 @@
syntax = "proto3";
package exa.diff_action_pb;
import "exa/codeium_common_pb/codeium_common.proto";
enum UnifiedDiffLineType {
UNIFIED_DIFF_LINE_TYPE_UNSPECIFIED = 0;
UNIFIED_DIFF_LINE_TYPE_INSERT = 1;
UNIFIED_DIFF_LINE_TYPE_DELETE = 2;
UNIFIED_DIFF_LINE_TYPE_UNCHANGED = 3;
}
enum DiffChangeType {
DIFF_CHANGE_TYPE_UNSPECIFIED = 0;
DIFF_CHANGE_TYPE_INSERT = 1;
DIFF_CHANGE_TYPE_DELETE = 2;
DIFF_CHANGE_TYPE_UNCHANGED = 3;
}
enum DiffType {
DIFF_TYPE_UNSPECIFIED = 0;
DIFF_TYPE_UNIFIED = 1;
DIFF_TYPE_CHARACTER = 2;
DIFF_TYPE_COMBO = 3;
reserved 4;
reserved 5;
}
message UnifiedDiff {
message UnifiedDiffLine {
string text = 1;
.exa.diff_action_pb.UnifiedDiffLineType type = 2;
}
repeated .exa.diff_action_pb.UnifiedDiff.UnifiedDiffLine lines = 3;
}
message DiffBlock {
int32 start_line = 1;
int32 end_line = 2;
.exa.diff_action_pb.UnifiedDiff unified_diff = 3;
.exa.codeium_common_pb.Language from_language = 4;
.exa.codeium_common_pb.Language to_language = 5;
}
message CharacterDiffChange {
string text = 1;
.exa.diff_action_pb.DiffChangeType type = 2;
}
message CharacterDiff {
repeated .exa.diff_action_pb.CharacterDiffChange changes = 1;
}
message ComboDiffLine {
string text = 1;
.exa.diff_action_pb.DiffChangeType type = 2;
.exa.diff_action_pb.CharacterDiff character_diff = 3;
}
message ComboDiff {
repeated .exa.diff_action_pb.ComboDiffLine lines = 1;
}
message DiffSet {
.exa.diff_action_pb.UnifiedDiff unified_diff = 1;
.exa.diff_action_pb.CharacterDiff character_diff = 2;
.exa.diff_action_pb.ComboDiff combo_diff = 3;
}
message DiffList {
repeated .exa.diff_action_pb.DiffBlock diffs = 2;
}
@@ -0,0 +1,103 @@
syntax = "proto3";
package exa.eval.pr_eval.datasets_pb;
import "exa/cortex_pb/cortex.proto";
message MetricScoreContribution {
oneof score_source {
string metric_name = 1;
string existing_field_name = 3;
}
float weight = 2;
}
message ScoreCalculationConfig {
repeated .exa.eval.pr_eval.datasets_pb.MetricScoreContribution metric_score_contributions = 1;
}
message DetailStringFilter {
string detail_key = 1;
oneof match_type {
string exact_match = 2;
string contains = 3;
string regex_pattern = 4;
}
bool invert = 5;
}
message MetricsRecordFilterRequest {
oneof score_source {
string record_name = 1;
string existing_field_name = 4;
}
optional float max_allowed = 2;
optional float min_allowed = 3;
bool is_optional = 5;
repeated .exa.eval.pr_eval.datasets_pb.DetailStringFilter detail_filters = 6;
}
message FilterTrajectoryStageConfig {
reserved 1;
reserved 5;
reserved 6;
reserved 7;
reserved 8;
reserved "min_score_threshold", "generate_preference_pairs", "min_win_rating", "min_rating_delta", "max_occurrences_per_example";
message SelectionModeBestScoreConfig {
float min_score_threshold = 1;
}
message SelectionModeGeneratePairsConfig {
float min_win_rating = 1;
float min_rating_delta = 2;
float min_axis_delta = 4;
int32 max_occurrences_per_example = 3;
}
message SelectionModeGTvsBestConfig {
float min_score_threshold = 1;
float min_rating_delta = 2;
}
message SelectionModeKTOThresholdConfig {
float min_positive_score = 1;
float max_negative_score = 2;
}
message SelectionModeModelNameConfig {
string winner_model_name = 1;
string loser_model_name = 2;
}
string trajectory_field_name = 15;
repeated .exa.cortex_pb.CortexStepType required_step_types = 2;
int32 min_trajectory_length = 3;
bool retain_filtered_rows = 4;
bool truncate_trajectory_to_judge_steps = 9;
bool use_downloaded_score = 16 [deprecated = true];
oneof selection_mode {
.exa.eval.pr_eval.datasets_pb.FilterTrajectoryStageConfig.SelectionModeBestScoreConfig selection_mode_best_score = 10;
.exa.eval.pr_eval.datasets_pb.FilterTrajectoryStageConfig.SelectionModeGeneratePairsConfig selection_mode_generate_pairs = 11;
.exa.eval.pr_eval.datasets_pb.FilterTrajectoryStageConfig.SelectionModeGTvsBestConfig selection_mode_gt_vs_best = 12;
.exa.eval.pr_eval.datasets_pb.FilterTrajectoryStageConfig.SelectionModeKTOThresholdConfig selection_mode_kto_threshold = 17;
.exa.eval.pr_eval.datasets_pb.FilterTrajectoryStageConfig.SelectionModeModelNameConfig selection_mode_model_name = 18;
}
.exa.eval.pr_eval.datasets_pb.ScoreCalculationConfig score_calculation_config = 13;
repeated .exa.eval.pr_eval.datasets_pb.MetricsRecordFilterRequest metrics_record_filters = 14;
}
message MergeFormattedPreferencePairsConfig {
enum MismatchedPromptResolution {
MISMATCHED_PROMPT_RESOLUTION_UNSPECIFIED = 0;
MISMATCHED_PROMPT_RESOLUTION_STRICT_MATCH = 1;
MISMATCHED_PROMPT_RESOLUTION_KEEP_WINNER = 2;
MISMATCHED_PROMPT_RESOLUTION_KEEP_LOSER = 3;
}
.exa.eval.pr_eval.datasets_pb.MergeFormattedPreferencePairsConfig.MismatchedPromptResolution mismatched_prompt_resolution = 1;
int32 max_allowed_trailing_mismatched_steps = 2;
string expected_last_prompt_content = 3;
int32 world_size = 4;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,556 @@
syntax = "proto3";
package exa.extension_server_pb;
import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/cortex_pb/cortex.proto";
import "exa/language_server_pb/language_server.proto";
enum ActiveEditorType {
ACTIVE_EDITOR_TYPE_UNSPECIFIED = 0;
ACTIVE_EDITOR_TYPE_TEXT_EDITOR = 1;
ACTIVE_EDITOR_TYPE_TERMINAL = 2;
}
enum SoundType {
SOUND_TYPE_UNSPECIFIED = 0;
SOUND_TYPE_CASCADE_DONE = 1;
}
enum SettingLocation {
SETTING_LOCATION_UNSPECIFIED = 0;
SETTING_LOCATION_USER = 1;
SETTING_LOCATION_WORKSPACE = 2;
}
message CancelVibeAndReplaceRequest {
}
message CancelVibeAndReplaceResponse {
}
message StartAudioRecordingRequest {
}
message EndAudioRecordingRequest {
}
message EndAudioRecordingResponse {
string transcription = 1;
}
message StartAudioRecordingResponse {
}
message GetCurrentAudioRecordingRequest {
}
message GetCurrentAudioRecordingResponse {
float average_volume = 2;
}
message LanguageServerStartedRequest {
int32 language_server_port = 1;
int32 lsp_port = 2;
int32 chat_client_port = 3;
string csrf_token = 4;
}
message LanguageServerStartedResponse {
}
message OpenSettingRequest {
string setting_id = 1;
}
message OpenSettingResponse {
}
message OpenFilePointerRequest {
string file_uri = 1;
int32 start_line = 2;
int32 start_col = 3;
int32 end_line = 4;
int32 end_col = 5;
bool is_cascade_diff = 6;
bool is_directory = 7;
bool pinned = 8;
}
message OpenFilePointerResponse {
}
message InsertCodeAtCursorRequest {
string text = 1;
.exa.extension_server_pb.ActiveEditorType editor_type = 2;
}
message InsertCodeAtCursorResponse {
}
message EventMetadataRecord {
string key = 1;
string value = 2;
}
message LogEventRequest {
.exa.codeium_common_pb.ProductEventType event = 1 [deprecated = true];
string event_string = 3;
repeated .exa.extension_server_pb.EventMetadataRecord metadata = 2;
}
message LogEventResponse {
}
message CheckTerminalShellSupportRequest {
}
message CheckTerminalShellSupportResponse {
bool has_shell_integration = 1;
string shell_name = 2;
string shell_path = 3;
string failure_reason = 4;
repeated string shell_args = 5;
}
message ExecuteCommandRequest {
reserved 1;
reserved 2;
reserved "command", "args";
string command_line = 5;
string cwd = 3;
string terminal_id = 4;
}
message ShowTerminalRequest {
string terminal_id = 1;
}
message ShowTerminalResponse {
}
message OpenVirtualFileRequest {
string text = 1;
bool show_markdown_preview = 2;
}
message OpenVirtualFileResponse {
}
message SaveDocumentRequest {
string uri = 1;
}
message SaveDocumentResponse {
}
message ReadTerminalRequest {
string terminal_id = 1;
}
message ReadTerminalResponse {
string contents = 1;
}
message OpenTerminalRequest {
string terminal_id = 1;
}
message OpenTerminalResponse {
}
message GetLintErrorsRequest {
message AwaitNewLintsConfig {
string acknowledger_id = 1;
int32 timeout_ms = 2;
int32 grace_period_ms = 3;
bool include_saved = 4;
}
optional .exa.extension_server_pb.GetLintErrorsRequest.AwaitNewLintsConfig await_new_lints_config = 1;
}
message GetLintErrorsResponse {
repeated .exa.codeium_common_pb.CodeDiagnostic lint_errors = 1;
repeated .exa.codeium_common_pb.CodeDiagnostic persistent_lint_errors = 2;
}
message WatchForLintsRequest {
string acknowledger_id = 1;
int32 duration_ms = 2;
}
message WatchForLintsResponse {
}
message GetLintsForAcknowledgerRequest {
string acknowledger_id = 1;
}
message GetLintsForAcknowledgerResponse {
repeated .exa.codeium_common_pb.CodeDiagnostic lint_errors = 1;
repeated .exa.codeium_common_pb.CodeDiagnostic persistent_lint_errors = 2;
}
message OpenDiffZonesRequest {
string cascade_id = 1;
repeated .exa.language_server_pb.ValidationState validation_states = 2;
bool write_new_state = 3;
optional string git_worktree_path = 4;
}
message OpenDiffZonesResponse {
}
message OpenMultiDiffRequest {
string cascade_id = 1;
string title = 2;
}
message OpenMultiDiffResponse {
}
message OpenExternalUrlRequest {
string url = 1;
bool use_ide_browser = 2;
}
message OpenExternalUrlResponse {
}
message HandleAsyncPostMessageRequest {
string message_type = 1;
string message_content = 2;
}
message HandleAsyncPostMessageResponse {
string response_content = 1;
}
message OpenWindsurfRulesFileRequest {
bool is_workspace_rules = 1;
}
message OpenWindsurfRulesFileResponse {
}
message DeleteWindsurfRulesFileRequest {
bool is_workspace_rules = 1;
string file_path = 2;
}
message DeleteWindsurfRulesFileResponse {
}
message RefreshURIsRequest {
repeated string uris = 1;
}
message RefreshURIsResponse {
}
message OpenConfigurePluginsPageRequest {
optional string server_name = 1;
}
message OpenConfigurePluginsPageResponse {
}
message NotebookCellEdit {
int32 cell_index = 1;
bool is_insert = 2;
string cell_type = 3;
}
message WriteCascadeEditRequest {
string uri = 1;
string target_content = 2;
optional string cascade_id = 3;
optional string git_worktree_path = 4;
optional .exa.extension_server_pb.NotebookCellEdit notebook_cell = 5;
}
message WriteCascadeEditResponse {
}
message OpenConversationWorkspaceQuickPickRequest {
string cascade_id = 1;
repeated string workspace_uris = 2;
}
message OpenConversationWorkspaceQuickPickResponse {
bool open_in_current_window = 1;
}
message FindAllReferencesRequest {
string file_uri = 1;
string symbol = 2;
uint32 line = 3;
uint32 occurrence_index = 4;
}
message FindAllReferencesResponse {
repeated .exa.codeium_common_pb.LspReference references = 1;
}
message GetLSPCompletionItemsRequest {
string document_uri = 1;
.exa.codeium_common_pb.DocumentPosition position = 2;
}
message GetLSPCompletionItemsResponse {
string completion_items_json = 1;
}
message UpdateCascadeTrajectorySummariesRequest {
.exa.cortex_pb.CascadeTrajectorySummaries summaries = 1;
bool initial_load_complete = 2;
}
message UpdateCascadeTrajectorySummariesResponse {
}
message LoadCodeMapRequest {
string codemap_json = 1;
}
message LoadCodeMapResponse {
}
message AddAnnotationRequest {
.exa.codeium_common_pb.CodeAnnotation annotation = 1;
}
message AddAnnotationResponse {
}
message RemoveAnnotationRequest {
string annotation_id = 1;
}
message RemoveAnnotationResponse {
}
message ShowAnnotationRequest {
string annotation_id = 1;
}
message ShowAnnotationResponse {
}
message GetSecretValueRequest {
string key = 1;
}
message GetSecretValueResponse {
string value = 1;
}
message StoreSecretValueRequest {
string key = 1;
string value = 2;
}
message StoreSecretValueResponse {
}
message GetRedirectUriRequest {
}
message GetRedirectUriResponse {
string uri = 1;
}
message CheckExperimentRequest {
string experiment_key = 1;
map<string, string> context_overrides = 2;
}
message CheckExperimentResponse {
bool enabled = 1;
optional .exa.extension_server_pb.ExperimentVariant variant = 2;
optional string error_message = 3;
}
message ExperimentVariant {
string name = 1;
.exa.extension_server_pb.ExperimentPayload payload = 2;
}
message ExperimentPayload {
string type = 1;
string value = 2;
}
message SearchQueryRequest {
string query = 1;
optional int32 max_results = 2;
optional string cache_key = 3;
optional bool include_ignored_files = 4 [deprecated = true];
}
message SearchQueryResponse {
repeated string result_uris = 1;
}
message UnmountChangesRequest {
}
message UnmountChangesResponse {
bool success = 1;
string error_message = 2;
}
message LogoutWindsurfRequest {
string api_key = 1;
}
message LogoutWindsurfResponse {
}
message DeleteWindsurfWorkflowRequest {
.exa.cortex_pb.CortexMemoryScope scope = 1;
string file_path = 2;
}
message DeleteWindsurfWorkflowResponse {
}
message NotifyMcpStateChangedRequest {
reserved 2;
reserved 3;
repeated .exa.cortex_pb.McpServerState states = 1;
}
message NotifyMcpStateChangedResponse {
}
message NativeStorageTarget {
oneof target {
.exa.extension_server_pb.SettingTarget setting = 1;
.exa.extension_server_pb.StateTarget state = 2;
}
}
message SettingTarget {
.exa.extension_server_pb.SettingLocation location = 1;
}
message StateTarget {
}
message NativeValue {
oneof value {
string string_value = 1;
int32 int_value = 2;
bool bool_value = 3;
double double_value = 4;
.exa.extension_server_pb.NativeValueList list_value = 5;
.exa.extension_server_pb.NativeValueMap map_value = 6;
}
}
message NativeValueList {
repeated .exa.extension_server_pb.NativeValue values = 1;
}
message NativeValueMap {
map<string, .exa.extension_server_pb.NativeValue> values = 1;
}
message NativeValueEntry {
.exa.extension_server_pb.NativeValue value = 1;
bool is_default = 2;
}
message GetNativeValuesRequest {
.exa.extension_server_pb.NativeStorageTarget target = 1;
repeated string keys = 2;
}
message GetNativeValuesResponse {
map<string, .exa.extension_server_pb.NativeValueEntry> values = 1;
}
message SetNativeValueRequest {
.exa.extension_server_pb.NativeStorageTarget target = 1;
string key = 2;
.exa.extension_server_pb.NativeValue value = 3;
.exa.extension_server_pb.NativeValue expected_previous_value = 4;
}
message SetNativeValueResponse {
bool concurrency_conflict = 1;
.exa.extension_server_pb.NativeValueEntry current_value = 2;
}
message ClearNativeValueRequest {
.exa.extension_server_pb.NativeStorageTarget target = 1;
string key = 2;
}
message ClearNativeValueResponse {
}
message SubscribeNativeValuesRequest {
.exa.extension_server_pb.NativeStorageTarget target = 1;
}
message SubscribeNativeValuesResponse {
map<string, .exa.extension_server_pb.NativeValueEntry> values = 1;
}
service ExtensionServerService {
rpc LanguageServerStarted (.exa.extension_server_pb.LanguageServerStartedRequest) returns (.exa.extension_server_pb.LanguageServerStartedResponse);
rpc OpenSetting (.exa.extension_server_pb.OpenSettingRequest) returns (.exa.extension_server_pb.OpenSettingResponse);
rpc OpenFilePointer (.exa.extension_server_pb.OpenFilePointerRequest) returns (.exa.extension_server_pb.OpenFilePointerResponse);
rpc InsertCodeAtCursor (.exa.extension_server_pb.InsertCodeAtCursorRequest) returns (.exa.extension_server_pb.InsertCodeAtCursorResponse);
rpc LogEvent (.exa.extension_server_pb.LogEventRequest) returns (.exa.extension_server_pb.LogEventResponse);
rpc CheckTerminalShellSupport (.exa.extension_server_pb.CheckTerminalShellSupportRequest) returns (.exa.extension_server_pb.CheckTerminalShellSupportResponse);
rpc ExecuteCommand (.exa.extension_server_pb.ExecuteCommandRequest) returns (stream .exa.codeium_common_pb.TerminalShellCommandStreamChunk);
rpc ShowTerminal (.exa.extension_server_pb.ShowTerminalRequest) returns (.exa.extension_server_pb.ShowTerminalResponse);
rpc OpenVirtualFile (.exa.extension_server_pb.OpenVirtualFileRequest) returns (.exa.extension_server_pb.OpenVirtualFileResponse);
rpc SaveDocument (.exa.extension_server_pb.SaveDocumentRequest) returns (.exa.extension_server_pb.SaveDocumentResponse);
rpc ReadTerminal (.exa.extension_server_pb.ReadTerminalRequest) returns (.exa.extension_server_pb.ReadTerminalResponse);
rpc OpenTerminal (.exa.extension_server_pb.OpenTerminalRequest) returns (.exa.extension_server_pb.OpenTerminalResponse);
rpc GetLintErrors (.exa.extension_server_pb.GetLintErrorsRequest) returns (.exa.extension_server_pb.GetLintErrorsResponse);
rpc WatchForLints (.exa.extension_server_pb.WatchForLintsRequest) returns (.exa.extension_server_pb.WatchForLintsResponse);
rpc GetLintsForAcknowledger (.exa.extension_server_pb.GetLintsForAcknowledgerRequest) returns (.exa.extension_server_pb.GetLintsForAcknowledgerResponse);
rpc OpenDiffZones (.exa.extension_server_pb.OpenDiffZonesRequest) returns (.exa.extension_server_pb.OpenDiffZonesResponse);
rpc OpenExternalUrl (.exa.extension_server_pb.OpenExternalUrlRequest) returns (.exa.extension_server_pb.OpenExternalUrlResponse);
rpc OpenMultiDiff (.exa.extension_server_pb.OpenMultiDiffRequest) returns (.exa.extension_server_pb.OpenMultiDiffResponse);
rpc HandleAsyncPostMessage (.exa.extension_server_pb.HandleAsyncPostMessageRequest) returns (.exa.extension_server_pb.HandleAsyncPostMessageResponse);
rpc OpenWindsurfRulesFile (.exa.extension_server_pb.OpenWindsurfRulesFileRequest) returns (.exa.extension_server_pb.OpenWindsurfRulesFileResponse);
rpc DeleteWindsurfRulesFile (.exa.extension_server_pb.DeleteWindsurfRulesFileRequest) returns (.exa.extension_server_pb.DeleteWindsurfRulesFileResponse);
rpc DeleteWindsurfWorkflow (.exa.extension_server_pb.DeleteWindsurfWorkflowRequest) returns (.exa.extension_server_pb.DeleteWindsurfWorkflowResponse);
rpc NotifyMcpStateChanged (.exa.extension_server_pb.NotifyMcpStateChangedRequest) returns (.exa.extension_server_pb.NotifyMcpStateChangedResponse);
rpc OpenConfigurePluginsPage (.exa.extension_server_pb.OpenConfigurePluginsPageRequest) returns (.exa.extension_server_pb.OpenConfigurePluginsPageResponse);
rpc OpenConversationWorkspaceQuickPick (.exa.extension_server_pb.OpenConversationWorkspaceQuickPickRequest) returns (.exa.extension_server_pb.OpenConversationWorkspaceQuickPickResponse);
rpc FindAllReferences (.exa.extension_server_pb.FindAllReferencesRequest) returns (.exa.extension_server_pb.FindAllReferencesResponse);
rpc GetLSPCompletionItems (.exa.extension_server_pb.GetLSPCompletionItemsRequest) returns (.exa.extension_server_pb.GetLSPCompletionItemsResponse);
rpc RefreshURIs (.exa.extension_server_pb.RefreshURIsRequest) returns (.exa.extension_server_pb.RefreshURIsResponse);
rpc CheckExperiment (.exa.extension_server_pb.CheckExperimentRequest) returns (.exa.extension_server_pb.CheckExperimentResponse);
rpc WriteCascadeEdit (.exa.extension_server_pb.WriteCascadeEditRequest) returns (.exa.extension_server_pb.WriteCascadeEditResponse);
rpc StartAudioRecording (.exa.extension_server_pb.StartAudioRecordingRequest) returns (.exa.extension_server_pb.StartAudioRecordingResponse);
rpc EndAudioRecording (.exa.extension_server_pb.EndAudioRecordingRequest) returns (.exa.extension_server_pb.EndAudioRecordingResponse);
rpc GetCurrentAudioRecording (.exa.extension_server_pb.GetCurrentAudioRecordingRequest) returns (.exa.extension_server_pb.GetCurrentAudioRecordingResponse);
rpc UpdateCascadeTrajectorySummaries (.exa.extension_server_pb.UpdateCascadeTrajectorySummariesRequest) returns (.exa.extension_server_pb.UpdateCascadeTrajectorySummariesResponse);
rpc LoadCodeMap (.exa.extension_server_pb.LoadCodeMapRequest) returns (.exa.extension_server_pb.LoadCodeMapResponse);
rpc AddAnnotation (.exa.extension_server_pb.AddAnnotationRequest) returns (.exa.extension_server_pb.AddAnnotationResponse);
rpc RemoveAnnotation (.exa.extension_server_pb.RemoveAnnotationRequest) returns (.exa.extension_server_pb.RemoveAnnotationResponse);
rpc ShowAnnotation (.exa.extension_server_pb.ShowAnnotationRequest) returns (.exa.extension_server_pb.ShowAnnotationResponse);
rpc GetSecretValue (.exa.extension_server_pb.GetSecretValueRequest) returns (.exa.extension_server_pb.GetSecretValueResponse);
rpc StoreSecretValue (.exa.extension_server_pb.StoreSecretValueRequest) returns (.exa.extension_server_pb.StoreSecretValueResponse);
rpc GetRedirectUri (.exa.extension_server_pb.GetRedirectUriRequest) returns (.exa.extension_server_pb.GetRedirectUriResponse);
rpc CancelVibeAndReplace (.exa.extension_server_pb.CancelVibeAndReplaceRequest) returns (.exa.extension_server_pb.CancelVibeAndReplaceResponse);
rpc SearchQuery (.exa.extension_server_pb.SearchQueryRequest) returns (.exa.extension_server_pb.SearchQueryResponse);
rpc UnmountChanges (.exa.extension_server_pb.UnmountChangesRequest) returns (.exa.extension_server_pb.UnmountChangesResponse);
rpc LogoutWindsurf (.exa.extension_server_pb.LogoutWindsurfRequest) returns (.exa.extension_server_pb.LogoutWindsurfResponse);
rpc GetNativeValues (.exa.extension_server_pb.GetNativeValuesRequest) returns (.exa.extension_server_pb.GetNativeValuesResponse);
rpc SetNativeValue (.exa.extension_server_pb.SetNativeValueRequest) returns (.exa.extension_server_pb.SetNativeValueResponse);
rpc ClearNativeValue (.exa.extension_server_pb.ClearNativeValueRequest) returns (.exa.extension_server_pb.ClearNativeValueResponse);
rpc SubscribeNativeValues (.exa.extension_server_pb.SubscribeNativeValuesRequest) returns (stream .exa.extension_server_pb.SubscribeNativeValuesResponse);
}
@@ -0,0 +1,75 @@
syntax = "proto3";
package exa.file_system_provider_pb;
import "buf/validate/validate.proto";
import "google/protobuf/timestamp.proto";
enum FileType {
FILE_TYPE_UNSPECIFIED = 0;
FILE_TYPE_DIRECTORY = 1;
FILE_TYPE_REGULAR = 2;
FILE_TYPE_SYMLINK = 3;
}
enum FileSystemError {
FILE_SYSTEM_ERROR_UNSPECIFIED = 0;
FILE_SYSTEM_ERROR_NOT_DIRECTORY = 1;
FILE_SYSTEM_ERROR_IS_DIRECTORY = 2;
FILE_SYSTEM_ERROR_NOT_EXIST = 3;
FILE_SYSTEM_ERROR_EXISTS = 4;
FILE_SYSTEM_ERROR_PERMISSION = 5;
FILE_SYSTEM_ERROR_INVALID_URI = 6;
FILE_SYSTEM_ERROR_OTHER = 7;
}
message FileStat {
.exa.file_system_provider_pb.FileType type = 1;
int64 size = 2;
.google.protobuf.Timestamp mtime = 3;
.google.protobuf.Timestamp ctime = 4;
.exa.file_system_provider_pb.FileSystemError error = 5;
string error_message = 6;
}
message StatRequest {
repeated string uri = 1;
}
message StatResponse {
repeated .exa.file_system_provider_pb.FileStat file_stat = 1;
}
message ReadDirectoryRequest {
repeated string uri = 1;
}
message ReadDirectoryResponse {
repeated .exa.file_system_provider_pb.DirEntries entries = 1;
}
message DirEntries {
map<string, .exa.file_system_provider_pb.FileStat> file_stat_entries = 1;
.exa.file_system_provider_pb.FileSystemError error = 2;
string error_message = 3;
}
message ReadFileRequest {
repeated string uri = 1;
}
message ReadFileResponse {
repeated .exa.file_system_provider_pb.FileData file_data = 1;
}
message FileData {
bytes content = 1;
.exa.file_system_provider_pb.FileSystemError error = 2;
string error_message = 3;
}
service FileSystemProviderService {
rpc Stat (.exa.file_system_provider_pb.StatRequest) returns (.exa.file_system_provider_pb.StatResponse);
rpc ReadDirectory (.exa.file_system_provider_pb.ReadDirectoryRequest) returns (.exa.file_system_provider_pb.ReadDirectoryResponse);
rpc ReadFile (.exa.file_system_provider_pb.ReadFileRequest) returns (.exa.file_system_provider_pb.ReadFileResponse);
}
@@ -0,0 +1,461 @@
syntax = "proto3";
package exa.index_pb;
import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
enum IndexMode {
INDEX_MODE_UNSPECIFIED = 0;
INDEX_MODE_HALFVEC = 1;
INDEX_MODE_BINARY = 2;
INDEX_MODE_BINARY_WITH_RERANK = 3;
INDEX_MODE_BRUTE_FORCE = 4;
INDEX_MODE_RANDOM_SEARCH = 5;
}
enum IndexingStatus {
INDEXING_STATUS_UNSPECIFIED = 0;
INDEXING_STATUS_ERROR = 1;
INDEXING_STATUS_QUEUED = 2;
INDEXING_STATUS_CLONING_REPO = 3;
INDEXING_STATUS_SCANNING_REPO = 4;
INDEXING_STATUS_GENERATING_EMBEDDINGS = 5;
INDEXING_STATUS_VECTOR_INDEXING = 6;
INDEXING_STATUS_DONE = 7;
INDEXING_STATUS_CANCELING = 8;
INDEXING_STATUS_CANCELED = 9;
}
message IndexDbVersion {
int32 version = 1;
int32 enterprise_version = 2;
}
message IndexBuildConfig {
.exa.index_pb.IndexDbVersion db_version = 2;
int32 cci_timeout_secs = 3;
.exa.index_pb.IndexMode index_mode = 4;
}
message RepositoryConfig {
message AutoIndexConfig {
string branch_name = 1;
.google.protobuf.Duration interval = 2;
int32 max_num_auto_indexes = 3;
}
string git_url = 1;
.exa.codeium_common_pb.ScmProvider scm_provider = 2;
.exa.index_pb.RepositoryConfig.AutoIndexConfig auto_index_config = 3;
bool store_snippets = 4;
repeated string whitelisted_groups = 5;
bool use_github_app = 6;
string auth_uid = 7;
string email = 9;
string service_key_id = 8;
}
message IndexConfig {
.google.protobuf.Timestamp prune_time = 1;
.google.protobuf.Duration prune_interval = 2;
bool enable_prune = 3;
bool enable_smallest_repo_first = 4;
bool enable_round_robin = 5;
}
message VectorIndexStats {
int64 num_embeddings = 1;
int64 index_bytes_count = 2;
}
message ProgressBar {
float progress = 1;
string text = 2;
.google.protobuf.Duration remaining_time = 3;
}
message Index {
message RepoStats {
int64 size = 1;
int64 file_count = 2;
int64 size_no_ignore = 3;
int64 file_count_no_ignore = 4;
}
string id = 1;
string repo_name = 2;
string workspace = 3;
.exa.codeium_common_pb.GitRepoInfo repo_info = 4;
.google.protobuf.Timestamp created_at = 5;
.google.protobuf.Timestamp updated_at = 6;
.google.protobuf.Timestamp scheduled_at = 13;
.exa.index_pb.IndexingStatus status = 7;
string status_detail = 8;
bool auto_indexed = 9;
bool has_snippets = 12;
string auth_uid = 15;
string email = 16;
.exa.index_pb.Index.RepoStats repo_stats = 14;
map<string, .exa.index_pb.ProgressBar> indexing_progress = 10;
.exa.index_pb.VectorIndexStats index_stats = 11;
}
message Repository {
string repo_name = 1;
.exa.index_pb.RepositoryConfig config = 2;
.google.protobuf.Timestamp created_at = 4;
.google.protobuf.Timestamp updated_at = 5;
.google.protobuf.Timestamp last_used_at = 6;
.exa.index_pb.Index latest_index = 3;
}
message RequestIndexVersion {
oneof version {
string commit = 1;
string branch = 2;
}
string version_alias = 3;
}
message ManagementMetadata {
reserved 1;
reserved "auth_token";
string auth_uid = 2;
string service_key = 3;
bool force_target_public_index = 4;
string force_team_id = 5;
string service_key_id = 6;
}
message AddRepositoryRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
.exa.index_pb.RepositoryConfig config = 2;
.exa.index_pb.RequestIndexVersion initial_index = 3;
}
message AddRepositoryResponse {
string repo_name = 1;
string index_id = 2;
}
message EnableIndexingRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
.exa.index_pb.IndexBuildConfig config = 2;
}
message EnableIndexingResponse {
}
message DisableIndexingRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
}
message DisableIndexingResponse {
}
message EditRepositoryRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string repo_name = 2;
.exa.index_pb.RepositoryConfig config = 3;
}
message EditRepositoryResponse {
}
message DeleteRepositoryRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string repo_name = 2;
repeated string repo_names = 3;
}
message DeleteRepositoryResponse {
}
message GetRepositoriesFilter {
string repo_name = 1;
string group_id = 2;
}
message GetRepositoriesRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
.exa.index_pb.GetRepositoriesFilter filter = 2;
}
message GetRepositoriesResponse {
repeated .exa.index_pb.Repository repositories = 1;
}
message GetIndexesRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string repo_name = 2;
}
message GetIndexesResponse {
repeated .exa.index_pb.Index indexes = 1;
}
message GetIndexRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string index_id = 2;
}
message GetIndexResponse {
.exa.index_pb.Index index = 1;
.exa.index_pb.Repository repository = 2;
}
message RemoteIndexStats {
string index_id = 1;
int64 cci_count = 2;
int64 snippet_count = 3;
int64 embedding_count = 4;
}
message GetRemoteIndexStatsRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
repeated string index_ids = 2;
}
message GetRemoteIndexStatsResponse {
repeated .exa.index_pb.RemoteIndexStats index_stats = 1;
}
message AddIndexRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string repo_name = 2;
.exa.index_pb.RequestIndexVersion version = 3;
}
message AddIndexResponse {
string index_id = 1;
}
message CancelIndexingRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string index_id = 2;
repeated string index_ids = 3;
}
message CancelIndexingResponse {
}
message RetryIndexingRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string index_id = 2;
repeated string index_ids = 3;
}
message RetryIndexingResponse {
}
message DeleteIndexRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
string index_id = 2;
repeated string index_ids = 3;
}
message DeleteIndexResponse {
}
message PruneDatabaseRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
}
message PruneDatabaseResponse {
}
message GetDatabaseStatsRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
}
message GetDatabaseStatsResponse {
int64 database_total_bytes_count = 1;
int64 table_total_bytes_count = 2;
int64 index_total_bytes_count = 3;
int64 estimate_prunable_bytes = 4;
bool is_pruning = 5;
string last_prune_error = 6;
int64 all_tables_bytes_count = 7;
}
message SetIndexConfigRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
.exa.index_pb.IndexConfig index_config = 2;
}
message SetIndexConfigResponse {
}
message GetIndexConfigRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
}
message GetIndexConfigResponse {
.exa.index_pb.IndexConfig index_config = 1;
}
message GetNumberConnectionsRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
}
message GetNumberConnectionsResponse {
map<string, uint32> connections_map = 1;
}
message GetConnectionsDebugInfoRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
}
message GetConnectionsDebugInfoResponse {
string debug_info = 1;
}
message GetIndexedRepositoriesRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
bool include_incomplete = 2;
repeated string group_ids_filter = 3;
}
message GetIndexedRepositoriesResponse {
repeated .exa.codeium_common_pb.GitRepoInfo repositories = 1;
repeated .exa.index_pb.Index indexes = 2;
}
message RepositoryFilter {
.exa.codeium_common_pb.GitRepoInfo repository = 1;
repeated string excluded_files = 2;
repeated string filter_paths = 3;
}
message GetMatchingFilePathsRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.codeium_common_pb.GitRepoInfo repository = 2;
string query = 3;
uint32 max_items = 4;
repeated string group_ids_filter = 5;
}
message GetMatchingFilePathsResponse {
repeated string relative_file_paths = 1;
}
message GetNearestCCIsFromEmbeddingRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.codeium_common_pb.Embedding embedding = 2;
repeated .exa.index_pb.RepositoryFilter repository_filters = 3;
int64 max_results = 4;
repeated string group_ids_filter = 5;
}
message ScoredContextItem {
.exa.codeium_common_pb.CodeContextItem code_context_item = 1;
float score = 2;
}
message GetNearestCCIsFromEmbeddingResponse {
repeated .exa.index_pb.ScoredContextItem scored_context_items = 1;
}
message GetEmbeddingsForCodeContextItemsRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
repeated .exa.codeium_common_pb.CodeContextItem code_context_items = 2;
.exa.codeium_common_pb.ContextSnippetType snippet_type = 3;
}
message GetEmbeddingsForCodeContextItemsResponse {
repeated .exa.codeium_common_pb.Embedding embeddings = 1;
}
message IndexStats {
string repository_name = 1;
int64 file_count = 2;
int64 code_context_item_count = 3;
}
message IndexerEvent {
message Deletion {
string absolute_uri = 1;
}
message Untrack {
string absolute_uri = 1;
repeated .exa.codeium_common_pb.WorkspacePath paths = 2;
string workspace_uri = 3;
}
message Update {
message AddWorkspaceInfo {
uint64 add_workspace_uid = 1;
uint64 add_workspace_queue_uid = 2;
}
string absolute_uri = 1;
repeated .exa.codeium_common_pb.WorkspacePath paths = 2;
.google.protobuf.Timestamp mod_time = 3;
.exa.index_pb.IndexerEvent.Update.AddWorkspaceInfo add_workspace_info = 4;
}
message AddWorkspace {
uint64 add_workspace_uid = 1;
uint64 add_workspace_queue_uid = 2;
string workspace_uri = 3;
int64 num_files = 4;
int64 size = 5;
}
message RemoveWorkspace {
string workspace_uri = 1;
}
message IgnoreWorkspace {
string workspace_uri = 1;
}
message AddCommit {
string sha = 1;
}
uint64 uid = 1;
oneof event_oneof {
.exa.index_pb.IndexerEvent.Deletion deletion = 2;
.exa.index_pb.IndexerEvent.Untrack untrack = 3;
.exa.index_pb.IndexerEvent.Update update = 4;
.exa.index_pb.IndexerEvent.AddWorkspace add_workspace = 5;
.exa.index_pb.IndexerEvent.RemoveWorkspace remove_workspace = 6;
.exa.index_pb.IndexerEvent.IgnoreWorkspace ignore_workspace = 7;
.exa.index_pb.IndexerEvent.AddCommit add_commit = 8;
}
}
service IndexManagementService {
rpc EnableIndexing (.exa.index_pb.EnableIndexingRequest) returns (.exa.index_pb.EnableIndexingResponse);
rpc DisableIndexing (.exa.index_pb.DisableIndexingRequest) returns (.exa.index_pb.DisableIndexingResponse);
rpc AddRepository (.exa.index_pb.AddRepositoryRequest) returns (.exa.index_pb.AddRepositoryResponse);
rpc EditRepository (.exa.index_pb.EditRepositoryRequest) returns (.exa.index_pb.EditRepositoryResponse);
rpc DeleteRepository (.exa.index_pb.DeleteRepositoryRequest) returns (.exa.index_pb.DeleteRepositoryResponse);
rpc GetRepositories (.exa.index_pb.GetRepositoriesRequest) returns (.exa.index_pb.GetRepositoriesResponse);
rpc AddIndex (.exa.index_pb.AddIndexRequest) returns (.exa.index_pb.AddIndexResponse);
rpc CancelIndexing (.exa.index_pb.CancelIndexingRequest) returns (.exa.index_pb.CancelIndexingResponse);
rpc RetryIndexing (.exa.index_pb.RetryIndexingRequest) returns (.exa.index_pb.RetryIndexingResponse);
rpc DeleteIndex (.exa.index_pb.DeleteIndexRequest) returns (.exa.index_pb.DeleteIndexResponse);
rpc GetIndexes (.exa.index_pb.GetIndexesRequest) returns (.exa.index_pb.GetIndexesResponse);
rpc GetIndex (.exa.index_pb.GetIndexRequest) returns (.exa.index_pb.GetIndexResponse);
rpc GetRemoteIndexStats (.exa.index_pb.GetRemoteIndexStatsRequest) returns (.exa.index_pb.GetRemoteIndexStatsResponse);
rpc PruneDatabase (.exa.index_pb.PruneDatabaseRequest) returns (.exa.index_pb.PruneDatabaseResponse);
rpc GetDatabaseStats (.exa.index_pb.GetDatabaseStatsRequest) returns (.exa.index_pb.GetDatabaseStatsResponse);
rpc SetIndexConfig (.exa.index_pb.SetIndexConfigRequest) returns (.exa.index_pb.SetIndexConfigResponse);
rpc GetIndexConfig (.exa.index_pb.GetIndexConfigRequest) returns (.exa.index_pb.GetIndexConfigResponse);
rpc GetNumberConnections (.exa.index_pb.GetNumberConnectionsRequest) returns (.exa.index_pb.GetNumberConnectionsResponse);
rpc GetConnectionsDebugInfo (.exa.index_pb.GetConnectionsDebugInfoRequest) returns (.exa.index_pb.GetConnectionsDebugInfoResponse);
}
service IndexService {
rpc GetIndexedRepositories (.exa.index_pb.GetIndexedRepositoriesRequest) returns (.exa.index_pb.GetIndexedRepositoriesResponse);
rpc GetNearestCCIsFromEmbedding (.exa.index_pb.GetNearestCCIsFromEmbeddingRequest) returns (.exa.index_pb.GetNearestCCIsFromEmbeddingResponse);
rpc GetEmbeddingsForCodeContextItems (.exa.index_pb.GetEmbeddingsForCodeContextItemsRequest) returns (.exa.index_pb.GetEmbeddingsForCodeContextItemsResponse);
rpc GetMatchingFilePaths (.exa.index_pb.GetMatchingFilePathsRequest) returns (.exa.index_pb.GetMatchingFilePathsResponse);
}
@@ -0,0 +1,144 @@
syntax = "proto3";
package exa.knowledge_base_pb;
import "buf/validate/validate.proto";
import "exa/auto_cascade_common_pb/auto_cascade_common.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/opensearch_clients_pb/opensearch_clients.proto";
import "google/protobuf/timestamp.proto";
message KnowledgeBaseItem {
string identifier = 1;
.exa.opensearch_clients_pb.ConnectorType connector_type = 2;
string url = 3;
string title = 4;
string description = 5;
string content = 6;
.google.protobuf.Timestamp last_crawled_at = 7;
string user_name = 8;
}
message CreateKnowledgeBaseItemRequest {
reserved 3;
reserved 4;
reserved 5;
reserved "title", "url", "description";
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.opensearch_clients_pb.ConnectorType connector_type = 2;
repeated string urls = 6;
}
message CreateKnowledgeBaseItemResponse {
string identifier = 1;
string title = 2;
string url = 3;
}
message EditKnowledgeBaseItemRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string identifier = 2;
string description = 3;
}
message EditKnowledgeBaseItemResponse {
}
message DeleteKnowledgeBaseItemRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string identifier = 2;
}
message DeleteKnowledgeBaseItemResponse {
}
message ReadKnowledgeBaseItemRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string identifier = 2;
}
message ReadKnowledgeBaseItemResponse {
.exa.knowledge_base_pb.KnowledgeBaseItem item = 1;
}
message GetKnowledgeBaseItemsRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
}
message GetKnowledgeBaseItemsResponse {
repeated .exa.knowledge_base_pb.KnowledgeBaseItem items = 1;
}
message GetKnowledgeBaseItemsForTeamRequest {
reserved 2;
.exa.codeium_common_pb.Metadata metadata = 1;
}
message GetKnowledgeBaseItemsForTeamResponse {
repeated .exa.knowledge_base_pb.KnowledgeBaseItem items = 1;
}
message CreateConnectionRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.opensearch_clients_pb.ConnectorType connector_type = 2;
string access_token = 3;
.google.protobuf.Timestamp access_token_expires_at = 4;
string refresh_token = 5;
.google.protobuf.Timestamp refresh_token_expires_at = 6;
}
message CreateConnectionResponse {
}
message RemoveConnectionRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.opensearch_clients_pb.ConnectorType connector_type = 2;
}
message RemoveConnectionResponse {
}
message GetConnectionRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
.exa.opensearch_clients_pb.ConnectorType connector_type = 2;
}
message GetConnectionResponse {
bool enabled = 1;
string access_token = 2;
}
message GetGithubPullRequestSearchInfoRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
string query = 2;
int32 limit = 3;
}
message GetGithubPullRequestSearchInfoResponse {
repeated .exa.auto_cascade_common_pb.GithubPullRequestInfo pull_request_infos = 1;
}
message GetGithubIntegrationStatusRequest {
.exa.codeium_common_pb.Metadata metadata = 1;
}
message GetGithubIntegrationStatusResponse {
string username = 1;
repeated .exa.auto_cascade_common_pb.GithubInstallationInfo installations = 2;
}
service KnowledgeBaseService {
rpc CreateKnowledgeBaseItem (.exa.knowledge_base_pb.CreateKnowledgeBaseItemRequest) returns (.exa.knowledge_base_pb.CreateKnowledgeBaseItemResponse);
rpc EditKnowledgeBaseItem (.exa.knowledge_base_pb.EditKnowledgeBaseItemRequest) returns (.exa.knowledge_base_pb.EditKnowledgeBaseItemResponse);
rpc DeleteKnowledgeBaseItem (.exa.knowledge_base_pb.DeleteKnowledgeBaseItemRequest) returns (.exa.knowledge_base_pb.DeleteKnowledgeBaseItemResponse);
rpc ReadKnowledgeBaseItem (.exa.knowledge_base_pb.ReadKnowledgeBaseItemRequest) returns (.exa.knowledge_base_pb.ReadKnowledgeBaseItemResponse);
rpc GetKnowledgeBaseItems (.exa.knowledge_base_pb.GetKnowledgeBaseItemsRequest) returns (.exa.knowledge_base_pb.GetKnowledgeBaseItemsResponse);
rpc GetKnowledgeBaseItemsForTeam (.exa.knowledge_base_pb.GetKnowledgeBaseItemsForTeamRequest) returns (.exa.knowledge_base_pb.GetKnowledgeBaseItemsForTeamResponse);
rpc GetGithubPullRequestSearchInfo (.exa.knowledge_base_pb.GetGithubPullRequestSearchInfoRequest) returns (.exa.knowledge_base_pb.GetGithubPullRequestSearchInfoResponse);
rpc CreateConnection (.exa.knowledge_base_pb.CreateConnectionRequest) returns (.exa.knowledge_base_pb.CreateConnectionResponse);
rpc RemoveConnection (.exa.knowledge_base_pb.RemoveConnectionRequest) returns (.exa.knowledge_base_pb.RemoveConnectionResponse);
rpc GetConnection (.exa.knowledge_base_pb.GetConnectionRequest) returns (.exa.knowledge_base_pb.GetConnectionResponse);
rpc GetGithubIntegrationStatus (.exa.knowledge_base_pb.GetGithubIntegrationStatusRequest) returns (.exa.knowledge_base_pb.GetGithubIntegrationStatusResponse);
}
@@ -0,0 +1,186 @@
syntax = "proto3";
package exa.model_management_pb;
import "buf/validate/validate.proto";
import "exa/trainer_pb/config.proto";
enum InferenceRole {
INFERENCE_ROLE_UNSPECIFIED = 0;
INFERENCE_ROLE_CHAT = 1;
INFERENCE_ROLE_AUTOCOMPLETE = 2;
INFERENCE_ROLE_EMBEDDING = 3;
}
message AddModelRequest {
string model_name = 1;
oneof model_path {
string model_gcs_path = 2;
string model_local_path = 4;
}
bool overwrite = 3;
bool async = 5;
}
message AddModelResponse {
}
message DeleteModelRequest {
string model_name = 1;
}
message DeleteModelResponse {
}
message ModelInPV {
string model_name = 1;
int64 model_size = 2;
}
message ListModelsRequest {
}
message ListModelsResponse {
repeated .exa.model_management_pb.ModelInPV models = 1;
}
message InferenceServerEnvVariable {
string name = 1;
string value = 2;
}
message StartInferenceServerRequest {
oneof model {
string model_name = 1;
.exa.model_management_pb.InferenceModels models = 14;
}
int32 port = 2;
int32 num_gpus = 3;
int32 num_cpus = 4;
int32 memory_gb = 5;
string gpu_type = 22;
int32 model_parallelism = 6;
int32 gamma = 11;
float draft_temperature = 12;
int32 prompt_cache_cpu_memory_mib = 19;
int32 replicas = 8;
string suffix = 7;
repeated string custom_flags = 9;
bool run_async = 10;
string inference_server_image_path = 13;
bool blocking = 15;
int32 max_generation_sequences = 16;
int32 server_version = 17;
string deployment_name_override = 18;
int32 speculative_copy_length = 21;
repeated .exa.model_management_pb.InferenceServerEnvVariable inference_server_env = 20;
optional string deployment_yaml = 23;
}
message StartInferenceServerResponse {
reserved 1;
reserved "inference_server_service_ip_address";
string service_domain = 2;
}
message StopInferenceServerRequest {
reserved 1;
reserved "inference_server_service_ip_address";
string service_domain = 2;
}
message StopInferenceServerResponse {
}
message UpdateInferenceServerRequest {
reserved 1;
reserved "inference_server_service_ip_address";
oneof inference_server_id {
string service_domain = 14;
string deployment_name = 2;
}
int32 replicas = 3;
int32 num_gpus = 4;
int32 num_cpus = 5;
int32 memory_gb = 6;
int32 model_parallelism = 7;
int32 gamma = 10;
float draft_temperature = 11;
int32 max_generation_sequences = 13;
optional bool blocking = 12;
repeated string custom_flags = 9;
}
message UpdateInferenceServerResponse {
}
message ListInferenceServersRequest {
}
message ListInferenceServersResponse {
repeated .exa.model_management_pb.InferenceServerData inference_servers = 1;
}
message InferenceServerData {
reserved 1;
reserved "ip_address";
string service_domain = 18;
int32 port = 2;
string service_name = 3;
repeated string model_names = 4;
string age = 13;
int32 ready_replicas = 12;
int32 replicas = 5;
int32 num_gpus = 6;
int32 num_cpus = 7;
int32 memory_gb = 8;
int32 model_parallelism = 9;
int32 gamma = 14;
float draft_temperature = 15;
repeated string custom_flags = 10;
map<string, string> kubernetes_labels = 11;
bool blocking = 16;
int32 max_generation_sequences = 17;
int32 data_parallelism = 19;
}
message InferenceModel {
string model_name = 1;
optional string model_path = 4;
bool overwrite = 5;
bool draft = 2;
.exa.model_management_pb.InferenceRole role = 3;
.exa.trainer_pb.InferenceConfig custom_inference_config = 15;
}
message InferenceModels {
repeated .exa.model_management_pb.InferenceModel models = 1;
}
message PollInferenceServerRequest {
string service_domain = 1;
}
message PollInferenceServerResponse {
string service_domain = 1;
int32 port = 2;
int32 ready_replicas = 3;
int32 total_replicas = 4;
bool ready = 5;
repeated string pod_ips = 6;
}
service ModelManagementService {
rpc AddModel (.exa.model_management_pb.AddModelRequest) returns (.exa.model_management_pb.AddModelResponse);
rpc DeleteModel (.exa.model_management_pb.DeleteModelRequest) returns (.exa.model_management_pb.DeleteModelResponse);
rpc ListModels (.exa.model_management_pb.ListModelsRequest) returns (.exa.model_management_pb.ListModelsResponse);
rpc StartInferenceServer (.exa.model_management_pb.StartInferenceServerRequest) returns (.exa.model_management_pb.StartInferenceServerResponse);
rpc StopInferenceServer (.exa.model_management_pb.StopInferenceServerRequest) returns (.exa.model_management_pb.StopInferenceServerResponse);
rpc UpdateInferenceServer (.exa.model_management_pb.UpdateInferenceServerRequest) returns (.exa.model_management_pb.UpdateInferenceServerResponse);
rpc ListInferenceServers (.exa.model_management_pb.ListInferenceServersRequest) returns (.exa.model_management_pb.ListInferenceServersResponse);
rpc PollInferenceServer (.exa.model_management_pb.PollInferenceServerRequest) returns (.exa.model_management_pb.PollInferenceServerResponse);
}
@@ -0,0 +1,503 @@
syntax = "proto3";
package exa.opensearch_clients_pb;
import "buf/validate/validate.proto";
import "exa/chat_pb/chat.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/index_pb/index.proto";
import "google/protobuf/timestamp.proto";
enum SearchMode {
SEARCH_MODE_UNSPECIFIED = 0;
SEARCH_MODE_HYBRID = 1;
SEARCH_MODE_KEYWORD = 2;
SEARCH_MODE_APPROXIMATE_KNN = 3;
SEARCH_MODE_BRUTE_FORCE_KNN = 4;
}
enum ForwardStatus {
FORWARD_STATUS_UNSPECIFIED = 0;
FORWARD_STATUS_FAILURE = 1;
FORWARD_STATUS_SAVED = 2;
FORWARD_STATUS_SUCCESS = 3;
}
enum ConnectorType {
CONNECTOR_TYPE_UNSPECIFIED = 0;
CONNECTOR_TYPE_GITHUB = 1;
CONNECTOR_TYPE_SLACK = 2;
CONNECTOR_TYPE_GOOGLE_DRIVE = 3;
CONNECTOR_TYPE_JIRA = 4;
CONNECTOR_TYPE_CODEIUM = 5;
CONNECTOR_TYPE_EMAIL = 6;
CONNECTOR_TYPE_GITHUB_OAUTH = 7;
}
enum JobStatus {
JOB_STATUS_UNSPECIFIED = 0;
JOB_STATUS_QUEUED = 1;
JOB_STATUS_RUNNING = 2;
JOB_STATUS_COMPLETED = 3;
JOB_STATUS_CANCELLED = 4;
JOB_STATUS_CANCELLING = 5;
JOB_STATUS_ERRORED = 6;
JOB_STATUS_RETRYABLE = 7;
}
message TimeRange {
.google.protobuf.Timestamp start = 1;
.google.protobuf.Timestamp end = 2;
}
message GithubUser {
string auth_uid = 1;
string username = 2;
}
message AddGithubUsersRequest {
repeated .exa.opensearch_clients_pb.GithubUser users = 1;
}
message AddGithubUsersResponse {
}
message UserInfo {
string auth_uid = 1;
string email = 2;
string name = 3;
string photo_url = 4;
}
message AddUsersRequest {
repeated .exa.opensearch_clients_pb.UserInfo users = 1;
}
message AddUsersResponse {
}
message KnowledgeBaseSearchRequest {
int64 max_results = 2;
repeated string queries = 3;
.exa.codeium_common_pb.Metadata metadata = 4;
repeated string urls = 12;
repeated string document_ids = 13;
repeated string aggregate_ids = 5;
repeated .exa.chat_pb.ChatMessagePrompt chat_message_prompts = 6;
.exa.opensearch_clients_pb.TimeRange time_range = 7;
repeated .exa.codeium_common_pb.DocumentType document_types = 14;
.exa.opensearch_clients_pb.SearchMode search_mode = 9;
bool disable_reranking = 10;
bool disable_contextual_lookup = 11;
repeated .exa.codeium_common_pb.IndexChoice index_choices = 8;
string query = 1 [deprecated = true];
}
message KnowledgeBaseSearchResponse {
repeated .exa.codeium_common_pb.KnowledgeBaseGroup knowledge_base_groups = 1;
}
message GetKnowledgeBaseScopeItemsRequest {
string query = 1;
.exa.codeium_common_pb.Metadata metadata = 3;
repeated .exa.codeium_common_pb.DocumentType document_types = 5;
repeated .exa.codeium_common_pb.IndexChoice index_choices = 4 [deprecated = true];
repeated string index_names = 2 [deprecated = true];
}
message GetKnowledgeBaseScopeItemsResponse {
repeated .exa.codeium_common_pb.KnowledgeBaseScopeItem scope_items = 1;
}
message GetKnowledgeBaseItemsFromScopeItemsRequest {
reserved 1;
.exa.codeium_common_pb.Metadata metadata = 2;
repeated .exa.codeium_common_pb.KnowledgeBaseScopeItem scope_items = 3;
}
message GetKnowledgeBaseItemsFromScopeItemsResponse {
repeated .exa.codeium_common_pb.KnowledgeBaseItemWithMetadata knowledge_base_items_with_metadata = 1;
}
message IngestSlackDataRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
repeated string channel_ids = 2;
}
message IngestSlackDataResponse {
}
message IngestGithubDataRequest {
.exa.index_pb.ManagementMetadata metadata = 3;
string organization = 1;
string repository = 2;
}
message IngestGithubDataResponse {
}
message IngestGoogleDriveDataRequest {
reserved 1;
.exa.index_pb.ManagementMetadata metadata = 2;
repeated string folder_ids = 3;
}
message IngestGoogleDriveDataResponse {
}
message IngestJiraDataRequest {
reserved 1;
reserved 2;
reserved 3;
.exa.index_pb.ManagementMetadata metadata = 4;
}
message IngestJiraDataResponse {
}
message IngestJiraPayloadRequest {
string body = 3;
}
message IngestJiraPayloadResponse {
}
message ForwardResult {
.exa.opensearch_clients_pb.ForwardStatus status = 1;
optional string error = 2;
}
message ForwardSlackPayloadRequest {
repeated string bodies = 1;
}
message ForwardSlackPayloadResponse {
repeated .exa.opensearch_clients_pb.ForwardResult results = 1;
}
message IngestSlackPayloadRequest {
repeated .exa.opensearch_clients_pb.SlackPayload payload = 1;
}
message IngestSlackPayloadResponse {
}
message CommonDocument {
string document_id = 1;
string text = 2;
}
message CommonDocumentWithScore {
.exa.opensearch_clients_pb.CommonDocument document = 1;
float score = 2;
}
message SearchResult {
string text = 1;
string url = 2;
}
message QuerySearchResponse {
repeated .exa.opensearch_clients_pb.CommonDocumentWithScore document_with_scores = 1;
}
message OpenSearchAddRepositoryRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
.exa.index_pb.RepositoryConfig config = 2;
.exa.index_pb.RequestIndexVersion initial_index = 3;
}
message OpenSearchAddRepositoryResponse {
string repo_name = 1;
string index_id = 2;
}
message OpenSearchGetIndexRequest {
string index_id = 1;
}
message OpenSearchGetIndexResponse {
.exa.index_pb.IndexingStatus status = 1;
}
message HybridSearchRequest {
string query = 1;
.exa.codeium_common_pb.Embedding embedding = 2;
int64 max_results = 3;
}
message HybridSearchResponse {
repeated .exa.opensearch_clients_pb.CommonDocumentWithScore document_with_scores = 1;
}
message GraphSearchRequest {
string query = 1;
.exa.codeium_common_pb.Embedding embedding = 2;
int64 max_results = 3;
}
message GraphSearchResponse {
repeated .exa.opensearch_clients_pb.CommonDocumentWithScore document_with_scores = 1;
}
message ConnectorConfig {
oneof config {
.exa.opensearch_clients_pb.ConnectorConfigSlack slack = 1;
.exa.opensearch_clients_pb.ConnectorConfigGithub github = 2;
.exa.opensearch_clients_pb.ConnectorConfigGoogleDrive google_drive = 3;
.exa.opensearch_clients_pb.ConnectorConfigJira jira = 4;
}
}
message ConnectorConfigSlack {
reserved 1;
reserved 2;
repeated string include_channel_ids = 3;
repeated string exclude_channel_ids = 4;
}
message ConnectorConfigGithub {
reserved 1;
}
message ConnectorConfigGoogleDrive {
reserved 1;
repeated string include_drive_ids = 2;
repeated string exclude_drive_ids = 3;
}
message ConnectorConfigJira {
}
message ConnectorInternalConfig {
oneof config {
.exa.opensearch_clients_pb.ConnectorInternalConfigSlack slack = 1;
.exa.opensearch_clients_pb.ConnectorInternalConfigGithub github = 2;
.exa.opensearch_clients_pb.ConnectorInternalConfigGoogleDrive google_drive = 3;
.exa.opensearch_clients_pb.ConnectorInternalConfigJira jira = 4;
}
}
message ConnectorInternalConfigSlack {
reserved 4;
string client_id = 2;
string client_secret = 3;
string signing_secret = 1;
}
message GithubRepoConfig {
string organization = 1;
string repository = 2;
}
message ConnectorInternalConfigGithub {
int64 installation_id = 1;
repeated .exa.opensearch_clients_pb.GithubRepoConfig repo_configs = 2;
}
message ConnectorInternalConfigGoogleDrive {
reserved 1;
}
message ConnectorInternalConfigJira {
int64 webhook_id = 1;
}
message ConnectKnowledgeBaseAccountRequest {
reserved 1;
.exa.index_pb.ManagementMetadata metadata = 7;
.exa.opensearch_clients_pb.ConnectorType connector = 2;
string access_token = 3;
.google.protobuf.Timestamp access_token_expires_at = 4;
string refresh_token = 5;
.google.protobuf.Timestamp refresh_token_expires_at = 6;
.exa.opensearch_clients_pb.ConnectorAdditionalParams additional_params = 8;
}
message DeleteKnowledgeBaseConnectionRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
.exa.opensearch_clients_pb.ConnectorType connector = 2;
}
message DeleteKnowledgeBaseConnectionResponse {
}
message UpdateConnectorConfigRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
.exa.opensearch_clients_pb.ConnectorType connector = 2;
.exa.opensearch_clients_pb.ConnectorConfig config = 3;
}
message UpdateConnectorConfigResponse {
}
message ConnectorAdditionalParams {
oneof config {
.exa.opensearch_clients_pb.ConnectorAdditionalParamsSlack slack = 2;
.exa.opensearch_clients_pb.ConnectorAdditionalParamsGithub github = 1;
}
}
message ConnectorAdditionalParamsSlack {
string client_id = 1;
string client_secret = 2;
string signing_secret = 3;
}
message ConnectorAdditionalParamsGithub {
int64 installation_id = 1;
}
message ConnectKnowledgeBaseAccountResponse {
}
message CancelKnowledgeBaseJobsRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
repeated int64 job_ids = 2;
}
message CancelKnowledgeBaseJobsResponse {
}
message DocumentTypeCount {
.exa.codeium_common_pb.DocumentType document_type = 1;
int64 count = 2;
}
message ConnectorState {
.exa.opensearch_clients_pb.ConnectorType connector = 1;
bool initialized = 2;
.exa.opensearch_clients_pb.ConnectorConfig config = 3;
repeated .exa.opensearch_clients_pb.DocumentTypeCount document_type_counts = 4;
.google.protobuf.Timestamp last_indexed_at = 5;
.google.protobuf.Timestamp unhealthy_since = 6;
.google.protobuf.Timestamp last_configured_at = 7;
}
message GetKnowledgeBaseConnectorStateRequest {
reserved 2;
.exa.index_pb.ManagementMetadata metadata = 1;
}
message GetKnowledgeBaseConnectorStateResponse {
repeated .exa.opensearch_clients_pb.ConnectorState connector_states = 1;
}
message JobState {
.exa.opensearch_clients_pb.ConnectorType connector = 1;
int64 id = 2;
.exa.opensearch_clients_pb.JobStatus status = 3;
}
message GetKnowledgeBaseJobStatesRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
repeated .exa.opensearch_clients_pb.ConnectorType connector_types = 2;
}
message GetKnowledgeBaseJobStatesResponse {
repeated .exa.opensearch_clients_pb.JobState job_states = 1;
}
message SlackMessagePayload {
string dataset_id = 1;
string previous_message_dataset_id = 2;
string type = 3;
string channel_id = 4;
string user = 5;
string text = 6;
string timestamp = 7;
string thread_timestamp = 8;
string channel_name = 9;
string team_name = 10;
string team_id = 11;
bool is_private_channel = 12;
string team_domain = 13;
string original_timestamp = 14;
}
message SlackChannelPayload {
reserved 3;
reserved 5;
reserved 6;
string type = 1;
string channel_id = 2;
string channel_name = 4;
string description = 7;
string team_id = 8;
bool is_private_channel = 9;
}
message SlackPayload {
reserved 1;
reserved 2;
reserved 3;
reserved 4;
reserved 5;
reserved 6;
reserved 7;
reserved 8;
reserved 9;
reserved 10;
reserved 11;
reserved 12;
oneof payload {
.exa.opensearch_clients_pb.SlackMessagePayload message = 13;
.exa.opensearch_clients_pb.SlackChannelPayload channel = 14;
}
}
message GetKnowledgeBaseWebhookUrlRequest {
.exa.index_pb.ManagementMetadata metadata = 1;
}
message GetKnowledgeBaseWebhookUrlResponse {
string webhook_url = 1;
}
message GetConnectorInternalConfigRequest {
.exa.opensearch_clients_pb.ConnectorType connector = 1;
}
message GetConnectorInternalConfigResponse {
.exa.opensearch_clients_pb.ConnectorInternalConfig internal_config = 1;
}
service KnowledgeBaseService {
rpc KnowledgeBaseSearch (.exa.opensearch_clients_pb.KnowledgeBaseSearchRequest) returns (.exa.opensearch_clients_pb.KnowledgeBaseSearchResponse);
rpc GetKnowledgeBaseScopeItems (.exa.opensearch_clients_pb.GetKnowledgeBaseScopeItemsRequest) returns (.exa.opensearch_clients_pb.GetKnowledgeBaseScopeItemsResponse);
rpc GetKnowledgeBaseItemsFromScopeItems (.exa.opensearch_clients_pb.GetKnowledgeBaseItemsFromScopeItemsRequest) returns (.exa.opensearch_clients_pb.GetKnowledgeBaseItemsFromScopeItemsResponse);
rpc IngestSlackData (.exa.opensearch_clients_pb.IngestSlackDataRequest) returns (.exa.opensearch_clients_pb.IngestSlackDataResponse);
rpc IngestGithubData (.exa.opensearch_clients_pb.IngestGithubDataRequest) returns (.exa.opensearch_clients_pb.IngestGithubDataResponse);
rpc IngestGoogleDriveData (.exa.opensearch_clients_pb.IngestGoogleDriveDataRequest) returns (.exa.opensearch_clients_pb.IngestGoogleDriveDataResponse);
rpc IngestJiraData (.exa.opensearch_clients_pb.IngestJiraDataRequest) returns (.exa.opensearch_clients_pb.IngestJiraDataResponse);
rpc IngestJiraPayload (.exa.opensearch_clients_pb.IngestJiraPayloadRequest) returns (.exa.opensearch_clients_pb.IngestJiraPayloadResponse);
rpc ForwardSlackPayload (.exa.opensearch_clients_pb.ForwardSlackPayloadRequest) returns (.exa.opensearch_clients_pb.ForwardSlackPayloadResponse);
rpc IngestSlackPayload (.exa.opensearch_clients_pb.IngestSlackPayloadRequest) returns (.exa.opensearch_clients_pb.IngestSlackPayloadResponse);
rpc ConnectKnowledgeBaseAccount (.exa.opensearch_clients_pb.ConnectKnowledgeBaseAccountRequest) returns (.exa.opensearch_clients_pb.ConnectKnowledgeBaseAccountResponse);
rpc DeleteKnowledgeBaseConnection (.exa.opensearch_clients_pb.DeleteKnowledgeBaseConnectionRequest) returns (.exa.opensearch_clients_pb.DeleteKnowledgeBaseConnectionResponse);
rpc UpdateConnectorConfig (.exa.opensearch_clients_pb.UpdateConnectorConfigRequest) returns (.exa.opensearch_clients_pb.UpdateConnectorConfigResponse);
rpc CancelKnowledgeBaseJobs (.exa.opensearch_clients_pb.CancelKnowledgeBaseJobsRequest) returns (.exa.opensearch_clients_pb.CancelKnowledgeBaseJobsResponse);
rpc GetKnowledgeBaseConnectorState (.exa.opensearch_clients_pb.GetKnowledgeBaseConnectorStateRequest) returns (.exa.opensearch_clients_pb.GetKnowledgeBaseConnectorStateResponse);
rpc GetKnowledgeBaseJobStates (.exa.opensearch_clients_pb.GetKnowledgeBaseJobStatesRequest) returns (.exa.opensearch_clients_pb.GetKnowledgeBaseJobStatesResponse);
rpc AddUsers (.exa.opensearch_clients_pb.AddUsersRequest) returns (.exa.opensearch_clients_pb.AddUsersResponse);
rpc AddGithubUsers (.exa.opensearch_clients_pb.AddGithubUsersRequest) returns (.exa.opensearch_clients_pb.AddGithubUsersResponse);
rpc GetKnowledgeBaseWebhookUrl (.exa.opensearch_clients_pb.GetKnowledgeBaseWebhookUrlRequest) returns (.exa.opensearch_clients_pb.GetKnowledgeBaseWebhookUrlResponse);
rpc GetConnectorInternalConfig (.exa.opensearch_clients_pb.GetConnectorInternalConfigRequest) returns (.exa.opensearch_clients_pb.GetConnectorInternalConfigResponse);
}
service CodeIndexService {
rpc OpenSearchAddRepository (.exa.opensearch_clients_pb.OpenSearchAddRepositoryRequest) returns (.exa.opensearch_clients_pb.OpenSearchAddRepositoryResponse);
rpc OpenSearchGetIndex (.exa.opensearch_clients_pb.OpenSearchGetIndexRequest) returns (.exa.opensearch_clients_pb.OpenSearchGetIndexResponse);
rpc HybridSearch (.exa.opensearch_clients_pb.HybridSearchRequest) returns (.exa.opensearch_clients_pb.HybridSearchResponse);
rpc GraphSearch (.exa.opensearch_clients_pb.GraphSearchRequest) returns (.exa.opensearch_clients_pb.GraphSearchResponse);
}
@@ -0,0 +1,37 @@
syntax = "proto3";
package exa.product_analytics_pb;
import "buf/validate/validate.proto";
message RecordAnalyticsEventRequest {
string event_name = 1;
string api_key = 2;
string installation_id = 3;
string ide_name = 4;
string os = 5;
string codeium_version = 6;
string ide_version = 7;
uint64 duration_ms = 8;
map<string, string> extra = 9;
map<string, bool> experiments = 10;
string plan_tier = 11 [deprecated = true];
string device_fingerprint = 12;
string ide_type = 13;
}
message RecordAnalyticsEventResponse {
}
message BatchRecordAnalyticsEventsRequest {
repeated .exa.product_analytics_pb.RecordAnalyticsEventRequest events = 1;
string api_key = 2;
}
message BatchRecordAnalyticsEventsResponse {
}
service ProductAnalyticsService {
rpc RecordAnalyticsEvent (.exa.product_analytics_pb.RecordAnalyticsEventRequest) returns (.exa.product_analytics_pb.RecordAnalyticsEventResponse);
rpc BatchRecordAnalyticsEvents (.exa.product_analytics_pb.BatchRecordAnalyticsEventsRequest) returns (.exa.product_analytics_pb.BatchRecordAnalyticsEventsResponse);
}
@@ -0,0 +1,92 @@
syntax = "proto3";
package exa.prompt_pb;
import "exa/chat_pb/chat.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "exa/context_module_pb/context_module.proto";
import "exa/cortex_pb/cortex.proto";
import "exa/language_server_pb/language_server.proto";
message PendingCommand {
string instruction = 1;
string completion = 2;
}
message CommandIntentInfo {
string selection = 1;
string instruction = 2;
.exa.codeium_common_pb.Document input_document = 3;
uint64 selection_start_line = 4;
uint64 selection_end_line = 5;
.exa.codeium_common_pb.TerminalCommandData terminal_command_data = 6;
repeated .exa.codeium_common_pb.TerminalShellCommand previous_commands = 7;
repeated .exa.prompt_pb.PendingCommand pending_commands = 8;
.exa.codeium_common_pb.CommandRequestSource request_source = 9;
repeated .exa.codeium_common_pb.IntellisenseSuggestion intellisense_prompt = 10;
repeated .exa.codeium_common_pb.CodeDiagnostic diagnostics_prompt = 11;
}
message SupercompleteFeedback {
bool accepted = 1;
bool intentional_reject = 2;
string completion_id = 3;
int64 timestamp_ms = 4;
.exa.language_server_pb.HandleStreamingTabV2Response.Diff diff_suggestion = 5;
.exa.language_server_pb.HandleStreamingTabV2Response.TabJump tabjump_suggestion = 6;
}
message SupercompleteFeedbackContext {
repeated .exa.prompt_pb.SupercompleteFeedback feedback = 1;
}
message UnifiedPromptComponents {
reserved 6;
reserved 7;
reserved 8;
reserved "knowledge_base_result", "knowledge_base_items", "knowledge_base_groups";
.exa.context_module_pb.ContextModuleResult context_module_result = 2;
.exa.cortex_pb.CortexTrajectory cortex_trajectory = 3;
.exa.prompt_pb.CommandIntentInfo command_intent_info = 4;
repeated .exa.chat_pb.ChatMessage chat_messages = 1;
repeated .exa.codeium_common_pb.CodeDiagnostic code_diagnostics = 5;
repeated .exa.codeium_common_pb.Document other_documents = 9;
.exa.chat_pb.DeepWikiSymbolContext deep_wiki_context = 10 [deprecated = true];
.exa.chat_pb.DeepWikiContext deep_wiki_context_v2 = 11;
.exa.prompt_pb.SupercompleteFeedbackContext supercomplete_feedback_context = 12;
}
message SystemPromptConstructionConfig {
string element_separator = 1;
}
message CommandPromptCacheConfig {
int64 max_tracked_files = 1;
int64 max_cache_age_seconds = 2;
}
message CumulativePromptConfig {
reserved 1;
reserved 3;
reserved 4;
reserved 5;
reserved "active_document_context_multiplier", "context_item_context_multiplier", "cache_context_multiplier", "max_ccis_considered";
float persistent_context_multiplier = 7;
float persistent_active_document_multiplier = 10;
float persistent_open_docs_multiplier = 11;
int64 persistent_max_tokens_per_open_doc = 17;
int64 persistent_max_ccis_considered = 12;
float persistent_document_suffix_frac = 20;
float trajectory_context_multiplier = 2;
float trajectory_refresh_threshold_multiplier = 15;
float trajectory_truncation_multiplier = 16;
float ephemeral_context_multiplier = 9;
int64 intent_reservation_tokens = 6;
float ephemeral_active_document_multiplier = 13;
int64 ephemeral_max_ccis_considered = 14;
float ephemeral_document_suffix_frac = 21;
repeated .exa.cortex_pb.CortexStepType allowed_cascade_step_types = 18;
map<string, bool> allowed_implicit_step_types = 22;
}
@@ -0,0 +1,96 @@
syntax = "proto3";
package exa.reactive_component_pb;
enum TestEnum {
TEST_ENUM_UNSPECIFIED = 0;
TEST_ENUM_ONE = 1;
TEST_ENUM_TWO = 2;
}
message StreamReactiveUpdatesRequest {
uint32 protocol_version = 1;
string id = 2;
}
message StreamReactiveUpdatesResponse {
uint64 version = 1;
.exa.reactive_component_pb.MessageDiff diff = 2;
bytes full_state = 3;
}
message TestProto {
int32 counter = 1;
repeated int32 values = 2;
.exa.reactive_component_pb.TestProto nested = 3;
repeated .exa.reactive_component_pb.TestProto nested_repeated = 4;
}
message MessageDiff {
repeated .exa.reactive_component_pb.FieldDiff field_diffs = 1;
}
message FieldDiff {
uint32 field_number = 1;
oneof diff {
.exa.reactive_component_pb.SingularValue update_singular = 2;
.exa.reactive_component_pb.RepeatedDiff update_repeated = 3;
.exa.reactive_component_pb.MapDiff update_map = 4;
bool clear = 5;
}
}
message RepeatedDiff {
uint32 new_length = 1;
repeated .exa.reactive_component_pb.SingularValue update_values = 2;
repeated uint32 update_indices = 3;
}
message MapDiff {
repeated .exa.reactive_component_pb.MapKeyDiff map_key_diffs = 1;
}
message MapKeyDiff {
.exa.reactive_component_pb.SingularValue map_key = 1;
oneof diff {
.exa.reactive_component_pb.SingularValue update_singular = 2;
bool clear = 3;
}
}
message SingularValue {
oneof value {
double double_value = 1;
float float_value = 2;
int32 int32_value = 3;
int64 int64_value = 4;
uint32 uint32_value = 5;
uint64 uint64_value = 6;
sint32 sint32_value = 7;
sint64 sint64_value = 8;
fixed32 fixed32_value = 9;
fixed64 fixed64_value = 10;
sfixed32 sfixed32_value = 11;
sfixed64 sfixed64_value = 12;
bool bool_value = 13;
uint32 enum_value = 14;
string string_value = 15;
bytes bytes_value = 16;
.exa.reactive_component_pb.MessageDiff message_value = 17;
}
}
message TestDiffProto {
double singular_scalar_value = 1;
.exa.reactive_component_pb.TestProto singular_message_value = 2;
optional double optional_scalar_value = 10;
repeated double repeated_scalar_value = 3;
repeated .exa.reactive_component_pb.TestProto repeated_message_value = 4;
map<int32, double> map_scalar_value = 5;
map<string, .exa.reactive_component_pb.TestProto> map_message_value = 6;
oneof oneof_test {
double oneof_scalar_value = 7;
.exa.reactive_component_pb.TestProto oneof_message_value = 8;
}
.exa.reactive_component_pb.TestEnum enum_value = 9;
}
@@ -0,0 +1,37 @@
syntax = "proto3";
package exa.tokenizer_pb;
enum PreTokenizer {
PRE_TOKENIZER_UNSPECIFIED = 0;
PRE_TOKENIZER_GPT2 = 1;
PRE_TOKENIZER_CL100K = 2;
PRE_TOKENIZER_QWEN2 = 3;
}
message Tokenizer {
repeated .exa.tokenizer_pb.SpecialToken special_tokens = 1;
.exa.tokenizer_pb.PreTokenizer pre_tokenizer = 2;
oneof word_tokenizer {
.exa.tokenizer_pb.BPETokenizer bpe = 3;
}
}
message BPETokenizer {
repeated .exa.tokenizer_pb.BaseToken base_vocab = 1;
repeated .exa.tokenizer_pb.MergeToken merges = 2;
}
message SpecialToken {
string token = 1;
int32 id = 2;
}
message BaseToken {
bytes token = 1;
}
message MergeToken {
int32 first = 1;
int32 second = 2;
}
@@ -0,0 +1,647 @@
syntax = "proto3";
package exa.trainer_pb;
import "exa/codeium_common_pb/codeium_common.proto";
enum TrainFramework {
TRAIN_FRAMEWORK_UNSPECIFIED = 0;
TRAIN_FRAMEWORK_TORCH = 1;
TRAIN_FRAMEWORK_MEGATRON = 3;
reserved 2;
reserved "TRAIN_FRAMEWORK_JAX";
}
enum LoopType {
LOOP_TYPE_UNSPECIFIED = 0;
LOOP_TYPE_TRAIN = 1;
LOOP_TYPE_WEIGHT_UPDATE_BENCHMARK = 2;
}
enum TrainObjective {
TRAIN_OBJECTIVE_UNSPECIFIED = 0;
TRAIN_OBJECTIVE_CAUSAL_LM = 1;
TRAIN_OBJECTIVE_EMBEDDING = 2;
TRAIN_OBJECTIVE_PREFIX_LM = 3;
TRAIN_OBJECTIVE_REWARD = 4;
TRAIN_OBJECTIVE_SEQ2SEQ = 5;
TRAIN_OBJECTIVE_DPO = 6;
TRAIN_OBJECTIVE_RECORD_ACTIVATIONS = 7;
TRAIN_OBJECTIVE_KNOWLEDGE_DISTILLATION = 8;
TRAIN_OBJECTIVE_KTO = 9;
TRAIN_OBJECTIVE_GRPO = 10;
reserved 11;
reserved "TRAIN_OBJECTIVE_ON_POLICY_DPO";
}
enum OptimizerType {
OPTIMIZER_TYPE_UNSPECIFIED = 0;
OPTIMIZER_TYPE_NONE = 1;
OPTIMIZER_TYPE_ADAMW = 2;
OPTIMIZER_TYPE_LION = 3;
reserved 4;
}
enum OptimizerExpAvgDtype {
OPTIMIZER_EXP_AVG_DTYPE_UNSPECIFIED = 0;
OPTIMIZER_EXP_AVG_DTYPE_FLOAT32 = 1;
OPTIMIZER_EXP_AVG_DTYPE_FLOAT16 = 2;
}
enum ActivationType {
ACTIVATION_TYPE_UNSPECIFIED = 0;
ACTIVATION_TYPE_GELU = 1;
ACTIVATION_TYPE_SWIGLU = 2;
ACTIVATION_TYPE_SQUARED_RELU = 3;
ACTIVATION_TYPE_SWISH = 4;
}
enum InitializationMethod {
INITIALIZATION_METHOD_UNSPECIFIED = 0;
INITIALIZATION_METHOD_TRUNCATED_NORMAL = 1;
INITIALIZATION_METHOD_DEEP_NORM = 2;
}
enum PreferenceLoss {
PREFERENCE_LOSS_UNSPECIFIED = 0;
PREFERENCE_LOSS_DPO = 1;
PREFERENCE_LOSS_SIMPO = 2;
PREFERENCE_LOSS_IPO = 3;
PREFERENCE_LOSS_RPO = 4;
}
enum QuantizationMethod {
QUANTIZATION_METHOD_UNSPECIFIED = 0;
QUANTIZATION_METHOD_INT8 = 1;
QUANTIZATION_METHOD_INT8_FULL = 4;
QUANTIZATION_METHOD_INT4 = 2;
QUANTIZATION_METHOD_NF4 = 3;
QUANTIZATION_METHOD_FP8 = 5;
QUANTIZATION_METHOD_FP8_VECTOR_NO_LM_HEAD = 6;
}
enum CheckpointBackend {
CHECKPOINT_BACKEND_UNSPECIFIED = 0;
CHECKPOINT_BACKEND_TORCH_DCP = 1;
CHECKPOINT_BACKEND_ZARR = 2;
}
enum MoeBackend {
MOE_BACKEND_UNSPECIFIED = 0;
MOE_BACKEND_DEEPEP = 1;
MOE_BACKEND_A2A = 2;
}
enum ExperimentProject {
EXPERIMENT_PROJECT_UNSPECIFIED = 0;
EXPERIMENT_PROJECT_CODER_MODEL = 1;
EXPERIMENT_PROJECT_TAB_TO_JUMP = 2;
EXPERIMENT_PROJECT_TAB_MODEL = 3;
}
enum InferenceObjective {
INFERENCE_OBJECTIVE_UNSPECIFIED = 0;
INFERENCE_OBJECTIVE_CAUSAL_LM = 1;
INFERENCE_OBJECTIVE_EMBEDDING = 2;
INFERENCE_OBJECTIVE_REWARD = 3;
}
enum QuantizationPrecision {
QUANTIZATION_PRECISION_UNSPECIFIED = 0;
QUANTIZATION_PRECISION_FP32 = 1;
QUANTIZATION_PRECISION_FP16 = 2;
QUANTIZATION_PRECISION_BF16 = 3;
QUANTIZATION_PRECISION_FP8_E4M3 = 4;
QUANTIZATION_PRECISION_INT8 = 5;
QUANTIZATION_PRECISION_NF4 = 6;
}
message RoPEEmbeddingConfig {
float min_timescale = 1;
float max_timescale = 2;
oneof scaling {
.exa.trainer_pb.RoPEScalingLlama31Config scaling_llama31 = 3;
.exa.trainer_pb.RoPEScalingDeepseekV2Config scaling_deepseek_v2 = 4;
}
}
message RoPEScalingLlama31Config {
float factor = 1;
float low_freq_factor = 2;
float high_freq_factor = 3;
float old_context_len = 4;
}
message RoPEScalingDeepseekV2Config {
float factor = 1;
float low_freq_factor = 2;
float high_freq_factor = 3;
float old_context_len = 4;
float mscale = 5;
float mscale_all_dim = 6;
}
message XPosEmbeddingConfig {
float min_timescale = 1;
float max_timescale = 2;
float gamma = 3;
float scale_base = 4;
bool tile = 5;
}
message MUPConfig {
reserved 2;
float sigma_base = 1;
float sigma_input_embedding = 6;
float sigma_output_embedding = 7;
float lr = 3;
float lr_input_embedding = 4;
float lr_biases = 5;
float o_wo_init_multiplier = 8;
}
message DPOConfig {
float beta = 1;
float label_smoothing = 2;
bool average_log_probs = 3;
bool mask_prompt_tokens_loss = 4;
float gamma = 5;
.exa.trainer_pb.PreferenceLoss loss_type = 6;
float eta = 7;
float sft_loss_coefficient = 8;
}
message KTOConfig {
float lambda_positive = 1;
float lambda_negative = 2;
float beta = 3;
}
message KnowledgeDistillationConfig {
float generation_temperature = 1;
repeated uint32 stop_tokens = 2;
float beta = 3;
float lambda_kd = 4;
float divergence_temperature = 5;
}
message OnPolicyGRPOConfig {
float reference_policy_kl_penalty_beta = 1;
float ratio_clip_min = 2;
float ratio_clip_max = 3;
bool use_dr_grpo_length_normalization = 4;
}
message LearningRateParamGroup {
string name_regex = 1;
float lr_multiplier = 2;
float wd_multiplier = 3;
}
message CrossAttentionConfig {
uint32 start_layer_idx = 1;
uint32 stop_layer_idx = 2;
uint32 layer_step = 3;
uint32 num_heads = 4;
uint32 head_dim = 5;
uint32 num_kv_heads = 6;
uint32 kv_embed_dim = 7;
oneof positional_embedding {
.exa.trainer_pb.RoPEEmbeddingConfig rope_config = 8;
.exa.trainer_pb.XPosEmbeddingConfig xpos_config = 9;
}
}
message SlidingWindowAttentionConfig {
uint32 window_start = 1;
uint32 window_end = 2;
}
message AttentionModification {
uint32 start_layer_idx = 1;
uint32 end_layer_idx = 2;
uint32 layer_step = 3;
oneof modification {
.exa.trainer_pb.SlidingWindowAttentionConfig sliding_window_attn = 4;
}
}
message MultiLatentAttentionConfig {
int64 q_lora_rank = 1;
int64 kv_lora_rank = 2;
int64 qk_nope_head_dim = 3;
int64 qk_rope_head_dim = 4;
int64 v_head_dim = 5;
}
message MixtureOfExpertsConfig {
int64 n_shared_experts = 1;
int64 n_routed_experts = 2;
int64 num_experts_per_tok = 3;
float routed_scaling_factor = 4;
string scoring_func = 5;
int64 routed_n_group = 6;
int64 routed_topk_group = 7;
string routed_topk_method = 8;
int64 moe_hidden_size = 9;
int64 first_k_layers_dense_replace = 10;
bool force_non_homogeneous_layers = 11;
}
message MultiTokenPredictionConfig {
uint32 num_layers = 1;
float loss_scale = 2;
bool no_load_from_checkpoint = 3;
uint32 num_layers_to_load_from_checkpoint = 4;
bool freeze_checkpoint_weights = 5;
uint32 num_loaded_mtp_layers_to_unfreeze = 6;
}
message TransformerModelConfig {
reserved 26;
reserved 34;
reserved 38;
reserved 39;
reserved 40;
reserved 41;
reserved "dpo_config", "use_uneven_pipeline_sharding", "first_pipeline_num_layers", "last_pipeline_num_layers", "knowledge_distillation_config";
uint32 num_layers = 1;
uint32 head_dim = 2;
uint32 num_heads = 4;
float rotary_dim_ratio = 5;
uint32 embed_dim = 44;
uint32 mlp_intermediate_dim_ratio = 6;
uint32 seq_mlp_hidden_dim = 31;
float seq_mlp_intermediate_dim_ratio = 30;
uint32 vocab_size = 7;
float embedding_dropout = 8;
float attention_dropout = 9;
float residual_dropout = 10;
bool lm_head_shared_embedding = 11;
bool affine_layer_norm = 12;
bool layernorm_zero_centered_gamma = 36;
bool mlp_bias = 13;
optional bool attn_bias = 73;
optional float layer_norm_eps = 74;
optional bool qk_layernorm = 75;
bool lm_head_bias = 14;
oneof positional_embedding {
.exa.trainer_pb.RoPEEmbeddingConfig rope_config = 15;
.exa.trainer_pb.XPosEmbeddingConfig xpos_config = 16;
}
.exa.trainer_pb.MUPConfig mup_config = 21;
.exa.trainer_pb.ActivationType activation = 17;
bool post_layer_norm = 18;
bool deep_norm_residual = 19;
.exa.trainer_pb.InitializationMethod initialization_method = 20;
bool multi_query_attention = 22;
uint32 lora_r = 23;
float lora_alpha = 24;
float lora_dropout = 25;
.exa.trainer_pb.QuantizationMethod quantization_method = 27;
bool sequential = 28;
uint32 num_kv_heads = 29;
.exa.trainer_pb.CrossAttentionConfig xattn_config = 32;
bool causal_rm = 33;
repeated .exa.trainer_pb.AttentionModification attention_modifications = 35;
.exa.trainer_pb.QuantizationPolicySet quantization_policy = 37;
.exa.trainer_pb.MultiLatentAttentionConfig mla_config = 42;
.exa.trainer_pb.MixtureOfExpertsConfig moe_config = 43;
.exa.trainer_pb.MultiTokenPredictionConfig mtp_config = 45;
}
message EncoderDecoderModelConfig {
.exa.trainer_pb.TransformerModelConfig encoder = 1;
.exa.trainer_pb.TransformerModelConfig decoder = 2;
}
message BaseModelConfig {
reserved 2;
oneof architecture {
.exa.trainer_pb.TransformerModelConfig gptj = 1;
.exa.trainer_pb.EncoderDecoderModelConfig t5 = 3;
}
}
message ExperimentMetadata {
.exa.trainer_pb.ExperimentProject project = 1;
string group = 2;
string job_type = 3;
repeated string tag = 4;
}
message MockedInferenceProviderConfig {
}
message QuantizationConfig {
string activation_scheme = 1;
string fmt = 2;
string quant_method = 3;
repeated int32 weight_block_size = 4;
}
message SGLangInferenceProviderConfig {
reserved 1;
reserved 4;
uint32 world_size = 3;
string model_type = 5;
.exa.trainer_pb.QuantizationConfig quantization_config = 6;
bool log_weight_update_progress = 7;
repeated string sglang_addr_list = 8;
bool disable_batch_weight_update = 9;
bool disable_sequential_pipeline_update = 10;
bool disable_fanout_v2 = 11;
}
message TrainInferenceConfig {
reserved 4;
.exa.codeium_common_pb.CompletionConfiguration completion_config = 1;
oneof inference_provider_config {
.exa.trainer_pb.MockedInferenceProviderConfig mocked_inference_provider_config = 2;
.exa.trainer_pb.SGLangInferenceProviderConfig sglang_inference_provider_config = 3;
}
}
message WeightUpdateBenchmarkConfig {
uint32 update_interval_seconds = 1;
uint32 num_weight_updates = 2;
}
message TrainerConfig {
reserved 1;
reserved 3;
reserved 5;
reserved 6;
reserved 7;
reserved 9;
reserved 10;
reserved 96;
reserved "rollout_data_service_config";
string name = 51;
string description = 45;
.exa.trainer_pb.ExperimentMetadata metadata = 88;
string user = 89;
.exa.trainer_pb.BaseModelConfig base_model_config = 44;
.exa.trainer_pb.TrainObjective train_objective = 39;
oneof objective_config {
.exa.trainer_pb.DPOConfig dpo_config = 82;
.exa.trainer_pb.KnowledgeDistillationConfig knowledge_distillation_config = 83;
.exa.trainer_pb.KTOConfig kto_config = 87;
.exa.trainer_pb.OnPolicyGRPOConfig on_policy_grpo_config = 95;
}
string train_data_dir = 2;
string eval_data_dir = 4;
uint32 block_size = 8;
uint32 bytes_per_token = 52;
bool use_loss_weight = 64;
bool use_loss_magnitude = 66;
bool use_packed_sequence_lengths = 73;
string checkpoint_dir = 46;
string tmp_checkpoint_dir = 59;
string log_dir = 47;
.exa.trainer_pb.TrainFramework train_framework = 38;
.exa.trainer_pb.LoopType loop_type = 104;
.exa.trainer_pb.WeightUpdateBenchmarkConfig weight_update_benchmark_config = 105;
uint32 train_steps = 11;
uint32 train_batch_size = 12;
uint32 gradient_accumulation_steps = 13;
bool bf16 = 14;
bool fp8 = 61;
bool gradient_checkpointing = 15;
bool activation_checkpoint_lm_head = 90;
uint32 num_embedding_splits_per_microbatch = 40;
string activations_dir = 71;
.exa.trainer_pb.MoeBackend moe_backend = 102;
bool allow_nondeterministic = 75;
uint32 eval_batch_size = 16;
uint32 eval_steps = 17;
uint32 eval_frequency = 18;
float beta1 = 19;
float beta2 = 20;
float epsilon = 21;
float weight_decay = 22;
float gradient_clip_norm = 23;
.exa.trainer_pb.OptimizerType optimizer = 48;
bool use_distributed_optimizer = 70;
.exa.trainer_pb.OptimizerExpAvgDtype optimizer_exp_avg_dtype = 78;
string lr_scheduler_type = 24;
float learning_rate = 25;
uint32 warmup_steps = 26;
float lr_floor_fraction = 27;
float lr_decay_power = 49;
float lr_decay_offset = 50;
uint32 cooldown_steps = 57;
uint32 lr_cyclical_frequency = 62;
float lr_cyclical_magnitude = 63;
repeated .exa.trainer_pb.LearningRateParamGroup learning_rate_param_group = 65;
string pretrained_model_path = 28;
.exa.trainer_pb.CheckpointBackend pretrained_model_checkpoint_backend = 69;
bool load_LM_checkpoint_into_embed_model = 42;
bool load_LM_checkpoint_into_lora_model = 53;
bool load_optimizer_state_for_finetuning = 58;
.exa.trainer_pb.TrainerConfig teacher_model_config = 72;
bool fold_dpo_sequences = 74;
string checkpoint_path_to_load = 29;
bool load_most_recent_checkpoint = 30;
uint32 checkpoint_frequency = 31;
string checkpoint_staging_dir = 60;
bool optim_loading_avoid_copy = 81;
bool load_and_broadcast_from_first_dp_rank = 92;
uint32 num_nodes = 33;
uint32 num_processes_per_node = 34;
uint32 model_partitions = 41;
uint32 data_partitions = 56;
uint32 pipeline_partitions = 67;
uint32 context_partitions = 91;
bool use_uneven_pipeline_sharding = 84;
uint32 first_pipeline_num_layers = 85;
uint32 last_pipeline_num_layers = 86;
uint32 expert_partitions = 77;
bool full_2d_partitioning = 43;
string tpu_topology = 54;
int64 dataloader_num_workers = 36;
int64 dataloader_prefetch_factor = 37;
int64 dataloader_max_shards = 55;
string data_service_address = 93;
bool async_data_service_generation = 103;
bool scheduler_managed_data_service = 106;
.exa.trainer_pb.TrainInferenceConfig inference_config = 94;
uint32 ref_policy_update_frequency = 98;
uint32 inference_weight_update_frequency = 99;
uint32 old_policy_update_frequency = 100;
int64 seed = 35;
bool use_checkpoint_cache = 68;
bool async_checkpoints = 76;
string hf_model_id = 79;
bool optimizer_cpu_offload = 80;
string task_pod_ip = 97;
bool use_cuda_graphs = 101;
}
message SweepConfig {
string name_prefix = 1;
string description = 2;
.exa.trainer_pb.TrainerConfig base_config = 3;
repeated .exa.trainer_pb.SweepAxis axis = 4;
}
message SweepAxis {
string short_name = 1;
repeated .exa.trainer_pb.SweepItem value = 2;
}
message SweepItem {
string short_name = 1;
map<string, .exa.trainer_pb.ConfigValue> field = 2;
}
message ConfigValue {
oneof value {
string string_value = 1;
int64 int_value = 2;
float float_value = 3;
.exa.trainer_pb.QuantizationMethod quantization_method_value = 4;
bool bool_value = 5;
}
}
message InferenceConfig {
.exa.codeium_common_pb.Model model_id = 1;
.exa.trainer_pb.InferenceObjective inference_objective = 2;
string tokenizer = 3;
uint32 lm_max_context_length = 4;
uint32 lm_max_generation_length = 5;
uint32 lm_max_num_completions = 6;
uint32 lm_max_top_k = 7;
uint32 embedding_max_context_length = 8;
uint32 reward_max_context_length = 10;
uint32 reserved_memory_mib = 9;
optional uint32 top_draft_tokens = 11;
}
message ModelLoaderConfig {
reserved 2;
string base_model_path = 1;
string inference_config_path = 3;
oneof parallelism_oneof {
int32 mp_shards = 4;
.exa.trainer_pb.ParallelismConfig parallelism_config = 8;
}
uint32 priority = 5;
bool load_mock_model = 6;
.exa.trainer_pb.TransformerModelConfig mock_model_config = 7;
}
message ModelLoaderConfigs {
repeated .exa.trainer_pb.ModelLoaderConfig model_loader_configs = 1;
}
message ScheduledModel {
.exa.codeium_common_pb.Model model_id = 1;
float memory_fraction = 2;
optional float memory_fragmentation_factor = 5;
optional int64 max_tokens_per_forward_pass = 6;
optional int64 chunked_prefill_length = 3;
optional int64 speculative_copy_length = 4;
float max_generation_to_prompt_scaling_term = 7;
int64 max_generation_to_prompt_constant_term = 8;
float prompt_cache_cpu_memory_mib = 9;
int64 prompt_cache_persistence_s = 10;
string prompt_cache_shm_name = 12;
int64 top_draft_tokens = 11;
}
message SchedulingGroupConfig {
int32 num_gpus = 1;
int32 replicas = 3;
repeated .exa.trainer_pb.ScheduledModel models = 2;
}
message DraftTargetModelPair {
.exa.codeium_common_pb.Model draft_model_id = 1;
.exa.codeium_common_pb.Model target_model_id = 2;
int32 gamma = 3;
float draft_temperature = 4;
}
message SchedulingGroupConfigs {
repeated .exa.trainer_pb.SchedulingGroupConfig scheduling_group_configs = 1;
repeated .exa.trainer_pb.DraftTargetModelPair draft_target_model_pairs = 2;
repeated .exa.trainer_pb.DeviceWorkerRoutingInfo device_worker_routing_infos = 3;
}
message DeviceWorkerRoutingInfo {
oneof info {
string ip = 1;
string message_queue_name = 2;
}
}
message QuantizationPolicySet {
repeated .exa.trainer_pb.QuantizationPolicy policy = 1;
}
message QuantizationPolicy {
repeated string selector = 1;
oneof layer_quantization {
.exa.trainer_pb.TokenEmbeddingQuantization token_embedding = 2;
.exa.trainer_pb.TransformerLayerQuantization transformer_layer = 3;
.exa.trainer_pb.TokenOutputProjectionQuantization token_output_projection = 4;
.exa.trainer_pb.LayerNormQuantization layer_norm = 5;
}
}
message TokenEmbeddingQuantization {
.exa.trainer_pb.QuantizationPrecision word_embedding_precision = 1;
.exa.trainer_pb.QuantizationPrecision output_precision = 2;
}
message TransformerLayerQuantization {
.exa.trainer_pb.LinearQuantization attention_linear = 2;
.exa.trainer_pb.LinearQuantization mlp_linear = 3;
float residual_branch_scale = 4;
uint32 num_mlp_hidden_scaling_groups = 5;
}
message TokenOutputProjectionQuantization {
.exa.trainer_pb.LinearQuantization linear = 2;
}
message LinearQuantization {
.exa.trainer_pb.QuantizationPrecision activation_precision = 1;
.exa.trainer_pb.QuantizationPrecision weight_precision = 2;
.exa.trainer_pb.QuantizationPrecision bias_precision = 3;
.exa.trainer_pb.QuantizationPrecision output_precision = 4;
bool vectorwise_scaling = 5;
float scale_upper_bound = 6;
}
message LayerNormQuantization {
.exa.trainer_pb.QuantizationPrecision weight_precision = 1;
.exa.trainer_pb.QuantizationPrecision output_precision = 2;
}
message LayerParallelismConfig {
oneof expert_mlp_mp {
int64 expert_mp = 1;
int64 mlp_mp = 2;
}
int64 num_replica_layers = 3;
}
message ParallelismConfig {
int64 embedding_parallelism = 1;
repeated .exa.trainer_pb.LayerParallelismConfig layer_parallelism_configs = 2;
int64 attention_mp = 3;
int64 num_attention_units = 4;
}
@@ -0,0 +1,14 @@
syntax = "proto3";
package exa.tree_sitter.language_data_pb;
import "exa/codeium_common_pb/codeium_common.proto";
message LanguageData {
.exa.codeium_common_pb.Language language = 1;
repeated string block_node_types = 2;
repeated string block_node_parent_types = 3;
repeated string block_node_parent_start_keywords = 4;
repeated string special_node_types = 6;
bool curly = 5;
}
@@ -0,0 +1,157 @@
syntax = "proto3";
package exa.trust_pb;
import "google/protobuf/timestamp.proto";
enum TrustEventSource {
TRUST_EVENT_SOURCE_UNSPECIFIED = 0;
TRUST_EVENT_SOURCE_API_SERVER = 1;
TRUST_EVENT_SOURCE_DEVIN_WEBSERVER = 2;
TRUST_EVENT_SOURCE_INTERNAL_DETECTOR = 3;
}
enum TrustIdentifierType {
TRUST_IDENTIFIER_TYPE_UNSPECIFIED = 0;
TRUST_IDENTIFIER_TYPE_EMAIL = 1;
TRUST_IDENTIFIER_TYPE_DEVIN_USER_ID = 2;
TRUST_IDENTIFIER_TYPE_DEVIN_ACCOUNT_ID = 3;
}
enum TrustQueryKeyType {
TRUST_QUERY_KEY_TYPE_UNSPECIFIED = 0;
TRUST_QUERY_KEY_TYPE_AUTH_UID = 1;
TRUST_QUERY_KEY_TYPE_DEVIN_USER_ID = 2;
TRUST_QUERY_KEY_TYPE_DEVIN_ACCOUNT_ID = 3;
}
enum ManualTrustVerdict {
MANUAL_TRUST_VERDICT_UNSPECIFIED = 0;
MANUAL_TRUST_VERDICT_TRUST = 1;
MANUAL_TRUST_VERDICT_DISTRUST = 2;
}
message TrustIdentifier {
.exa.trust_pb.TrustIdentifierType identifier_type = 1;
string identifier = 2;
}
message TrustQueryKey {
.exa.trust_pb.TrustQueryKeyType key_type = 1;
string key = 2;
}
message TrustEvent {
reserved 2;
.google.protobuf.Timestamp observed_at = 1;
.exa.trust_pb.TrustEventSource source = 3;
string idempotency_key = 4;
oneof signal {
.exa.trust_pb.UnknownSignal unknown = 5;
.exa.trust_pb.ProvidersExhaustedSignal providers_exhausted = 6;
.exa.trust_pb.CrossModelRateLimitSignal cross_model_rate_limit = 7;
.exa.trust_pb.AccountFanoutSignal account_fanout = 8;
.exa.trust_pb.MultiIpTrajectorySignal multi_ip_trajectory = 9;
.exa.trust_pb.CyberAbuseEvent cyber_abuse = 10;
.exa.trust_pb.OpenAIBlockedUserEvent openai_blocked_user = 11;
.exa.trust_pb.SuspiciousUserAgentSignal suspicious_user_agent = 12;
.exa.trust_pb.ManualTrustSignal manual_trust = 14;
.exa.trust_pb.HunterEmailVerificationSignal hunter_email_verification = 17;
}
repeated .exa.trust_pb.TrustIdentifier identifiers = 13;
.exa.trust_pb.TrustQueryKey query_key = 15;
}
message UnknownSignal {
}
message ProvidersExhaustedSignal {
string model_uid = 1;
string tier = 2;
int32 total_attempts = 3;
string last_error_code = 4;
string last_error_message = 5;
int32 providers_tried = 6;
string auth_uid = 7;
}
message CrossModelRateLimitSignal {
string model_uid = 1;
string tier = 2;
int64 count = 3;
int64 limit = 4;
int32 period_seconds = 5;
bool email_mismatch = 6;
string auth_uid = 7;
}
message AccountFanoutSignal {
string auth_uid = 1;
string identity = 2;
string account_id = 3;
bool is_trial = 4;
}
message MultiIpTrajectorySignal {
string auth_uid = 1;
int64 ip_count = 2;
int64 threshold = 3;
int32 window_seconds = 4;
string tier = 5;
string email = 6;
bool enforced = 7;
}
message CyberAbuseEvent {
string auth_uid = 1;
string provider = 2;
string event_type = 3;
string model_uid = 4;
string tier = 5;
}
message OpenAIBlockedUserEvent {
string auth_uid = 1;
string provider = 2;
string model_uid = 3;
string tier = 4;
}
message SuspiciousUserAgentSignal {
string auth_uid = 1;
string user_agent = 2;
string matched_prefix = 3;
}
message ManualTrustSignal {
string auth_uid = 1;
.exa.trust_pb.ManualTrustVerdict verdict = 2;
int32 percent = 3;
string reason = 4;
string flagged_by = 5;
}
message HunterEmailVerificationSignal {
string email = 1;
string result = 2;
string status = 3;
int32 score = 4;
bool regexp = 5;
bool gibberish = 6;
bool disposable = 7;
bool webmail = 8;
bool mx_records = 9;
bool smtp_server = 10;
bool smtp_check = 11;
bool accept_all = 12;
bool block = 13;
int32 sources_count = 14;
}
message RecordTrustEventsRequest {
repeated .exa.trust_pb.TrustEvent events = 1;
}
message RecordTrustEventsResponse {
}
@@ -0,0 +1,519 @@
syntax = "proto3";
package exa.user_analytics_pb;
import "buf/validate/validate.proto";
import "exa/codeium_common_pb/codeium_common.proto";
import "google/protobuf/timestamp.proto";
enum QueryDataSource {
QUERY_DATA_SOURCE_UNSPECIFIED = 0;
QUERY_DATA_SOURCE_USER_DATA = 1;
QUERY_DATA_SOURCE_CHAT_DATA = 2;
QUERY_DATA_SOURCE_COMMAND_DATA = 3;
QUERY_DATA_SOURCE_CASCADE_DATA = 4;
QUERY_DATA_SOURCE_PCW_DATA = 5;
QUERY_DATA_SOURCE_CASCADE_LINES_ANALYTICS = 6;
QUERY_DATA_SOURCE_CASCADE_TOOL_ANALYTICS = 7;
}
enum QueryAggregation {
QUERY_AGGREGATION_UNSPECIFIED = 0;
QUERY_AGGREGATION_COUNT = 1;
QUERY_AGGREGATION_SUM = 2;
QUERY_AGGREGATION_AVG = 3;
QUERY_AGGREGATION_MAX = 4;
QUERY_AGGREGATION_MIN = 5;
}
enum QueryFilter {
QUERY_FILTER_UNSPECIFIED = 0;
QUERY_FILTER_EQUAL = 1;
QUERY_FILTER_NOT_EQUAL = 2;
QUERY_FILTER_GREATER_THAN = 3;
QUERY_FILTER_LESS_THAN = 4;
QUERY_FILTER_GE = 5;
QUERY_FILTER_LE = 6;
}
enum IDEType {
IDE_TYPE_UNSPECIFIED = 0;
IDE_TYPE_WINDSURF = 1;
IDE_TYPE_JETBRAINS = 2;
IDE_TYPE_PLUGINS = 3;
IDE_TYPE_CLI = 4;
}
message QuerySelectionField {
.exa.user_analytics_pb.QueryAggregation aggregation_function = 1;
string field = 2;
string name = 3;
}
message QueryFilterField {
.exa.user_analytics_pb.QueryFilter filter = 1;
string name = 2;
string value = 3;
}
message QueryAggregationField {
string field = 1;
string name = 2;
}
message QueryOrderField {
bool ascending = 1;
string name = 2;
}
message CustomQueryRequest {
.exa.user_analytics_pb.QueryDataSource data_source = 1;
repeated .exa.user_analytics_pb.QuerySelectionField selections = 2;
repeated .exa.user_analytics_pb.QueryFilterField filters = 3;
repeated .exa.user_analytics_pb.QueryAggregationField aggregations = 5;
repeated .exa.user_analytics_pb.QueryOrderField orderings = 4;
bool use_real_api_key = 6;
}
message QueryResponseItem {
map<string, string> item = 1;
}
message CustomQueryResponse {
repeated .exa.user_analytics_pb.QueryResponseItem response_items = 1;
}
message GetAnalyticsRequest {
reserved 1;
reserved 5;
repeated .exa.user_analytics_pb.QueryRequest query_requests = 2;
.google.protobuf.Timestamp start_timestamp = 3;
.google.protobuf.Timestamp end_timestamp = 4;
string group_id = 6;
repeated string api_keys = 7;
repeated string group_ids = 8;
repeated .exa.user_analytics_pb.IDEType ide_types = 9;
}
message CascadeAnalyticsRequest {
string service_key = 1;
string group_name = 2;
repeated string emails = 3;
repeated string ide_types = 4;
.google.protobuf.Timestamp start_timestamp = 5;
.google.protobuf.Timestamp end_timestamp = 6;
repeated .exa.user_analytics_pb.QueryRequest query_requests = 7;
string multitenant_team_id = 8;
string secret = 9;
string team_id = 10;
}
message CascadeAnalyticsResponse {
repeated .exa.user_analytics_pb.QueryResult query_results = 1;
}
message GetAnalyticsResponse {
repeated .exa.user_analytics_pb.QueryResult query_results = 1;
}
message AnalyticsRequest {
repeated .exa.user_analytics_pb.CustomQueryRequest query_requests = 1;
string service_key = 2;
string group_name = 3;
.google.protobuf.Timestamp start_timestamp = 4;
.google.protobuf.Timestamp end_timestamp = 5;
string multitenant_team_id = 6;
string secret = 7;
string team_id = 8;
}
message AnalyticsResponse {
repeated .exa.user_analytics_pb.CustomQueryResponse query_results = 1;
}
message UserPageAnalyticsRequest {
string service_key = 1;
string group_name = 2;
.google.protobuf.Timestamp start_timestamp = 3;
.google.protobuf.Timestamp end_timestamp = 4;
string multitenant_team_id = 5;
string secret = 6;
string team_id = 7;
}
message UserPageAnalyticsResponse {
repeated .exa.codeium_common_pb.UserTableStats user_table_stats = 1;
.google.protobuf.Timestamp billing_cycle_start = 2;
.google.protobuf.Timestamp billing_cycle_end = 3;
string billing_mode = 4;
}
message QueryRequest {
oneof request_type {
.exa.user_analytics_pb.QueryRequestCompletionStats completion_stats = 1;
.exa.user_analytics_pb.QueryRequestCompletionsByDay completions_by_day = 2;
.exa.user_analytics_pb.QueryRequestCompletionsByLanguage completions_by_language = 3;
.exa.user_analytics_pb.QueryRequestAllUsersCompletionStats all_users_completion_stats = 4;
.exa.user_analytics_pb.QueryRequestAllUsersCompletionsByDay all_users_completions_by_day = 5;
.exa.user_analytics_pb.QueryRequestAllUsersCompletionsByLanguage all_users_completions_by_language = 6;
.exa.user_analytics_pb.QueryRequestCompletionsByIde completions_by_ide = 7;
.exa.user_analytics_pb.QueryRequestCompletionsByIde all_users_completions_by_ide = 8;
.exa.user_analytics_pb.QueryRequestCompletionsByApiKey completions_by_api_key = 9;
.exa.user_analytics_pb.QueryRequestCompletionsByRepository completions_by_repository = 19;
.exa.user_analytics_pb.QueryRequestChatsByDay chats_by_day = 10;
.exa.user_analytics_pb.QueryRequestAllChatsByDay all_users_chats_by_day = 11;
.exa.user_analytics_pb.QueryRequestChatStatsByModel chats_by_model = 12;
.exa.user_analytics_pb.QueryRequestAllChatStatsByModel all_users_chats_by_model = 13;
.exa.user_analytics_pb.QueryRequestActiveUserCount active_user_count = 14;
.exa.user_analytics_pb.QueryRequestPercentCodeWritten percent_code_written = 15;
.exa.user_analytics_pb.QueryRequestCharsPerOpportunity chars_per_opportunity = 16;
.exa.user_analytics_pb.QueryRequestChatStats chat_stats = 17;
.exa.user_analytics_pb.QueryRequestActiveDaysByApiKey active_days_by_api_key = 18;
.exa.user_analytics_pb.QueryRequestCommandStats command_stats = 20;
.exa.user_analytics_pb.CustomQueryRequest custom_query = 21;
.exa.user_analytics_pb.UserPageAnalyticsRequest user_page_analytics = 22;
.exa.user_analytics_pb.QueryRequestCascadeLines cascade_lines = 23;
.exa.user_analytics_pb.QueryRequestCascadeToolUsage cascade_tool_usage = 24;
.exa.user_analytics_pb.QueryRequestCascadeRuns cascade_runs = 25;
.exa.user_analytics_pb.QueryRequestAllUsersCascadeLines all_users_cascade_lines = 26;
.exa.user_analytics_pb.QueryRequestAllUsersCascadeToolUsage all_users_cascade_tool_usage = 27;
.exa.user_analytics_pb.QueryRequestAllUsersCascadeRuns all_users_cascade_runs = 28;
.exa.user_analytics_pb.QueryRequestAllUsersDailyActiveUserCounts all_users_daily_active_user_counts = 29;
.exa.user_analytics_pb.QueryRequestAllUsersCommandStats all_users_command_stats = 30;
.exa.user_analytics_pb.QueryRequestIndividualPercentCodeWritten individual_percent_code_written = 31;
.exa.user_analytics_pb.QueryRequestCompletionsByLanguagePerUser completions_by_language_per_user = 32;
}
}
message QueryResult {
oneof result_type {
.exa.user_analytics_pb.QueryResultCompletionStats completion_stats = 1;
.exa.user_analytics_pb.QueryResultCompletionsByDay completions_by_day = 2;
.exa.user_analytics_pb.QueryResultCompletionsByLanguage completions_by_language = 3;
.exa.user_analytics_pb.QueryResultCompletionsByIde completions_by_ide = 4;
.exa.user_analytics_pb.QueryResultCompletionsByApiKey completions_by_api_key = 5;
.exa.user_analytics_pb.QueryResultCompletionsByRepository completions_by_repository = 13;
.exa.user_analytics_pb.QueryResultChatsByDay chats_by_day = 6;
.exa.user_analytics_pb.QueryResultChatStatsByModel chats_by_model = 7;
.exa.user_analytics_pb.QueryResultActiveUserCount active_user_count = 8;
.exa.user_analytics_pb.QueryResultPercentCodeWritten percent_code_written = 9;
.exa.user_analytics_pb.QueryResultCharsPerOpportunity chars_per_opportunity = 10;
.exa.user_analytics_pb.QueryResultChatStats chat_stats = 11;
.exa.user_analytics_pb.QueryResultActiveDaysByApiKey active_days_by_api_key = 12;
.exa.user_analytics_pb.QueryResultError error = 14;
.exa.user_analytics_pb.QueryResultCommandStats command_stats = 15;
.exa.user_analytics_pb.CustomQueryResponse custom_stats = 16;
.exa.user_analytics_pb.UserPageAnalyticsResponse user_page_analytics = 17;
.exa.user_analytics_pb.QueryResultCascadeLines cascade_lines = 18;
.exa.user_analytics_pb.QueryResultCascadeToolUsage cascade_tool_usage = 19;
.exa.user_analytics_pb.QueryResultCascadeRuns cascade_runs = 20;
.exa.user_analytics_pb.QueryResultDailyActiveUserCounts daily_active_user_counts = 21;
.exa.user_analytics_pb.QueryResultCompletionsByLanguagePerUser completions_by_language_per_user = 22;
}
}
message DailyActiveUserCount {
.google.protobuf.Timestamp day = 1;
int64 active_user_count = 2;
}
message QueryResultDailyActiveUserCounts {
repeated .exa.user_analytics_pb.DailyActiveUserCount daily_active_user_counts = 1;
}
message QueryRequestAllUsersDailyActiveUserCounts {
}
message QueryRequestCompletionStats {
}
message QueryResultCompletionStats {
.exa.codeium_common_pb.CompletionStatistics completion_statistics = 1;
}
message QueryRequestCompletionsByDay {
string time_zone = 1;
}
message QueryResultCompletionsByDay {
repeated .exa.codeium_common_pb.CompletionByDateEntry completions_by_day = 1;
}
message QueryRequestCompletionsByLanguage {
}
message QueryResultCompletionsByLanguage {
repeated .exa.codeium_common_pb.CompletionByLanguageEntry completions_by_language = 1;
}
message QueryRequestCompletionsByLanguagePerUser {
}
message CompletionsByLanguagePerUserEntry {
string api_key = 1;
repeated .exa.codeium_common_pb.CompletionByLanguageEntry completions_by_language = 2;
}
message QueryResultCompletionsByLanguagePerUser {
repeated .exa.user_analytics_pb.CompletionsByLanguagePerUserEntry entries = 1;
}
message QueryRequestCompletionsByIde {
}
message QueryResultCompletionsByIde {
map<string, .exa.codeium_common_pb.CompletionStatistics> completions_by_ide = 1;
}
message QueryRequestCompletionsByRepository {
}
message QueryResultCompletionsByRepository {
map<string, .exa.codeium_common_pb.CompletionStatistics> completions_by_repository = 1;
}
message QueryRequestChatsByDay {
string time_zone = 1;
}
message QueryResultChatsByDay {
repeated .exa.codeium_common_pb.ChatStatsByDateEntry chats_by_day = 1;
}
message QueryRequestAllChatsByDay {
string time_zone = 1;
}
message QueryRequestActiveUserCount {
string time_zone = 1;
.google.protobuf.Timestamp start_timestamp = 2;
.google.protobuf.Timestamp end_timestamp = 3;
}
message QueryRequestActiveUserCountByUsers {
string time_zone = 1;
}
message QueryRequestDailyActiveUserCounts {
}
message QueryRequestChatStatsByModel {
}
message QueryRequestAllChatStatsByModel {
}
message QueryResultChatStatsByModel {
repeated .exa.codeium_common_pb.ChatStatsByModelEntry chats_by_model = 1;
}
message QueryRequestAllUsersCompletionsByDay {
string time_zone = 1;
}
message QueryRequestAllUsersCompletionsByLanguage {
}
message QueryRequestAllUsersCompletionStats {
}
message QueryRequestCompletionsByApiKey {
}
message QueryResultCompletionsByApiKey {
map<string, .exa.codeium_common_pb.CompletionStatistics> completions_by_api_key = 1;
}
message QueryResultActiveUserCount {
int64 active_user_count = 1;
}
message QueryRequestIndividualPercentCodeWritten {
}
message QueryRequestPercentCodeWritten {
}
message QueryResultPercentCodeWritten {
double percent_code_written = 1;
int64 codeium_bytes_by_autocomplete = 2;
int64 codeium_bytes_by_command = 3;
int64 codeium_bytes_by_supercomplete = 7;
int64 codeium_bytes_by_cascade = 8;
int64 user_bytes = 4;
int64 codeium_bytes = 5;
int64 total_bytes = 6;
}
message QueryRequestCharsPerOpportunity {
}
message QueryResultCharsPerOpportunity {
double chars_per_opportunity = 1;
uint64 num_bytes_accepted = 2;
uint64 num_completion_attempts = 3;
}
message QueryRequestChatStats {
}
message QueryResultChatStats {
.exa.codeium_common_pb.ChatStats chat_stats = 1;
}
message QueryRequestCommandStats {
}
message QueryRequestAllUsersCommandStats {
}
message QueryResultCommandStats {
.exa.codeium_common_pb.CommandStats command_stats = 1;
}
message QueryRequestActiveDaysByApiKey {
}
message QueryResultActiveDaysByApiKey {
map<string, uint32> active_days_by_api_key = 1;
}
message QueryResultError {
string error = 1;
}
message QueryRequestCascadeLines {
}
message CascadeLineQueryEntry {
.google.protobuf.Timestamp day = 1;
int64 lines_suggested = 2;
int64 lines_accepted = 3;
}
message QueryResultCascadeLines {
repeated .exa.user_analytics_pb.CascadeLineQueryEntry cascade_lines = 1;
}
message QueryRequestCascadeToolUsage {
}
message CascadeToolUsageQueryEntry {
.google.protobuf.Timestamp day = 1;
string tool = 2;
int64 count = 3;
}
message QueryResultCascadeToolUsage {
repeated .exa.user_analytics_pb.CascadeToolUsageQueryEntry cascade_tool_usage = 1;
}
message QueryRequestCascadeRuns {
}
message CascadeRunsQueryEntry {
.google.protobuf.Timestamp day = 1;
string model = 2;
string mode = 3;
int64 messages_sent = 4;
int64 prompts_used = 5;
string cascade_id = 6;
}
message QueryResultCascadeRuns {
repeated .exa.user_analytics_pb.CascadeRunsQueryEntry cascade_runs = 1;
}
message QueryRequestAllUsersCascadeRuns {
}
message QueryRequestAllUsersCascadeToolUsage {
}
message QueryRequestAllUsersCascadeLines {
}
message GetGlobalLeaderboardApiKeyRequest {
}
message GetGlobalLeaderboardApiKeyResponse {
string api_key = 1;
}
message GetBigQueryAnalyticsRequest {
string api_key = 1;
.google.protobuf.Timestamp start_timestamp = 2;
.google.protobuf.Timestamp end_timestamp = 3;
repeated .exa.user_analytics_pb.BigQueryRequest query_requests = 4;
}
message GetBigQueryAnalyticsResponse {
repeated .exa.user_analytics_pb.BigQueryResult query_results = 1;
}
message BigQueryRequest {
oneof request_type {
.exa.user_analytics_pb.BigQueryLeaderboardRequest leaderboard_request = 1;
}
}
message BigQueryResult {
oneof result_type {
.exa.user_analytics_pb.BigQueryResultError error = 1;
.exa.user_analytics_pb.BigQueryLeaderboardResult leaderboard_result = 2;
}
}
message BigQueryResultError {
string error = 1;
}
message BigQueryLeaderboardRequest {
}
message BigQueryLeaderboardResult {
repeated .exa.user_analytics_pb.ModelStats model_stats = 1;
.google.protobuf.Timestamp last_queried_at = 2;
}
message ModelStats {
reserved 5;
reserved "model_provider";
string model = 1;
int64 elo_rating = 2;
int64 votes = 3;
double win_rate = 4;
int64 confidence_lower = 6;
int64 confidence_upper = 7;
double model_speed = 8;
string model_group = 9;
}
message GetDevinUserAnalyticsRequest {
string start_date = 1 [deprecated = true];
string end_date = 2 [deprecated = true];
.google.protobuf.Timestamp start_date_ts = 3;
.google.protobuf.Timestamp end_date_ts = 4;
}
message GetDevinUserAnalyticsResponse {
repeated .exa.user_analytics_pb.DevinUsageEntry devin_usage_entries = 1;
double total_acus = 2;
}
message DevinUsageEntry {
string day = 1;
double acus = 2;
}
service UserAnalyticsService {
rpc Analytics (.exa.user_analytics_pb.AnalyticsRequest) returns (.exa.user_analytics_pb.AnalyticsResponse);
rpc UserPageAnalytics (.exa.user_analytics_pb.UserPageAnalyticsRequest) returns (.exa.user_analytics_pb.UserPageAnalyticsResponse);
rpc CascadeAnalytics (.exa.user_analytics_pb.CascadeAnalyticsRequest) returns (.exa.user_analytics_pb.CascadeAnalyticsResponse);
rpc GetAnalytics (.exa.user_analytics_pb.GetAnalyticsRequest) returns (.exa.user_analytics_pb.GetAnalyticsResponse);
rpc GetGlobalLeaderboardApiKey (.exa.user_analytics_pb.GetGlobalLeaderboardApiKeyRequest) returns (.exa.user_analytics_pb.GetGlobalLeaderboardApiKeyResponse);
rpc GetBigQueryAnalytics (.exa.user_analytics_pb.GetBigQueryAnalyticsRequest) returns (.exa.user_analytics_pb.GetBigQueryAnalyticsResponse);
rpc GetDevinUserAnalytics (.exa.user_analytics_pb.GetDevinUserAnalyticsRequest) returns (.exa.user_analytics_pb.GetDevinUserAnalyticsResponse);
}
@@ -0,0 +1,28 @@
package appengine.base;
message StringProto {
required string value = 1;
}
message Integer32Proto {
required int32 value = 1;
}
message Integer64Proto {
required int64 value = 1;
}
message BoolProto {
required bool value = 1;
}
message DoubleProto {
required double value = 1;
}
message BytesProto {
required bytes value = 1;
}
message VoidProto {
}
@@ -0,0 +1,484 @@
package appengine;
message Action {
}
message PropertyValue {
message PointValue {
required double x = 6;
required double y = 7;
}
message UserValue {
required string email = 9;
required string auth_domain = 10;
optional string nickname = 11;
optional string federated_identity = 21;
optional string federated_provider = 22;
}
message ReferenceValue {
message PathElement {
required string type = 15;
optional int64 id = 16;
optional string name = 17;
}
required string app = 13;
optional string name_space = 20;
repeated PathElement pathelement = 14;
}
optional int64 int64Value = 1;
optional bool booleanValue = 2;
optional string stringValue = 3;
optional double doubleValue = 4;
optional PointValue pointvalue = 5;
optional UserValue uservalue = 8;
optional ReferenceValue referencevalue = 12;
}
message Property {
enum Meaning {
NO_MEANING = 0;
BLOB = 14;
TEXT = 15;
BYTESTRING = 16;
ATOM_CATEGORY = 1;
ATOM_LINK = 2;
ATOM_TITLE = 3;
ATOM_CONTENT = 4;
ATOM_SUMMARY = 5;
ATOM_AUTHOR = 6;
GD_WHEN = 7;
GD_EMAIL = 8;
GEORSS_POINT = 9;
GD_IM = 10;
GD_PHONENUMBER = 11;
GD_POSTALADDRESS = 12;
GD_RATING = 13;
BLOBKEY = 17;
ENTITY_PROTO = 19;
INDEX_VALUE = 18;
}
enum FtsTokenizationOption {
HTML = 1;
ATOM = 2;
}
optional .appengine.Property.Meaning meaning = 1 [default = NO_MEANING];
optional string meaning_uri = 2;
required string name = 3;
required .appengine.PropertyValue value = 5;
required bool multiple = 4;
optional bool searchable = 6 [default = false];
optional .appengine.Property.FtsTokenizationOption fts_tokenization_option = 8;
optional string locale = 9 [default = "en"];
}
message Path {
message Element {
required string type = 2;
optional int64 id = 3;
optional string name = 4;
}
repeated Element element = 1;
}
message Reference {
required string app = 13;
optional string name_space = 20;
required .appengine.Path path = 14;
}
message User {
required string email = 1;
required string auth_domain = 2;
optional string nickname = 3;
optional string federated_identity = 6;
optional string federated_provider = 7;
}
message EntityProto {
enum Kind {
GD_CONTACT = 1;
GD_EVENT = 2;
GD_MESSAGE = 3;
}
required .appengine.Reference key = 13;
required .appengine.Path entity_group = 16;
optional .appengine.User owner = 17;
optional .appengine.EntityProto.Kind kind = 4;
optional string kind_uri = 5;
repeated .appengine.Property property = 14;
repeated .appengine.Property raw_property = 15;
optional int32 rank = 18;
}
message CompositeProperty {
required int64 index_id = 1;
repeated string value = 2;
}
message Index {
message Property {
enum Direction {
ASCENDING = 1;
DESCENDING = 2;
}
required string name = 3;
optional .appengine.Index.Property.Direction direction = 4 [default = ASCENDING];
}
required string entity_type = 1;
required bool ancestor = 5;
repeated Property property = 2;
}
message CompositeIndex {
enum State {
WRITE_ONLY = 1;
READ_WRITE = 2;
DELETED = 3;
ERROR = 4;
}
required string app_id = 1;
required int64 id = 2;
required .appengine.Index definition = 3;
required .appengine.CompositeIndex.State state = 4;
optional bool only_use_if_required = 6 [default = false];
}
message IndexPostfix {
message IndexValue {
required string property_name = 1;
required .appengine.PropertyValue value = 2;
}
repeated .appengine.IndexPostfix.IndexValue index_value = 1;
optional .appengine.Reference key = 2;
optional bool before = 3 [default = true];
}
message IndexPosition {
optional string key = 1;
optional bool before = 2 [default = true];
}
message Snapshot {
enum Status {
INACTIVE = 0;
ACTIVE = 1;
}
required int64 ts = 1;
}
message InternalHeader {
optional string qos = 1;
}
message Transaction {
optional .appengine.InternalHeader header = 4;
required fixed64 handle = 1;
required string app = 2;
optional bool mark_changes = 3 [default = false];
}
message Query {
message Filter {
enum Operator {
LESS_THAN = 1;
LESS_THAN_OR_EQUAL = 2;
GREATER_THAN = 3;
GREATER_THAN_OR_EQUAL = 4;
EQUAL = 5;
IN = 6;
EXISTS = 7;
}
required .appengine.Query.Filter.Operator op = 6;
repeated .appengine.Property property = 14;
}
message Order {
enum Direction {
ASCENDING = 1;
DESCENDING = 2;
}
required string property = 10;
optional .appengine.Query.Order.Direction direction = 11 [default = ASCENDING];
}
enum Hint {
ORDER_FIRST = 1;
ANCESTOR_FIRST = 2;
FILTER_FIRST = 3;
}
optional .appengine.InternalHeader header = 39;
required string app = 1;
optional string name_space = 29;
optional string kind = 3;
optional .appengine.Reference ancestor = 17;
repeated Filter filter = 4;
optional string search_query = 8;
repeated Order order = 9;
optional .appengine.Query.Hint hint = 18;
optional int32 count = 23;
optional int32 offset = 12 [default = 0];
optional int32 limit = 16;
optional .appengine.CompiledCursor compiled_cursor = 30;
optional .appengine.CompiledCursor end_compiled_cursor = 31;
repeated .appengine.CompositeIndex composite_index = 19;
optional bool require_perfect_plan = 20 [default = false];
optional bool keys_only = 21 [default = false];
optional .appengine.Transaction transaction = 22;
optional bool compile = 25 [default = false];
optional int64 failover_ms = 26;
optional bool strong = 32;
repeated string property_name = 33;
repeated string group_by_property_name = 34;
optional bool distinct = 24;
optional int64 min_safe_time_seconds = 35;
repeated string safe_replica_name = 36;
optional bool persist_offset = 37 [default = false];
}
message CompiledQuery {
message PrimaryScan {
optional string index_name = 2;
optional string start_key = 3;
optional bool start_inclusive = 4;
optional string end_key = 5;
optional bool end_inclusive = 6;
repeated string start_postfix_value = 22;
repeated string end_postfix_value = 23;
optional int64 end_unapplied_log_timestamp_us = 19;
}
message MergeJoinScan {
required string index_name = 8;
repeated string prefix_value = 9;
optional bool value_prefix = 20 [default = false];
}
message EntityFilter {
optional bool distinct = 14 [default = false];
optional string kind = 17;
optional .appengine.Reference ancestor = 18;
}
required PrimaryScan primaryscan = 1;
repeated MergeJoinScan mergejoinscan = 7;
optional .appengine.Index index_def = 21;
optional int32 offset = 10 [default = 0];
optional int32 limit = 11;
required bool keys_only = 12;
repeated string property_name = 24;
optional int32 distinct_infix_size = 25;
optional EntityFilter entityfilter = 13;
}
message CompiledCursor {
message Position {
message IndexValue {
optional string property = 30;
required .appengine.PropertyValue value = 31;
}
optional string start_key = 27;
repeated IndexValue indexvalue = 29;
optional .appengine.Reference key = 32;
optional bool start_inclusive = 28 [default = true];
}
optional Position position = 2;
}
message Cursor {
required fixed64 cursor = 1;
optional string app = 2;
}
message Error {
enum ErrorCode {
BAD_REQUEST = 1;
CONCURRENT_TRANSACTION = 2;
INTERNAL_ERROR = 3;
NEED_INDEX = 4;
TIMEOUT = 5;
PERMISSION_DENIED = 6;
BIGTABLE_ERROR = 7;
COMMITTED_BUT_STILL_APPLYING = 8;
CAPABILITY_DISABLED = 9;
TRY_ALTERNATE_BACKEND = 10;
SAFE_TIME_TOO_OLD = 11;
}
}
message Cost {
message CommitCost {
optional int32 requested_entity_puts = 6;
optional int32 requested_entity_deletes = 7;
}
optional int32 index_writes = 1;
optional int32 index_write_bytes = 2;
optional int32 entity_writes = 3;
optional int32 entity_write_bytes = 4;
optional CommitCost commitcost = 5;
optional int32 approximate_storage_delta = 8;
optional int32 id_sequence_updates = 9;
}
message GetRequest {
optional .appengine.InternalHeader header = 6;
repeated .appengine.Reference key = 1;
optional .appengine.Transaction transaction = 2;
optional int64 failover_ms = 3;
optional bool strong = 4;
optional bool allow_deferred = 5 [default = false];
}
message GetResponse {
message Entity {
optional .appengine.EntityProto entity = 2;
optional .appengine.Reference key = 4;
optional int64 version = 3;
}
repeated Entity entity = 1;
repeated .appengine.Reference deferred = 5;
optional bool in_order = 6 [default = true];
}
message PutRequest {
enum AutoIdPolicy {
CURRENT = 0;
SEQUENTIAL = 1;
}
optional .appengine.InternalHeader header = 11;
repeated .appengine.EntityProto entity = 1;
optional .appengine.Transaction transaction = 2;
repeated .appengine.CompositeIndex composite_index = 3;
optional bool trusted = 4 [default = false];
optional bool force = 7 [default = false];
optional bool mark_changes = 8 [default = false];
repeated .appengine.Snapshot snapshot = 9;
optional .appengine.PutRequest.AutoIdPolicy auto_id_policy = 10 [default = CURRENT];
}
message PutResponse {
repeated .appengine.Reference key = 1;
optional .appengine.Cost cost = 2;
repeated int64 version = 3;
}
message TouchRequest {
optional .appengine.InternalHeader header = 10;
repeated .appengine.Reference key = 1;
repeated .appengine.CompositeIndex composite_index = 2;
optional bool force = 3 [default = false];
repeated .appengine.Snapshot snapshot = 9;
}
message TouchResponse {
optional .appengine.Cost cost = 1;
}
message DeleteRequest {
optional .appengine.InternalHeader header = 10;
repeated .appengine.Reference key = 6;
optional .appengine.Transaction transaction = 5;
optional bool trusted = 4 [default = false];
optional bool force = 7 [default = false];
optional bool mark_changes = 8 [default = false];
repeated .appengine.Snapshot snapshot = 9;
}
message DeleteResponse {
optional .appengine.Cost cost = 1;
repeated int64 version = 3;
}
message NextRequest {
optional .appengine.InternalHeader header = 5;
required .appengine.Cursor cursor = 1;
optional int32 count = 2;
optional int32 offset = 4 [default = 0];
optional bool compile = 3 [default = false];
}
message QueryResult {
optional .appengine.Cursor cursor = 1;
repeated .appengine.EntityProto result = 2;
optional int32 skipped_results = 7;
required bool more_results = 3;
optional bool keys_only = 4;
optional bool index_only = 9;
optional bool small_ops = 10;
optional .appengine.CompiledQuery compiled_query = 5;
optional .appengine.CompiledCursor compiled_cursor = 6;
repeated .appengine.CompositeIndex index = 8;
repeated int64 version = 11;
}
message AllocateIdsRequest {
optional .appengine.InternalHeader header = 4;
optional .appengine.Reference model_key = 1;
optional int64 size = 2;
optional int64 max = 3;
repeated .appengine.Reference reserve = 5;
}
message AllocateIdsResponse {
required int64 start = 1;
required int64 end = 2;
optional .appengine.Cost cost = 3;
}
message CompositeIndices {
repeated .appengine.CompositeIndex index = 1;
}
message AddActionsRequest {
optional .appengine.InternalHeader header = 3;
required .appengine.Transaction transaction = 1;
repeated .appengine.Action action = 2;
}
message AddActionsResponse {
}
message BeginTransactionRequest {
enum TransactionMode {
UNKNOWN = 0;
READ_ONLY = 1;
READ_WRITE = 2;
}
optional .appengine.InternalHeader header = 3;
required string app = 1;
optional bool allow_multiple_eg = 2 [default = false];
optional string database_id = 4;
optional .appengine.BeginTransactionRequest.TransactionMode mode = 5 [default = UNKNOWN];
optional .appengine.Transaction previous_transaction = 7;
}
message CommitResponse {
message Version {
required .appengine.Reference root_entity_key = 4;
required int64 version = 5;
}
optional .appengine.Cost cost = 1;
repeated Version version = 3;
}
@@ -0,0 +1,136 @@
package appengine;
message LogServiceError {
enum ErrorCode {
OK = 0;
INVALID_REQUEST = 1;
STORAGE_ERROR = 2;
}
}
message UserAppLogLine {
required int64 timestamp_usec = 1;
required int64 level = 2;
required string message = 3;
}
message UserAppLogGroup {
repeated .appengine.UserAppLogLine log_line = 2;
}
message FlushRequest {
optional bytes logs = 1;
}
message SetStatusRequest {
required string status = 1;
}
message LogOffset {
optional bytes request_id = 1;
}
message LogLine {
required int64 time = 1;
required int32 level = 2;
required string log_message = 3;
}
message RequestLog {
required string app_id = 1;
optional string module_id = 37 [default = "default"];
required string version_id = 2;
required bytes request_id = 3;
optional .appengine.LogOffset offset = 35;
required string ip = 4;
optional string nickname = 5;
required int64 start_time = 6;
required int64 end_time = 7;
required int64 latency = 8;
required int64 mcycles = 9;
required string method = 10;
required string resource = 11;
required string http_version = 12;
required int32 status = 13;
required int64 response_size = 14;
optional string referrer = 15;
optional string user_agent = 16;
required string url_map_entry = 17;
required string combined = 18;
optional int64 api_mcycles = 19;
optional string host = 20;
optional double cost = 21;
optional string task_queue_name = 22;
optional string task_name = 23;
optional bool was_loading_request = 24;
optional int64 pending_time = 25;
optional int32 replica_index = 26 [default = -1];
optional bool finished = 27 [default = true];
optional bytes clone_key = 28;
repeated .appengine.LogLine line = 29;
optional bool lines_incomplete = 36;
optional bytes app_engine_release = 38;
optional int32 exit_reason = 30;
optional bool was_throttled_for_time = 31;
optional bool was_throttled_for_requests = 32;
optional int64 throttled_time = 33;
optional bytes server_name = 34;
}
message LogModuleVersion {
optional string module_id = 1 [default = "default"];
optional string version_id = 2;
}
message LogReadRequest {
required string app_id = 1;
repeated string version_id = 2;
repeated .appengine.LogModuleVersion module_version = 19;
optional int64 start_time = 3;
optional int64 end_time = 4;
optional .appengine.LogOffset offset = 5;
repeated bytes request_id = 6;
optional int32 minimum_log_level = 7;
optional bool include_incomplete = 8;
optional int64 count = 9;
optional string combined_log_regex = 14;
optional string host_regex = 15;
optional int32 replica_index = 16;
optional bool include_app_logs = 10;
optional int32 app_logs_per_request = 17;
optional bool include_host = 11;
optional bool include_all = 12;
optional bool cache_iterator = 13;
optional int32 num_shards = 18;
}
message LogReadResponse {
repeated .appengine.RequestLog log = 1;
optional .appengine.LogOffset offset = 2;
optional int64 last_end_time = 3;
}
message LogUsageRecord {
optional string version_id = 1;
optional int32 start_time = 2;
optional int32 end_time = 3;
optional int64 count = 4;
optional int64 total_size = 5;
optional int32 records = 6;
}
message LogUsageRequest {
required string app_id = 1;
repeated string version_id = 2;
optional int32 start_time = 3;
optional int32 end_time = 4;
optional uint32 resolution_hours = 5 [default = 1];
optional bool combine_versions = 6;
optional int32 usage_version = 7;
optional bool versions_only = 8;
}
message LogUsageResponse {
repeated .appengine.LogUsageRecord usage = 1;
optional .appengine.LogUsageRecord summary = 2;
}
@@ -0,0 +1,42 @@
package remote_api;
message Request {
required string service_name = 2;
required string method = 3;
required bytes request = 4;
optional string request_id = 5;
}
message ApplicationError {
required int32 code = 1;
required string detail = 2;
}
message RpcError {
enum ErrorCode {
UNKNOWN = 0;
CALL_NOT_FOUND = 1;
PARSE_ERROR = 2;
SECURITY_VIOLATION = 3;
OVER_QUOTA = 4;
REQUEST_TOO_LARGE = 5;
CAPABILITY_DISABLED = 6;
FEATURE_DISABLED = 7;
BAD_REQUEST = 8;
RESPONSE_TOO_LARGE = 9;
CANCELLED = 10;
REPLAY_ERROR = 11;
DEADLINE_EXCEEDED = 12;
}
required int32 code = 1;
optional string detail = 2;
}
message Response {
optional bytes response = 1;
optional bytes exception = 2;
optional .remote_api.ApplicationError application_error = 3;
optional bytes java_exception = 4;
optional .remote_api.RpcError rpc_error = 5;
}
@@ -0,0 +1,61 @@
package appengine;
message URLFetchServiceError {
enum ErrorCode {
OK = 0;
INVALID_URL = 1;
FETCH_ERROR = 2;
UNSPECIFIED_ERROR = 3;
RESPONSE_TOO_LARGE = 4;
DEADLINE_EXCEEDED = 5;
SSL_CERTIFICATE_ERROR = 6;
DNS_ERROR = 7;
CLOSED = 8;
INTERNAL_TRANSIENT_ERROR = 9;
TOO_MANY_REDIRECTS = 10;
MALFORMED_REPLY = 11;
CONNECTION_ERROR = 12;
}
}
message URLFetchRequest {
message Header {
required string Key = 4;
required string Value = 5;
}
enum RequestMethod {
GET = 1;
POST = 2;
HEAD = 3;
PUT = 4;
DELETE = 5;
PATCH = 6;
}
required .appengine.URLFetchRequest.RequestMethod Method = 1;
required string Url = 2;
repeated Header header = 3;
optional bytes Payload = 6;
optional bool FollowRedirects = 7 [default = true];
optional double Deadline = 8;
optional bool MustValidateServerCertificate = 9 [default = true];
}
message URLFetchResponse {
message Header {
required string Key = 4;
required string Value = 5;
}
optional bytes Content = 1;
required int32 StatusCode = 2;
repeated Header header = 3;
optional bool ContentWasTruncated = 6 [default = false];
optional int64 ExternalBytesSent = 7;
optional int64 ExternalBytesReceived = 8;
optional string FinalUrl = 9;
optional int64 ApiCpuMilliseconds = 10 [default = 0];
optional int64 ApiBytesSent = 11 [default = 0];
optional int64 ApiBytesReceived = 12 [default = 0];
}
@@ -0,0 +1,84 @@
syntax = "proto3";
package grpc.binarylog.v1;
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
message GrpcLogEntry {
enum EventType {
EVENT_TYPE_UNKNOWN = 0;
EVENT_TYPE_CLIENT_HEADER = 1;
EVENT_TYPE_SERVER_HEADER = 2;
EVENT_TYPE_CLIENT_MESSAGE = 3;
EVENT_TYPE_SERVER_MESSAGE = 4;
EVENT_TYPE_CLIENT_HALF_CLOSE = 5;
EVENT_TYPE_SERVER_TRAILER = 6;
EVENT_TYPE_CANCEL = 7;
}
enum Logger {
LOGGER_UNKNOWN = 0;
LOGGER_CLIENT = 1;
LOGGER_SERVER = 2;
}
.google.protobuf.Timestamp timestamp = 1;
uint64 call_id = 2;
uint64 sequence_id_within_call = 3;
.grpc.binarylog.v1.GrpcLogEntry.EventType type = 4;
.grpc.binarylog.v1.GrpcLogEntry.Logger logger = 5;
oneof payload {
.grpc.binarylog.v1.ClientHeader client_header = 6;
.grpc.binarylog.v1.ServerHeader server_header = 7;
.grpc.binarylog.v1.Message message = 8;
.grpc.binarylog.v1.Trailer trailer = 9;
}
bool payload_truncated = 10;
.grpc.binarylog.v1.Address peer = 11;
}
message ClientHeader {
.grpc.binarylog.v1.Metadata metadata = 1;
string method_name = 2;
string authority = 3;
.google.protobuf.Duration timeout = 4;
}
message ServerHeader {
.grpc.binarylog.v1.Metadata metadata = 1;
}
message Trailer {
.grpc.binarylog.v1.Metadata metadata = 1;
uint32 status_code = 2;
string status_message = 3;
bytes status_details = 4;
}
message Message {
uint32 length = 1;
bytes data = 2;
}
message Metadata {
repeated .grpc.binarylog.v1.MetadataEntry entry = 1;
}
message MetadataEntry {
string key = 1;
bytes value = 2;
}
message Address {
enum Type {
TYPE_UNKNOWN = 0;
TYPE_IPV4 = 1;
TYPE_IPV6 = 2;
TYPE_UNIX = 3;
}
.grpc.binarylog.v1.Address.Type type = 1;
string address = 2;
uint32 ip_port = 3;
}
@@ -0,0 +1,98 @@
package io.prometheus.client;
import "google/protobuf/timestamp.proto";
enum MetricType {
COUNTER = 0;
GAUGE = 1;
SUMMARY = 2;
UNTYPED = 3;
HISTOGRAM = 4;
GAUGE_HISTOGRAM = 5;
}
message LabelPair {
optional string name = 1;
optional string value = 2;
}
message Gauge {
optional double value = 1;
}
message Counter {
optional double value = 1;
optional .io.prometheus.client.Exemplar exemplar = 2;
optional .google.protobuf.Timestamp created_timestamp = 3;
}
message Quantile {
optional double quantile = 1;
optional double value = 2;
}
message Summary {
optional uint64 sample_count = 1;
optional double sample_sum = 2;
repeated .io.prometheus.client.Quantile quantile = 3;
optional .google.protobuf.Timestamp created_timestamp = 4;
}
message Untyped {
optional double value = 1;
}
message Histogram {
optional uint64 sample_count = 1;
optional double sample_count_float = 4;
optional double sample_sum = 2;
repeated .io.prometheus.client.Bucket bucket = 3;
optional .google.protobuf.Timestamp created_timestamp = 15;
optional sint32 schema = 5;
optional double zero_threshold = 6;
optional uint64 zero_count = 7;
optional double zero_count_float = 8;
repeated .io.prometheus.client.BucketSpan negative_span = 9;
repeated sint64 negative_delta = 10;
repeated double negative_count = 11;
repeated .io.prometheus.client.BucketSpan positive_span = 12;
repeated sint64 positive_delta = 13;
repeated double positive_count = 14;
repeated .io.prometheus.client.Exemplar exemplars = 16;
}
message Bucket {
optional uint64 cumulative_count = 1;
optional double cumulative_count_float = 4;
optional double upper_bound = 2;
optional .io.prometheus.client.Exemplar exemplar = 3;
}
message BucketSpan {
optional sint32 offset = 1;
optional uint32 length = 2;
}
message Exemplar {
repeated .io.prometheus.client.LabelPair label = 1;
optional double value = 2;
optional .google.protobuf.Timestamp timestamp = 3;
}
message Metric {
repeated .io.prometheus.client.LabelPair label = 1;
optional .io.prometheus.client.Gauge gauge = 2;
optional .io.prometheus.client.Counter counter = 3;
optional .io.prometheus.client.Summary summary = 4;
optional .io.prometheus.client.Untyped untyped = 5;
optional .io.prometheus.client.Histogram histogram = 7;
optional int64 timestamp_ms = 6;
}
message MetricFamily {
optional string name = 1;
optional string help = 2;
optional .io.prometheus.client.MetricType type = 3;
repeated .io.prometheus.client.Metric metric = 4;
optional string unit = 5;
}
@@ -32,6 +32,7 @@ import type { BedrockOptions } from "./amazon-bedrock";
import type { AnthropicOptions } from "./anthropic";
import type { AzureOpenAIResponsesOptions } from "./azure-openai-responses";
import type { CursorOptions } from "./cursor";
import type { DevinOptions } from "./devin";
import type { GoogleOptions } from "./google";
import type { GoogleGeminiCliOptions } from "./google-gemini-cli";
import type { GoogleVertexOptions } from "./google-vertex";
@@ -128,6 +129,10 @@ interface CursorProviderModule {
) => AssistantMessageEventStream;
}
interface DevinProviderModule {
streamDevin: (model: Model<"devin-agent">, context: Context, options: DevinOptions) => AssistantMessageEventStream;
}
interface BedrockProviderModule {
streamBedrock: (
model: Model<"bedrock-converse-stream">,
@@ -150,6 +155,7 @@ let openAICompletionsProviderModulePromise: Promise<LazyProviderModule<"openai-c
let openAIResponsesProviderModulePromise: Promise<LazyProviderModule<"openai-responses">> | undefined;
let ollamaProviderModulePromise: Promise<LazyProviderModule<"ollama-chat">> | undefined;
let cursorProviderModulePromise: Promise<LazyProviderModule<"cursor-agent">> | undefined;
let devinProviderModulePromise: Promise<LazyProviderModule<"devin-agent">> | undefined;
let bedrockProviderModuleOverride: LazyProviderModule<"bedrock-converse-stream"> | undefined;
let bedrockProviderModulePromise: Promise<LazyProviderModule<"bedrock-converse-stream">> | undefined;
@@ -409,6 +415,14 @@ function loadCursorProviderModule(): Promise<LazyProviderModule<"cursor-agent">>
return cursorProviderModulePromise;
}
function loadDevinProviderModule(): Promise<LazyProviderModule<"devin-agent">> {
devinProviderModulePromise ||= import("./devin").then(module => {
const provider = module as DevinProviderModule;
return { stream: provider.streamDevin };
});
return devinProviderModulePromise;
}
function loadBedrockProviderModule(): Promise<LazyProviderModule<"bedrock-converse-stream">> {
if (bedrockProviderModuleOverride) {
return Promise.resolve(bedrockProviderModuleOverride);
@@ -452,6 +466,7 @@ export const streamOpenAIResponses = createLazyStream(
PROVIDER_HANDLED_STREAM_TIMEOUTS,
);
export const streamCursor = createLazyStream(loadCursorProviderModule);
export const streamDevin = createLazyStream(loadDevinProviderModule);
export const streamOllama = createLazyStream(loadOllamaProviderModule, OPENAI_IDLE_FLOORED_LAZY_STREAM_LIMITS);
export const streamBedrock = createLazyStream(loadBedrockProviderModule);
+15
View File
@@ -0,0 +1,15 @@
import type { OAuthLoginCallbacks } from "./oauth/types";
import type { ProviderDefinition } from "./types";
export const devinProvider = {
id: "devin",
name: "Devin",
login: async (cb: OAuthLoginCallbacks) => {
// Lazy import: keep OAuth flow modules out of the eager registry graph.
const { loginDevin } = await import("./oauth/devin");
const credentials = await loginDevin(cb);
return credentials.access;
},
callbackPort: 59653,
pasteCodeFlow: true,
} as const satisfies ProviderDefinition;
+113
View File
@@ -0,0 +1,113 @@
import { OAuthCallbackFlow } from "./callback-server";
import { generatePKCE } from "./pkce";
import type { OAuthController, OAuthCredentials } from "./types";
type FetchFunction = NonNullable<OAuthController["fetch"]>;
const DEVIN_WEBAPP_URL = "https://app.devin.ai";
const DEVIN_API_URL = "https://api.devin.ai";
const CALLBACK_PORT = 59653;
const CALLBACK_PATH = "/callback";
const TOKEN_PATH = "/auth/cli/token";
const FALLBACK_EXPIRES_MS = 365 * 24 * 60 * 60 * 1000;
interface DevinPKCEParams {
verifier: string;
challenge: string;
}
export async function loginDevin(ctrl: OAuthController): Promise<OAuthCredentials> {
const flow = new DevinOAuthFlow(ctrl);
return flow.login();
}
class DevinOAuthFlow extends OAuthCallbackFlow {
#pkce?: DevinPKCEParams;
constructor(ctrl: OAuthController) {
super(ctrl, {
preferredPort: CALLBACK_PORT,
callbackPath: CALLBACK_PATH,
callbackHostname: "127.0.0.1",
});
}
generateState(): string {
return crypto.randomUUID();
}
async generateAuthUrl(state: string, redirectUri: string): Promise<{ url: string; instructions?: string }> {
this.#pkce = await generatePKCE();
const params = new URLSearchParams({
redirect_uri: redirectUri,
state,
prompt: "select_account",
code_challenge: this.#pkce.challenge,
code_challenge_method: "S256",
});
return {
url: `${DEVIN_WEBAPP_URL}/auth/cli/continue?${params.toString()}`,
instructions: "Sign in to Devin in your browser.",
};
}
async exchangeToken(code: string): Promise<OAuthCredentials> {
if (!this.#pkce) {
throw new Error("Devin PKCE verifier was not initialized");
}
const token = await exchangeDevinCliToken(code, this.#pkce.verifier, this.ctrl.fetch);
return {
access: token,
refresh: token,
expires: getTokenExpiry(token),
apiEndpoint: DEVIN_API_URL,
enterpriseUrl: DEVIN_WEBAPP_URL,
};
}
}
export async function exchangeDevinCliToken(
authorizationCode: string,
codeVerifier: string,
fetchImpl: FetchFunction = fetch,
): Promise<string> {
const response = await fetchImpl(`${DEVIN_API_URL}${TOKEN_PATH}`, {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
body: JSON.stringify({
code: authorizationCode,
code_verifier: codeVerifier,
}),
});
if (!response.ok) {
const error = await response.text();
throw new Error(`Devin CLI token exchange failed: ${response.status} ${error}`.trim());
}
const data = (await response.json()) as { token?: unknown };
if (typeof data.token !== "string" || data.token.length === 0) {
throw new Error("Devin CLI token exchange returned an empty token");
}
return data.token;
}
function getTokenExpiry(token: string): number {
try {
const [, payload] = token.split(".");
if (payload) {
const decoded = JSON.parse(Buffer.from(payload, "base64url").toString("utf8")) as { exp?: unknown };
if (typeof decoded.exp === "number" && Number.isFinite(decoded.exp)) {
return decoded.exp * 1000 - 5 * 60 * 1000;
}
}
} catch {
// Ignore malformed non-JWT tokens and use a conservative long-lived fallback.
}
return Date.now() + FALLBACK_EXPIRES_MS;
}
+2
View File
@@ -8,6 +8,7 @@ import { cerebrasProvider } from "./cerebras";
import { cloudflareAiGatewayProvider } from "./cloudflare-ai-gateway";
import { cursorProvider } from "./cursor";
import { deepseekProvider } from "./deepseek";
import { devinProvider } from "./devin";
import { firepassProvider } from "./firepass";
import { fireworksProvider } from "./fireworks";
import { githubCopilotProvider } from "./github-copilot";
@@ -78,6 +79,7 @@ const ALL = [
openrouterProvider,
githubCopilotProvider,
cursorProvider,
devinProvider,
googleAntigravityProvider,
googleGeminiCliProvider,
openaiCodexDeviceProvider,
+47 -6
View File
@@ -15,6 +15,7 @@ import { ProviderHttpError } from "./errors";
import type { BedrockOptions } from "./providers/amazon-bedrock";
import type { AnthropicOptions } from "./providers/anthropic";
import type { CursorOptions } from "./providers/cursor";
import type { DevinOptions } from "./providers/devin";
import { isGitLabDuoModel, streamGitLabDuo } from "./providers/gitlab-duo";
import type { GoogleOptions } from "./providers/google";
import { getVertexAccessToken } from "./providers/google-auth";
@@ -37,6 +38,7 @@ import {
streamAzureOpenAIResponses,
streamBedrock,
streamCursor,
streamDevin,
streamGoogle,
streamGoogleGeminiCli,
streamGoogleVertex,
@@ -293,22 +295,46 @@ function streamDispatch<TApi extends Api>(
case "openrouter": {
const useResponses = $env.PI_OPENROUTER_RESPONSES !== "0";
if (useResponses) {
return streamOpenAIResponses(model as Model<"openai-responses">, context, providerOptions as any);
return streamOpenAIResponses(
model as Model<"openai-responses">,
context,
providerOptions as OptionsForApi<"openai-responses">,
);
}
return streamOpenAICompletions(model as Model<"openai-completions">, context, providerOptions as any);
return streamOpenAICompletions(
model as Model<"openai-completions">,
context,
providerOptions as OptionsForApi<"openai-completions">,
);
}
case "openai-completions":
return streamOpenAICompletions(model as Model<"openai-completions">, context, providerOptions as any);
return streamOpenAICompletions(
model as Model<"openai-completions">,
context,
providerOptions as OptionsForApi<"openai-completions">,
);
case "openai-responses":
return streamOpenAIResponses(model as Model<"openai-responses">, context, providerOptions as any);
return streamOpenAIResponses(
model as Model<"openai-responses">,
context,
providerOptions as OptionsForApi<"openai-responses">,
);
case "azure-openai-responses":
return streamAzureOpenAIResponses(model as Model<"azure-openai-responses">, context, providerOptions as any);
return streamAzureOpenAIResponses(
model as Model<"azure-openai-responses">,
context,
providerOptions as OptionsForApi<"azure-openai-responses">,
);
case "openai-codex-responses":
return streamOpenAICodexResponses(model as Model<"openai-codex-responses">, context, providerOptions as any);
return streamOpenAICodexResponses(
model as Model<"openai-codex-responses">,
context,
providerOptions as OptionsForApi<"openai-codex-responses">,
);
case "google-generative-ai":
return streamGoogle(model as Model<"google-generative-ai">, context, providerOptions);
@@ -326,6 +352,9 @@ function streamDispatch<TApi extends Api>(
case "cursor-agent":
return streamCursor(model as Model<"cursor-agent">, context, providerOptions as CursorOptions);
case "devin-agent":
return streamDevin(model as Model<"devin-agent">, context, providerOptions as DevinOptions);
default:
throw new Error(`Unhandled API: ${api}`);
}
@@ -1117,6 +1146,18 @@ function mapOptionsForApi<TApi extends Api>(
});
}
case "devin-agent": {
const devinModel = model as Model<"devin-agent">;
const effort =
options?.reasoning && !options.disableReasoning
? requireSupportedEffort(devinModel, options.reasoning)
: undefined;
return castApi<"devin-agent">({
...base,
chatModelUid: resolveWireModelId(devinModel, effort),
});
}
default:
throw new Error(`Unhandled API in mapOptionsForApi: ${model.api}`);
}
+4 -2
View File
@@ -28,6 +28,7 @@ import type { AnthropicOptions } from "./providers/anthropic";
import type { StopDetails } from "./providers/anthropic-wire";
import type { AzureOpenAIResponsesOptions } from "./providers/azure-openai-responses";
import type { CursorOptions } from "./providers/cursor";
import type { DevinOptions } from "./providers/devin";
import type { GoogleOptions } from "./providers/google";
import type { GoogleGeminiCliOptions } from "./providers/google-gemini-cli";
import type { GoogleVertexOptions } from "./providers/google-vertex";
@@ -66,6 +67,7 @@ export interface ApiOptionsMap {
"google-vertex": GoogleVertexOptions;
"ollama-chat": OllamaChatOptions;
"cursor-agent": CursorOptions;
"devin-agent": DevinOptions;
}
// Compile-time exhaustiveness check - this will fail if ApiOptionsMap doesn't have all KnownApi keys
type _CheckExhaustive =
@@ -441,7 +443,7 @@ export interface ToolCall {
type: "toolCall";
id: string;
name: string;
arguments: Record<string, any>;
arguments: Record<string, unknown>;
thoughtSignature?: string; // Google-specific: opaque signature for reusing thought context
intent?: string; // Harness-level intent metadata extracted from traced tool arguments
/**
@@ -537,7 +539,7 @@ export interface AssistantMessage {
ttft?: number; // Time to first token in milliseconds
}
export interface ToolResultMessage<TDetails = any> {
export interface ToolResultMessage<TDetails = unknown> {
role: "toolResult";
toolCallId: string;
toolName: string;
+32
View File
@@ -0,0 +1,32 @@
import { describe, expect, test } from "bun:test";
import { exchangeDevinCliToken } from "@oh-my-pi/pi-ai/registry/oauth/devin";
import type { FetchImpl } from "@oh-my-pi/pi-catalog/types";
describe("Devin CLI login", () => {
test("exchanges callback code with CLI token JSON endpoint", async () => {
let requestUrl = "";
let requestInit: RequestInit | undefined;
const fetchImpl: FetchImpl = async (url, init) => {
requestUrl = String(url);
requestInit = init;
return new Response(JSON.stringify({ token: "devin-jwt" }), {
status: 200,
headers: { "Content-Type": "application/json" },
});
};
const token = await exchangeDevinCliToken("callback-code", "pkce-verifier", fetchImpl);
expect(token).toBe("devin-jwt");
expect(requestUrl).toBe("https://api.devin.ai/auth/cli/token");
expect(requestInit?.method).toBe("POST");
expect(requestInit?.headers).toEqual({
Accept: "application/json",
"Content-Type": "application/json",
});
expect(JSON.parse(String(requestInit?.body))).toEqual({
code: "callback-code",
code_verifier: "pkce-verifier",
});
});
});
+1 -1
View File
@@ -66,7 +66,7 @@ describe("provider registry auth surface", () => {
test("paste-code login set is derived from pasteCodeFlow", () => {
expect([...PASTE_CODE_LOGIN_PROVIDERS].sort()).toEqual(
["anthropic", "gitlab-duo", "google-antigravity", "google-gemini-cli", "openai-codex"].sort(),
["anthropic", "devin", "gitlab-duo", "google-antigravity", "google-gemini-cli", "openai-codex"].sort(),
);
expect(PASTE_CODE_LOGIN_PROVIDERS.has("zenmux")).toBe(false);
});
+3 -1
View File
@@ -308,7 +308,9 @@ async function multiTurn<TApi extends Api>(model: Model<TApi>, options?: Options
expect(block.id).toBeTruthy();
expect(block.arguments).toBeTruthy();
const { a, b, operation } = block.arguments;
const a = Number(block.arguments.a);
const b = Number(block.arguments.b);
const operation = typeof block.arguments.operation === "string" ? block.arguments.operation : "";
let result: number;
switch (operation) {
case "add":
@@ -692,7 +692,7 @@ describe("Tool argument coercion", () => {
arguments: { payload: { items: "[4, 5]" } },
};
const result = validateToolArguments(tool, toolCall);
const result = validateToolArguments(tool, toolCall) as { payload: { items: number[] } };
expect(result.payload.items).toEqual([4, 5]);
});
+5 -1
View File
@@ -1,6 +1,10 @@
# Changelog
## [Unreleased]
### Added
- Added support for Devin as a model provider
- Added capability to fetch dynamic models from the Devin model manager
## [16.1.11] - 2026-06-21
@@ -361,4 +365,4 @@
### Removed
- Removed the runtime enrichment layer: `enrichModelThinking` (and its non-enumerable memo-slot cache), `refreshModelThinking`, `modelOmitsReasoningEffort`, and the `model-thinking` re-exports of generator-only policies. Thinking metadata is resolved exactly once inside `buildModel`; runtime helpers (`getSupportedEfforts`, `clampThinkingLevelForModel`, `requireSupportedEffort`, the effort mappers) are pure field reads.
- Removed the runtime enrichment layer: `enrichModelThinking` (and its non-enumerable memo-slot cache), `refreshModelThinking`, `modelOmitsReasoningEffort`, and the `model-thinking` re-exports of generator-only policies. Thinking metadata is resolved exactly once inside `buildModel`; runtime helpers (`getSupportedEfforts`, `clampThinkingLevelForModel`, `requireSupportedEffort`, the effort mappers) are pure field reads.
+3 -2
View File
@@ -111,7 +111,8 @@ async function fetchProviderModelsFromCatalog(descriptor: CatalogProviderDescrip
try {
console.log(`Fetching models from ${descriptor.catalogDiscovery.label} model manager...`);
const manager = createModelManager(descriptor.createModelManagerOptions({ apiKey }));
const managerOptions = descriptor.createModelManagerOptions({ apiKey });
const manager = createModelManager(managerOptions);
const result = await manager.refresh("online");
// `stale: true` means the dynamic fetch failed and the manager fell back
// to merging the local agent.db model cache over the static catalog —
@@ -184,7 +185,7 @@ function applyGlobalModelsDevFallback(
const providerScopedKeys = new Set(modelsDevModels.map(model => `${model.provider}/${model.id}`));
const globalReferences = createGlobalModelsDevReferenceMap(modelsDevModels);
return models.map(model => {
if (providerScopedKeys.has(`${model.provider}/${model.id}`)) {
if (providerScopedKeys.has(`${model.provider}/${model.id}`) || model.provider === "devin") {
return model;
}
const reference = globalReferences.get(model.id);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,71 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file exa/auth_pb/auth.proto (package exa.auth_pb, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2";
import { file_buf_validate_validate } from "../../buf/validate/validate_pb";
import type { Metadata } from "../codeium_common_pb/codeium_common_pb";
import { file_exa_codeium_common_pb_codeium_common } from "../codeium_common_pb/codeium_common_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file exa/auth_pb/auth.proto.
*/
export const file_exa_auth_pb_auth: GenFile = /*@__PURE__*/
fileDesc("ChZleGEvYXV0aF9wYi9hdXRoLnByb3RvEgtleGEuYXV0aF9wYiJGChFHZXRVc2VySnd0UmVxdWVzdBIxCghtZXRhZGF0YRgBIAEoCzIfLmV4YS5jb2RlaXVtX2NvbW1vbl9wYi5NZXRhZGF0YSJFChJHZXRVc2VySnd0UmVzcG9uc2USEAoIdXNlcl9qd3QYASABKAkSHQoVY3VzdG9tX2FwaV9zZXJ2ZXJfdXJsGAIgASgJMlwKC0F1dGhTZXJ2aWNlEk0KCkdldFVzZXJKd3QSHi5leGEuYXV0aF9wYi5HZXRVc2VySnd0UmVxdWVzdBofLmV4YS5hdXRoX3BiLkdldFVzZXJKd3RSZXNwb25zZWIGcHJvdG8z", [file_buf_validate_validate, file_exa_codeium_common_pb_codeium_common]);
/**
* @generated from message exa.auth_pb.GetUserJwtRequest
*/
export type GetUserJwtRequest = Message<"exa.auth_pb.GetUserJwtRequest"> & {
/**
* @generated from field: exa.codeium_common_pb.Metadata metadata = 1;
*/
metadata?: Metadata | undefined;
};
/**
* Describes the message exa.auth_pb.GetUserJwtRequest.
* Use `create(GetUserJwtRequestSchema)` to create a new message.
*/
export const GetUserJwtRequestSchema: GenMessage<GetUserJwtRequest> = /*@__PURE__*/
messageDesc(file_exa_auth_pb_auth, 0);
/**
* @generated from message exa.auth_pb.GetUserJwtResponse
*/
export type GetUserJwtResponse = Message<"exa.auth_pb.GetUserJwtResponse"> & {
/**
* @generated from field: string user_jwt = 1;
*/
userJwt: string;
/**
* @generated from field: string custom_api_server_url = 2;
*/
customApiServerUrl: string;
};
/**
* Describes the message exa.auth_pb.GetUserJwtResponse.
* Use `create(GetUserJwtResponseSchema)` to create a new message.
*/
export const GetUserJwtResponseSchema: GenMessage<GetUserJwtResponse> = /*@__PURE__*/
messageDesc(file_exa_auth_pb_auth, 1);
/**
* @generated from service exa.auth_pb.AuthService
*/
export const AuthService: GenService<{
/**
* @generated from rpc exa.auth_pb.AuthService.GetUserJwt
*/
getUserJwt: {
methodKind: "unary";
input: typeof GetUserJwtRequestSchema;
output: typeof GetUserJwtResponseSchema;
},
}> = /*@__PURE__*/
serviceDesc(file_exa_auth_pb_auth, 0);
@@ -0,0 +1,348 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file exa/auto_cascade_common_pb/auto_cascade_common.proto (package exa.auto_cascade_common_pb, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import { file_buf_validate_validate } from "../../buf/validate/validate_pb";
import type { CascadeRunStatus, CortexTrajectory } from "../cortex_pb/cortex_pb";
import { file_exa_cortex_pb_cortex } from "../cortex_pb/cortex_pb";
import type { Timestamp } from "@bufbuild/protobuf/wkt";
import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file exa/auto_cascade_common_pb/auto_cascade_common.proto.
*/
export const file_exa_auto_cascade_common_pb_auto_cascade_common: GenFile = /*@__PURE__*/
fileDesc("CjRleGEvYXV0b19jYXNjYWRlX2NvbW1vbl9wYi9hdXRvX2Nhc2NhZGVfY29tbW9uLnByb3RvEhpleGEuYXV0b19jYXNjYWRlX2NvbW1vbl9wYiJQCgtHaXRSZXBvSW5mbxIRCglyZXBvX25hbWUYASABKAkSDgoGYnJhbmNoGAIgASgJEg4KBmNvbW1pdBgDIAEoCRIOCgZwcl91cmwYBCABKAki7wIKC1Nlc3Npb25JbmZvEhIKCnNlc3Npb25faWQYASABKAkSEwoLZXhwbGFuYXRpb24YAiABKAkSDwoHc3NoX3VybBgDIAEoCRIvCgZzdGF0dXMYBCABKA4yHy5leGEuY29ydGV4X3BiLkNhc2NhZGVSdW5TdGF0dXMSDwoHc3VtbWFyeRgFIAEoCRIzCgp0cmFqZWN0b3J5GAYgASgLMh8uZXhhLmNvcnRleF9wYi5Db3J0ZXhUcmFqZWN0b3J5EhMKC3Nlc3Npb25fa2V5GAcgASgJEi4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKCWdpdF9yZXBvcxgJIAMoCzInLmV4YS5hdXRvX2Nhc2NhZGVfY29tbW9uX3BiLkdpdFJlcG9JbmZvEi4KCnVwZGF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIrIBCgxTZXNzaW9uSW5mb3MSSAoIc2Vzc2lvbnMYASADKAsyNi5leGEuYXV0b19jYXNjYWRlX2NvbW1vbl9wYi5TZXNzaW9uSW5mb3MuU2Vzc2lvbnNFbnRyeRpYCg1TZXNzaW9uc0VudHJ5EgsKA2tleRgBIAEoCRI2CgV2YWx1ZRgCIAEoCzInLmV4YS5hdXRvX2Nhc2NhZGVfY29tbW9uX3BiLlNlc3Npb25JbmZvOgI4ASKmAgoVR2l0aHViUHVsbFJlcXVlc3RJbmZvEgsKA3VybBgBIAEoCRINCgVvd25lchgCIAEoCRIMCgRyZXBvGAMgASgJEg0KBXRpdGxlGAQgASgJEg4KBm51bWJlchgFIAEoCRJCCgljaV9zdGF0dXMYBiABKA4yLy5leGEuYXV0b19jYXNjYWRlX2NvbW1vbl9wYi5HaXRodWJDSUNoZWNrU3RhdHVzElAKDWJyYW5jaF9zdGF0dXMYByABKA4yOS5leGEuYXV0b19jYXNjYWRlX2NvbW1vbl9wYi5HaXRodWJQdWxsUmVxdWVzdEJyYW5jaFN0YXR1cxIuCgp1cGRhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJMChZHaXRodWJJbnN0YWxsYXRpb25JbmZvEhcKD2luc3RhbGxhdGlvbl9pZBgBIAEoCRIZChFvcmdhbml6YXRpb25fbmFtZRgCIAEoCSq9AQoMQnJhbmNoU3RhdHVzEh0KGUJSQU5DSF9TVEFUVVNfVU5TUEVDSUZJRUQQABIXChNCUkFOQ0hfU1RBVFVTX05PX1BSEAESGQoVQlJBTkNIX1NUQVRVU19QUl9PUEVOEAISGwoXQlJBTkNIX1NUQVRVU19QUl9DTE9TRUQQAxIbChdCUkFOQ0hfU1RBVFVTX1BSX01FUkdFRBAEEiAKHEJSQU5DSF9TVEFUVVNfSEFTX1NVR0dFU1RJT04QBSqpAQoLQ29tbWVudFR5cGUSHAoYQ09NTUVOVF9UWVBFX1VOU1BFQ0lGSUVEEAASJgoiQ09NTUVOVF9UWVBFX01BTlVBTF9SRVZJRVdfVFJJR0dFUhABEhUKEUNPTU1FTlRfVFlQRV9MR1RNEAISHAoYQ09NTUVOVF9UWVBFX1JFVklFV19CT0RZEAMSHwobQ09NTUVOVF9UWVBFX1JFVklFV19DT01NRU5UEAQqqAEKE0dpdGh1YkNJQ2hlY2tTdGF0dXMSJgoiR0lUSFVCX0NJX0NIRUNLX1NUQVRVU19VTlNQRUNJRklFRBAAEiIKHkdJVEhVQl9DSV9DSEVDS19TVEFUVVNfU1VDQ0VTUxABEiEKHUdJVEhVQl9DSV9DSEVDS19TVEFUVVNfRkFJTEVEEAISIgoeR0lUSFVCX0NJX0NIRUNLX1NUQVRVU19QRU5ESU5HEAMqhwIKHUdpdGh1YlB1bGxSZXF1ZXN0QnJhbmNoU3RhdHVzEjEKLUdJVEhVQl9QVUxMX1JFUVVFU1RfQlJBTkNIX1NUQVRVU19VTlNQRUNJRklFRBAAEioKJkdJVEhVQl9QVUxMX1JFUVVFU1RfQlJBTkNIX1NUQVRVU19PUEVOEAESLAooR0lUSFVCX1BVTExfUkVRVUVTVF9CUkFOQ0hfU1RBVFVTX0NMT1NFRBACEisKJ0dJVEhVQl9QVUxMX1JFUVVFU1RfQlJBTkNIX1NUQVRVU19EUkFGVBADEiwKKEdJVEhVQl9QVUxMX1JFUVVFU1RfQlJBTkNIX1NUQVRVU19NRVJHRUQQBGIGcHJvdG8z", [file_buf_validate_validate, file_exa_cortex_pb_cortex, file_google_protobuf_timestamp]);
/**
* @generated from message exa.auto_cascade_common_pb.GitRepoInfo
*/
export type GitRepoInfo = Message<"exa.auto_cascade_common_pb.GitRepoInfo"> & {
/**
* @generated from field: string repo_name = 1;
*/
repoName: string;
/**
* @generated from field: string branch = 2;
*/
branch: string;
/**
* @generated from field: string commit = 3;
*/
commit: string;
/**
* @generated from field: string pr_url = 4;
*/
prUrl: string;
};
/**
* Describes the message exa.auto_cascade_common_pb.GitRepoInfo.
* Use `create(GitRepoInfoSchema)` to create a new message.
*/
export const GitRepoInfoSchema: GenMessage<GitRepoInfo> = /*@__PURE__*/
messageDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 0);
/**
* @generated from message exa.auto_cascade_common_pb.SessionInfo
*/
export type SessionInfo = Message<"exa.auto_cascade_common_pb.SessionInfo"> & {
/**
* @generated from field: string session_id = 1;
*/
sessionId: string;
/**
* @generated from field: string explanation = 2;
*/
explanation: string;
/**
* @generated from field: string ssh_url = 3;
*/
sshUrl: string;
/**
* @generated from field: exa.cortex_pb.CascadeRunStatus status = 4;
*/
status: CascadeRunStatus;
/**
* @generated from field: string summary = 5;
*/
summary: string;
/**
* @generated from field: exa.cortex_pb.CortexTrajectory trajectory = 6;
*/
trajectory?: CortexTrajectory | undefined;
/**
* @generated from field: string session_key = 7;
*/
sessionKey: string;
/**
* @generated from field: google.protobuf.Timestamp created_at = 8;
*/
createdAt?: Timestamp | undefined;
/**
* @generated from field: repeated exa.auto_cascade_common_pb.GitRepoInfo git_repos = 9;
*/
gitRepos: GitRepoInfo[];
/**
* @generated from field: google.protobuf.Timestamp updated_at = 10;
*/
updatedAt?: Timestamp | undefined;
};
/**
* Describes the message exa.auto_cascade_common_pb.SessionInfo.
* Use `create(SessionInfoSchema)` to create a new message.
*/
export const SessionInfoSchema: GenMessage<SessionInfo> = /*@__PURE__*/
messageDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 1);
/**
* @generated from message exa.auto_cascade_common_pb.SessionInfos
*/
export type SessionInfos = Message<"exa.auto_cascade_common_pb.SessionInfos"> & {
/**
* @generated from field: map<string, exa.auto_cascade_common_pb.SessionInfo> sessions = 1;
*/
sessions: { [key: string]: SessionInfo };
};
/**
* Describes the message exa.auto_cascade_common_pb.SessionInfos.
* Use `create(SessionInfosSchema)` to create a new message.
*/
export const SessionInfosSchema: GenMessage<SessionInfos> = /*@__PURE__*/
messageDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 2);
/**
* @generated from message exa.auto_cascade_common_pb.GithubPullRequestInfo
*/
export type GithubPullRequestInfo = Message<"exa.auto_cascade_common_pb.GithubPullRequestInfo"> & {
/**
* @generated from field: string url = 1;
*/
url: string;
/**
* @generated from field: string owner = 2;
*/
owner: string;
/**
* @generated from field: string repo = 3;
*/
repo: string;
/**
* @generated from field: string title = 4;
*/
title: string;
/**
* @generated from field: string number = 5;
*/
number: string;
/**
* @generated from field: exa.auto_cascade_common_pb.GithubCICheckStatus ci_status = 6;
*/
ciStatus: GithubCICheckStatus;
/**
* @generated from field: exa.auto_cascade_common_pb.GithubPullRequestBranchStatus branch_status = 7;
*/
branchStatus: GithubPullRequestBranchStatus;
/**
* @generated from field: google.protobuf.Timestamp updated_at = 8;
*/
updatedAt?: Timestamp | undefined;
};
/**
* Describes the message exa.auto_cascade_common_pb.GithubPullRequestInfo.
* Use `create(GithubPullRequestInfoSchema)` to create a new message.
*/
export const GithubPullRequestInfoSchema: GenMessage<GithubPullRequestInfo> = /*@__PURE__*/
messageDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 3);
/**
* @generated from message exa.auto_cascade_common_pb.GithubInstallationInfo
*/
export type GithubInstallationInfo = Message<"exa.auto_cascade_common_pb.GithubInstallationInfo"> & {
/**
* @generated from field: string installation_id = 1;
*/
installationId: string;
/**
* @generated from field: string organization_name = 2;
*/
organizationName: string;
};
/**
* Describes the message exa.auto_cascade_common_pb.GithubInstallationInfo.
* Use `create(GithubInstallationInfoSchema)` to create a new message.
*/
export const GithubInstallationInfoSchema: GenMessage<GithubInstallationInfo> = /*@__PURE__*/
messageDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 4);
/**
* @generated from enum exa.auto_cascade_common_pb.BranchStatus
*/
export enum BranchStatus {
/**
* @generated from enum value: BRANCH_STATUS_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: BRANCH_STATUS_NO_PR = 1;
*/
NO_PR = 1,
/**
* @generated from enum value: BRANCH_STATUS_PR_OPEN = 2;
*/
PR_OPEN = 2,
/**
* @generated from enum value: BRANCH_STATUS_PR_CLOSED = 3;
*/
PR_CLOSED = 3,
/**
* @generated from enum value: BRANCH_STATUS_PR_MERGED = 4;
*/
PR_MERGED = 4,
/**
* @generated from enum value: BRANCH_STATUS_HAS_SUGGESTION = 5;
*/
HAS_SUGGESTION = 5,
}
/**
* Describes the enum exa.auto_cascade_common_pb.BranchStatus.
*/
export const BranchStatusSchema: GenEnum<BranchStatus> = /*@__PURE__*/
enumDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 0);
/**
* @generated from enum exa.auto_cascade_common_pb.CommentType
*/
export enum CommentType {
/**
* @generated from enum value: COMMENT_TYPE_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: COMMENT_TYPE_MANUAL_REVIEW_TRIGGER = 1;
*/
MANUAL_REVIEW_TRIGGER = 1,
/**
* @generated from enum value: COMMENT_TYPE_LGTM = 2;
*/
LGTM = 2,
/**
* @generated from enum value: COMMENT_TYPE_REVIEW_BODY = 3;
*/
REVIEW_BODY = 3,
/**
* @generated from enum value: COMMENT_TYPE_REVIEW_COMMENT = 4;
*/
REVIEW_COMMENT = 4,
}
/**
* Describes the enum exa.auto_cascade_common_pb.CommentType.
*/
export const CommentTypeSchema: GenEnum<CommentType> = /*@__PURE__*/
enumDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 1);
/**
* @generated from enum exa.auto_cascade_common_pb.GithubCICheckStatus
*/
export enum GithubCICheckStatus {
/**
* @generated from enum value: GITHUB_CI_CHECK_STATUS_UNSPECIFIED = 0;
*/
GITHUB_CI_CHECK_STATUS_UNSPECIFIED = 0,
/**
* @generated from enum value: GITHUB_CI_CHECK_STATUS_SUCCESS = 1;
*/
GITHUB_CI_CHECK_STATUS_SUCCESS = 1,
/**
* @generated from enum value: GITHUB_CI_CHECK_STATUS_FAILED = 2;
*/
GITHUB_CI_CHECK_STATUS_FAILED = 2,
/**
* @generated from enum value: GITHUB_CI_CHECK_STATUS_PENDING = 3;
*/
GITHUB_CI_CHECK_STATUS_PENDING = 3,
}
/**
* Describes the enum exa.auto_cascade_common_pb.GithubCICheckStatus.
*/
export const GithubCICheckStatusSchema: GenEnum<GithubCICheckStatus> = /*@__PURE__*/
enumDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 2);
/**
* @generated from enum exa.auto_cascade_common_pb.GithubPullRequestBranchStatus
*/
export enum GithubPullRequestBranchStatus {
/**
* @generated from enum value: GITHUB_PULL_REQUEST_BRANCH_STATUS_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: GITHUB_PULL_REQUEST_BRANCH_STATUS_OPEN = 1;
*/
OPEN = 1,
/**
* @generated from enum value: GITHUB_PULL_REQUEST_BRANCH_STATUS_CLOSED = 2;
*/
CLOSED = 2,
/**
* @generated from enum value: GITHUB_PULL_REQUEST_BRANCH_STATUS_DRAFT = 3;
*/
DRAFT = 3,
/**
* @generated from enum value: GITHUB_PULL_REQUEST_BRANCH_STATUS_MERGED = 4;
*/
MERGED = 4,
}
/**
* Describes the enum exa.auto_cascade_common_pb.GithubPullRequestBranchStatus.
*/
export const GithubPullRequestBranchStatusSchema: GenEnum<GithubPullRequestBranchStatus> = /*@__PURE__*/
enumDesc(file_exa_auto_cascade_common_pb_auto_cascade_common, 3);
@@ -0,0 +1,103 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file exa/bug_checker_pb/bug_checker.proto (package exa.bug_checker_pb, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file exa/bug_checker_pb/bug_checker.proto.
*/
export const file_exa_bug_checker_pb_bug_checker: GenFile = /*@__PURE__*/
fileDesc("CiRleGEvYnVnX2NoZWNrZXJfcGIvYnVnX2NoZWNrZXIucHJvdG8SEmV4YS5idWdfY2hlY2tlcl9wYiInCgNGaXgSDwoHb2xkX3N0chgBIAEoCRIPCgduZXdfc3RyGAIgASgJItMBCgNCdWcSCgoCaWQYASABKAkSDAoEZmlsZRgCIAEoCRINCgVzdGFydBgDIAEoBRILCgNlbmQYBCABKAUSDQoFdGl0bGUYBSABKAkSEwoLZGVzY3JpcHRpb24YBiABKAkSEAoIc2V2ZXJpdHkYByABKAkSEgoKcmVzb2x1dGlvbhgIIAEoCRISCgpjb25maWRlbmNlGAkgASgBEhIKCmNhdGVnb3JpZXMYCiADKAkSJAoDZml4GAsgASgLMhcuZXhhLmJ1Z19jaGVja2VyX3BiLkZpeGIGcHJvdG8z");
/**
* @generated from message exa.bug_checker_pb.Fix
*/
export type Fix = Message<"exa.bug_checker_pb.Fix"> & {
/**
* @generated from field: string old_str = 1;
*/
oldStr: string;
/**
* @generated from field: string new_str = 2;
*/
newStr: string;
};
/**
* Describes the message exa.bug_checker_pb.Fix.
* Use `create(FixSchema)` to create a new message.
*/
export const FixSchema: GenMessage<Fix> = /*@__PURE__*/
messageDesc(file_exa_bug_checker_pb_bug_checker, 0);
/**
* @generated from message exa.bug_checker_pb.Bug
*/
export type Bug = Message<"exa.bug_checker_pb.Bug"> & {
/**
* @generated from field: string id = 1;
*/
id: string;
/**
* @generated from field: string file = 2;
*/
file: string;
/**
* @generated from field: int32 start = 3;
*/
start: number;
/**
* @generated from field: int32 end = 4;
*/
end: number;
/**
* @generated from field: string title = 5;
*/
title: string;
/**
* @generated from field: string description = 6;
*/
description: string;
/**
* @generated from field: string severity = 7;
*/
severity: string;
/**
* @generated from field: string resolution = 8;
*/
resolution: string;
/**
* @generated from field: double confidence = 9;
*/
confidence: number;
/**
* @generated from field: repeated string categories = 10;
*/
categories: string[];
/**
* @generated from field: exa.bug_checker_pb.Fix fix = 11;
*/
fix?: Fix | undefined;
};
/**
* Describes the message exa.bug_checker_pb.Bug.
* Use `create(BugSchema)` to create a new message.
*/
export const BugSchema: GenMessage<Bug> = /*@__PURE__*/
messageDesc(file_exa_bug_checker_pb_bug_checker, 1);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,312 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file exa/diff_action_pb/diff_action.proto (package exa.diff_action_pb, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Language } from "../codeium_common_pb/codeium_common_pb";
import { file_exa_codeium_common_pb_codeium_common } from "../codeium_common_pb/codeium_common_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file exa/diff_action_pb/diff_action.proto.
*/
export const file_exa_diff_action_pb_diff_action: GenFile = /*@__PURE__*/
fileDesc("CiRleGEvZGlmZl9hY3Rpb25fcGIvZGlmZl9hY3Rpb24ucHJvdG8SEmV4YS5kaWZmX2FjdGlvbl9wYiKlAQoLVW5pZmllZERpZmYSPgoFbGluZXMYAyADKAsyLy5leGEuZGlmZl9hY3Rpb25fcGIuVW5pZmllZERpZmYuVW5pZmllZERpZmZMaW5lGlYKD1VuaWZpZWREaWZmTGluZRIMCgR0ZXh0GAEgASgJEjUKBHR5cGUYAiABKA4yJy5leGEuZGlmZl9hY3Rpb25fcGIuVW5pZmllZERpZmZMaW5lVHlwZSLWAQoJRGlmZkJsb2NrEhIKCnN0YXJ0X2xpbmUYASABKAUSEAoIZW5kX2xpbmUYAiABKAUSNQoMdW5pZmllZF9kaWZmGAMgASgLMh8uZXhhLmRpZmZfYWN0aW9uX3BiLlVuaWZpZWREaWZmEjYKDWZyb21fbGFuZ3VhZ2UYBCABKA4yHy5leGEuY29kZWl1bV9jb21tb25fcGIuTGFuZ3VhZ2USNAoLdG9fbGFuZ3VhZ2UYBSABKA4yHy5leGEuY29kZWl1bV9jb21tb25fcGIuTGFuZ3VhZ2UiVQoTQ2hhcmFjdGVyRGlmZkNoYW5nZRIMCgR0ZXh0GAEgASgJEjAKBHR5cGUYAiABKA4yIi5leGEuZGlmZl9hY3Rpb25fcGIuRGlmZkNoYW5nZVR5cGUiSQoNQ2hhcmFjdGVyRGlmZhI4CgdjaGFuZ2VzGAEgAygLMicuZXhhLmRpZmZfYWN0aW9uX3BiLkNoYXJhY3RlckRpZmZDaGFuZ2UiigEKDUNvbWJvRGlmZkxpbmUSDAoEdGV4dBgBIAEoCRIwCgR0eXBlGAIgASgOMiIuZXhhLmRpZmZfYWN0aW9uX3BiLkRpZmZDaGFuZ2VUeXBlEjkKDmNoYXJhY3Rlcl9kaWZmGAMgASgLMiEuZXhhLmRpZmZfYWN0aW9uX3BiLkNoYXJhY3RlckRpZmYiPQoJQ29tYm9EaWZmEjAKBWxpbmVzGAEgAygLMiEuZXhhLmRpZmZfYWN0aW9uX3BiLkNvbWJvRGlmZkxpbmUirgEKB0RpZmZTZXQSNQoMdW5pZmllZF9kaWZmGAEgASgLMh8uZXhhLmRpZmZfYWN0aW9uX3BiLlVuaWZpZWREaWZmEjkKDmNoYXJhY3Rlcl9kaWZmGAIgASgLMiEuZXhhLmRpZmZfYWN0aW9uX3BiLkNoYXJhY3RlckRpZmYSMQoKY29tYm9fZGlmZhgDIAEoCzIdLmV4YS5kaWZmX2FjdGlvbl9wYi5Db21ib0RpZmYiOAoIRGlmZkxpc3QSLAoFZGlmZnMYAiADKAsyHS5leGEuZGlmZl9hY3Rpb25fcGIuRGlmZkJsb2NrKqkBChNVbmlmaWVkRGlmZkxpbmVUeXBlEiYKIlVOSUZJRURfRElGRl9MSU5FX1RZUEVfVU5TUEVDSUZJRUQQABIhCh1VTklGSUVEX0RJRkZfTElORV9UWVBFX0lOU0VSVBABEiEKHVVOSUZJRURfRElGRl9MSU5FX1RZUEVfREVMRVRFEAISJAogVU5JRklFRF9ESUZGX0xJTkVfVFlQRV9VTkNIQU5HRUQQAyqMAQoORGlmZkNoYW5nZVR5cGUSIAocRElGRl9DSEFOR0VfVFlQRV9VTlNQRUNJRklFRBAAEhsKF0RJRkZfQ0hBTkdFX1RZUEVfSU5TRVJUEAESGwoXRElGRl9DSEFOR0VfVFlQRV9ERUxFVEUQAhIeChpESUZGX0NIQU5HRV9UWVBFX1VOQ0hBTkdFRBADKnYKCERpZmZUeXBlEhkKFURJRkZfVFlQRV9VTlNQRUNJRklFRBAAEhUKEURJRkZfVFlQRV9VTklGSUVEEAESFwoTRElGRl9UWVBFX0NIQVJBQ1RFUhACEhMKD0RJRkZfVFlQRV9DT01CTxADIgQIBBAEIgQIBRAFYgZwcm90bzM", [file_exa_codeium_common_pb_codeium_common]);
/**
* @generated from message exa.diff_action_pb.UnifiedDiff
*/
export type UnifiedDiff = Message<"exa.diff_action_pb.UnifiedDiff"> & {
/**
* @generated from field: repeated exa.diff_action_pb.UnifiedDiff.UnifiedDiffLine lines = 3;
*/
lines: UnifiedDiff_UnifiedDiffLine[];
};
/**
* Describes the message exa.diff_action_pb.UnifiedDiff.
* Use `create(UnifiedDiffSchema)` to create a new message.
*/
export const UnifiedDiffSchema: GenMessage<UnifiedDiff> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 0);
/**
* @generated from message exa.diff_action_pb.UnifiedDiff.UnifiedDiffLine
*/
export type UnifiedDiff_UnifiedDiffLine = Message<"exa.diff_action_pb.UnifiedDiff.UnifiedDiffLine"> & {
/**
* @generated from field: string text = 1;
*/
text: string;
/**
* @generated from field: exa.diff_action_pb.UnifiedDiffLineType type = 2;
*/
type: UnifiedDiffLineType;
};
/**
* Describes the message exa.diff_action_pb.UnifiedDiff.UnifiedDiffLine.
* Use `create(UnifiedDiff_UnifiedDiffLineSchema)` to create a new message.
*/
export const UnifiedDiff_UnifiedDiffLineSchema: GenMessage<UnifiedDiff_UnifiedDiffLine> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 0, 0);
/**
* @generated from message exa.diff_action_pb.DiffBlock
*/
export type DiffBlock = Message<"exa.diff_action_pb.DiffBlock"> & {
/**
* @generated from field: int32 start_line = 1;
*/
startLine: number;
/**
* @generated from field: int32 end_line = 2;
*/
endLine: number;
/**
* @generated from field: exa.diff_action_pb.UnifiedDiff unified_diff = 3;
*/
unifiedDiff?: UnifiedDiff | undefined;
/**
* @generated from field: exa.codeium_common_pb.Language from_language = 4;
*/
fromLanguage: Language;
/**
* @generated from field: exa.codeium_common_pb.Language to_language = 5;
*/
toLanguage: Language;
};
/**
* Describes the message exa.diff_action_pb.DiffBlock.
* Use `create(DiffBlockSchema)` to create a new message.
*/
export const DiffBlockSchema: GenMessage<DiffBlock> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 1);
/**
* @generated from message exa.diff_action_pb.CharacterDiffChange
*/
export type CharacterDiffChange = Message<"exa.diff_action_pb.CharacterDiffChange"> & {
/**
* @generated from field: string text = 1;
*/
text: string;
/**
* @generated from field: exa.diff_action_pb.DiffChangeType type = 2;
*/
type: DiffChangeType;
};
/**
* Describes the message exa.diff_action_pb.CharacterDiffChange.
* Use `create(CharacterDiffChangeSchema)` to create a new message.
*/
export const CharacterDiffChangeSchema: GenMessage<CharacterDiffChange> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 2);
/**
* @generated from message exa.diff_action_pb.CharacterDiff
*/
export type CharacterDiff = Message<"exa.diff_action_pb.CharacterDiff"> & {
/**
* @generated from field: repeated exa.diff_action_pb.CharacterDiffChange changes = 1;
*/
changes: CharacterDiffChange[];
};
/**
* Describes the message exa.diff_action_pb.CharacterDiff.
* Use `create(CharacterDiffSchema)` to create a new message.
*/
export const CharacterDiffSchema: GenMessage<CharacterDiff> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 3);
/**
* @generated from message exa.diff_action_pb.ComboDiffLine
*/
export type ComboDiffLine = Message<"exa.diff_action_pb.ComboDiffLine"> & {
/**
* @generated from field: string text = 1;
*/
text: string;
/**
* @generated from field: exa.diff_action_pb.DiffChangeType type = 2;
*/
type: DiffChangeType;
/**
* @generated from field: exa.diff_action_pb.CharacterDiff character_diff = 3;
*/
characterDiff?: CharacterDiff | undefined;
};
/**
* Describes the message exa.diff_action_pb.ComboDiffLine.
* Use `create(ComboDiffLineSchema)` to create a new message.
*/
export const ComboDiffLineSchema: GenMessage<ComboDiffLine> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 4);
/**
* @generated from message exa.diff_action_pb.ComboDiff
*/
export type ComboDiff = Message<"exa.diff_action_pb.ComboDiff"> & {
/**
* @generated from field: repeated exa.diff_action_pb.ComboDiffLine lines = 1;
*/
lines: ComboDiffLine[];
};
/**
* Describes the message exa.diff_action_pb.ComboDiff.
* Use `create(ComboDiffSchema)` to create a new message.
*/
export const ComboDiffSchema: GenMessage<ComboDiff> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 5);
/**
* @generated from message exa.diff_action_pb.DiffSet
*/
export type DiffSet = Message<"exa.diff_action_pb.DiffSet"> & {
/**
* @generated from field: exa.diff_action_pb.UnifiedDiff unified_diff = 1;
*/
unifiedDiff?: UnifiedDiff | undefined;
/**
* @generated from field: exa.diff_action_pb.CharacterDiff character_diff = 2;
*/
characterDiff?: CharacterDiff | undefined;
/**
* @generated from field: exa.diff_action_pb.ComboDiff combo_diff = 3;
*/
comboDiff?: ComboDiff | undefined;
};
/**
* Describes the message exa.diff_action_pb.DiffSet.
* Use `create(DiffSetSchema)` to create a new message.
*/
export const DiffSetSchema: GenMessage<DiffSet> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 6);
/**
* @generated from message exa.diff_action_pb.DiffList
*/
export type DiffList = Message<"exa.diff_action_pb.DiffList"> & {
/**
* @generated from field: repeated exa.diff_action_pb.DiffBlock diffs = 2;
*/
diffs: DiffBlock[];
};
/**
* Describes the message exa.diff_action_pb.DiffList.
* Use `create(DiffListSchema)` to create a new message.
*/
export const DiffListSchema: GenMessage<DiffList> = /*@__PURE__*/
messageDesc(file_exa_diff_action_pb_diff_action, 7);
/**
* @generated from enum exa.diff_action_pb.UnifiedDiffLineType
*/
export enum UnifiedDiffLineType {
/**
* @generated from enum value: UNIFIED_DIFF_LINE_TYPE_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: UNIFIED_DIFF_LINE_TYPE_INSERT = 1;
*/
INSERT = 1,
/**
* @generated from enum value: UNIFIED_DIFF_LINE_TYPE_DELETE = 2;
*/
DELETE = 2,
/**
* @generated from enum value: UNIFIED_DIFF_LINE_TYPE_UNCHANGED = 3;
*/
UNCHANGED = 3,
}
/**
* Describes the enum exa.diff_action_pb.UnifiedDiffLineType.
*/
export const UnifiedDiffLineTypeSchema: GenEnum<UnifiedDiffLineType> = /*@__PURE__*/
enumDesc(file_exa_diff_action_pb_diff_action, 0);
/**
* @generated from enum exa.diff_action_pb.DiffChangeType
*/
export enum DiffChangeType {
/**
* @generated from enum value: DIFF_CHANGE_TYPE_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: DIFF_CHANGE_TYPE_INSERT = 1;
*/
INSERT = 1,
/**
* @generated from enum value: DIFF_CHANGE_TYPE_DELETE = 2;
*/
DELETE = 2,
/**
* @generated from enum value: DIFF_CHANGE_TYPE_UNCHANGED = 3;
*/
UNCHANGED = 3,
}
/**
* Describes the enum exa.diff_action_pb.DiffChangeType.
*/
export const DiffChangeTypeSchema: GenEnum<DiffChangeType> = /*@__PURE__*/
enumDesc(file_exa_diff_action_pb_diff_action, 1);
/**
* @generated from enum exa.diff_action_pb.DiffType
*/
export enum DiffType {
/**
* @generated from enum value: DIFF_TYPE_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: DIFF_TYPE_UNIFIED = 1;
*/
UNIFIED = 1,
/**
* @generated from enum value: DIFF_TYPE_CHARACTER = 2;
*/
CHARACTER = 2,
/**
* @generated from enum value: DIFF_TYPE_COMBO = 3;
*/
COMBO = 3,
}
/**
* Describes the enum exa.diff_action_pb.DiffType.
*/
export const DiffTypeSchema: GenEnum<DiffType> = /*@__PURE__*/
enumDesc(file_exa_diff_action_pb_diff_action, 2);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,361 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file exa/prompt_pb/prompt.proto (package exa.prompt_pb, syntax proto3)
/* eslint-disable */
import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { ChatMessage, DeepWikiContext, DeepWikiSymbolContext } from "../chat_pb/chat_pb";
import { file_exa_chat_pb_chat } from "../chat_pb/chat_pb";
import type { CodeDiagnostic, CommandRequestSource, Document, IntellisenseSuggestion, TerminalCommandData, TerminalShellCommand } from "../codeium_common_pb/codeium_common_pb";
import { file_exa_codeium_common_pb_codeium_common } from "../codeium_common_pb/codeium_common_pb";
import type { ContextModuleResult } from "../context_module_pb/context_module_pb";
import { file_exa_context_module_pb_context_module } from "../context_module_pb/context_module_pb";
import type { CortexStepType, CortexTrajectory } from "../cortex_pb/cortex_pb";
import { file_exa_cortex_pb_cortex } from "../cortex_pb/cortex_pb";
import type { HandleStreamingTabV2Response_Diff, HandleStreamingTabV2Response_TabJump } from "../language_server_pb/language_server_pb";
import { file_exa_language_server_pb_language_server } from "../language_server_pb/language_server_pb";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file exa/prompt_pb/prompt.proto.
*/
export const file_exa_prompt_pb_prompt: GenFile = /*@__PURE__*/
fileDesc("ChpleGEvcHJvbXB0X3BiL3Byb21wdC5wcm90bxINZXhhLnByb21wdF9wYiI5Cg5QZW5kaW5nQ29tbWFuZBITCgtpbnN0cnVjdGlvbhgBIAEoCRISCgpjb21wbGV0aW9uGAIgASgJIs4EChFDb21tYW5kSW50ZW50SW5mbxIRCglzZWxlY3Rpb24YASABKAkSEwoLaW5zdHJ1Y3Rpb24YAiABKAkSNwoOaW5wdXRfZG9jdW1lbnQYAyABKAsyHy5leGEuY29kZWl1bV9jb21tb25fcGIuRG9jdW1lbnQSHAoUc2VsZWN0aW9uX3N0YXJ0X2xpbmUYBCABKAQSGgoSc2VsZWN0aW9uX2VuZF9saW5lGAUgASgEEkkKFXRlcm1pbmFsX2NvbW1hbmRfZGF0YRgGIAEoCzIqLmV4YS5jb2RlaXVtX2NvbW1vbl9wYi5UZXJtaW5hbENvbW1hbmREYXRhEkYKEXByZXZpb3VzX2NvbW1hbmRzGAcgAygLMisuZXhhLmNvZGVpdW1fY29tbW9uX3BiLlRlcm1pbmFsU2hlbGxDb21tYW5kEjcKEHBlbmRpbmdfY29tbWFuZHMYCCADKAsyHS5leGEucHJvbXB0X3BiLlBlbmRpbmdDb21tYW5kEkMKDnJlcXVlc3Rfc291cmNlGAkgASgOMisuZXhhLmNvZGVpdW1fY29tbW9uX3BiLkNvbW1hbmRSZXF1ZXN0U291cmNlEkoKE2ludGVsbGlzZW5zZV9wcm9tcHQYCiADKAsyLS5leGEuY29kZWl1bV9jb21tb25fcGIuSW50ZWxsaXNlbnNlU3VnZ2VzdGlvbhJBChJkaWFnbm9zdGljc19wcm9tcHQYCyADKAsyJS5leGEuY29kZWl1bV9jb21tb25fcGIuQ29kZURpYWdub3N0aWMioAIKFVN1cGVyY29tcGxldGVGZWVkYmFjaxIQCghhY2NlcHRlZBgBIAEoCBIaChJpbnRlbnRpb25hbF9yZWplY3QYAiABKAgSFQoNY29tcGxldGlvbl9pZBgDIAEoCRIUCgx0aW1lc3RhbXBfbXMYBCABKAMSUgoPZGlmZl9zdWdnZXN0aW9uGAUgASgLMjkuZXhhLmxhbmd1YWdlX3NlcnZlcl9wYi5IYW5kbGVTdHJlYW1pbmdUYWJWMlJlc3BvbnNlLkRpZmYSWAoSdGFianVtcF9zdWdnZXN0aW9uGAYgASgLMjwuZXhhLmxhbmd1YWdlX3NlcnZlcl9wYi5IYW5kbGVTdHJlYW1pbmdUYWJWMlJlc3BvbnNlLlRhYkp1bXAiVgocU3VwZXJjb21wbGV0ZUZlZWRiYWNrQ29udGV4dBI2CghmZWVkYmFjaxgBIAMoCzIkLmV4YS5wcm9tcHRfcGIuU3VwZXJjb21wbGV0ZUZlZWRiYWNrIrUFChdVbmlmaWVkUHJvbXB0Q29tcG9uZW50cxJJChVjb250ZXh0X21vZHVsZV9yZXN1bHQYAiABKAsyKi5leGEuY29udGV4dF9tb2R1bGVfcGIuQ29udGV4dE1vZHVsZVJlc3VsdBI6ChFjb3J0ZXhfdHJhamVjdG9yeRgDIAEoCzIfLmV4YS5jb3J0ZXhfcGIuQ29ydGV4VHJhamVjdG9yeRI9ChNjb21tYW5kX2ludGVudF9pbmZvGAQgASgLMiAuZXhhLnByb21wdF9wYi5Db21tYW5kSW50ZW50SW5mbxIvCg1jaGF0X21lc3NhZ2VzGAEgAygLMhguZXhhLmNoYXRfcGIuQ2hhdE1lc3NhZ2USPwoQY29kZV9kaWFnbm9zdGljcxgFIAMoCzIlLmV4YS5jb2RlaXVtX2NvbW1vbl9wYi5Db2RlRGlhZ25vc3RpYxI4Cg9vdGhlcl9kb2N1bWVudHMYCSADKAsyHy5leGEuY29kZWl1bV9jb21tb25fcGIuRG9jdW1lbnQSQQoRZGVlcF93aWtpX2NvbnRleHQYCiABKAsyIi5leGEuY2hhdF9wYi5EZWVwV2lraVN5bWJvbENvbnRleHRCAhgBEjoKFGRlZXBfd2lraV9jb250ZXh0X3YyGAsgASgLMhwuZXhhLmNoYXRfcGIuRGVlcFdpa2lDb250ZXh0ElMKHnN1cGVyY29tcGxldGVfZmVlZGJhY2tfY29udGV4dBgMIAEoCzIrLmV4YS5wcm9tcHRfcGIuU3VwZXJjb21wbGV0ZUZlZWRiYWNrQ29udGV4dEoECAYQB0oECAcQCEoECAgQCVIVa25vd2xlZGdlX2Jhc2VfcmVzdWx0UhRrbm93bGVkZ2VfYmFzZV9pdGVtc1IVa25vd2xlZGdlX2Jhc2VfZ3JvdXBzIjsKHlN5c3RlbVByb21wdENvbnN0cnVjdGlvbkNvbmZpZxIZChFlbGVtZW50X3NlcGFyYXRvchgBIAEoCSJUChhDb21tYW5kUHJvbXB0Q2FjaGVDb25maWcSGQoRbWF4X3RyYWNrZWRfZmlsZXMYASABKAMSHQoVbWF4X2NhY2hlX2FnZV9zZWNvbmRzGAIgASgDItYHChZDdW11bGF0aXZlUHJvbXB0Q29uZmlnEiUKHXBlcnNpc3RlbnRfY29udGV4dF9tdWx0aXBsaWVyGAcgASgCEi0KJXBlcnNpc3RlbnRfYWN0aXZlX2RvY3VtZW50X211bHRpcGxpZXIYCiABKAISJwofcGVyc2lzdGVudF9vcGVuX2RvY3NfbXVsdGlwbGllchgLIAEoAhIqCiJwZXJzaXN0ZW50X21heF90b2tlbnNfcGVyX29wZW5fZG9jGBEgASgDEiYKHnBlcnNpc3RlbnRfbWF4X2NjaXNfY29uc2lkZXJlZBgMIAEoAxInCh9wZXJzaXN0ZW50X2RvY3VtZW50X3N1ZmZpeF9mcmFjGBQgASgCEiUKHXRyYWplY3RvcnlfY29udGV4dF9tdWx0aXBsaWVyGAIgASgCEi8KJ3RyYWplY3RvcnlfcmVmcmVzaF90aHJlc2hvbGRfbXVsdGlwbGllchgPIAEoAhIoCiB0cmFqZWN0b3J5X3RydW5jYXRpb25fbXVsdGlwbGllchgQIAEoAhIkChxlcGhlbWVyYWxfY29udGV4dF9tdWx0aXBsaWVyGAkgASgCEiEKGWludGVudF9yZXNlcnZhdGlvbl90b2tlbnMYBiABKAMSLAokZXBoZW1lcmFsX2FjdGl2ZV9kb2N1bWVudF9tdWx0aXBsaWVyGA0gASgCEiUKHWVwaGVtZXJhbF9tYXhfY2Npc19jb25zaWRlcmVkGA4gASgDEiYKHmVwaGVtZXJhbF9kb2N1bWVudF9zdWZmaXhfZnJhYxgVIAEoAhJBChphbGxvd2VkX2Nhc2NhZGVfc3RlcF90eXBlcxgSIAMoDjIdLmV4YS5jb3J0ZXhfcGIuQ29ydGV4U3RlcFR5cGUSaAobYWxsb3dlZF9pbXBsaWNpdF9zdGVwX3R5cGVzGBYgAygLMkMuZXhhLnByb21wdF9wYi5DdW11bGF0aXZlUHJvbXB0Q29uZmlnLkFsbG93ZWRJbXBsaWNpdFN0ZXBUeXBlc0VudHJ5Gj8KHUFsbG93ZWRJbXBsaWNpdFN0ZXBUeXBlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCDoCOAFKBAgBEAJKBAgDEARKBAgEEAVKBAgFEAZSImFjdGl2ZV9kb2N1bWVudF9jb250ZXh0X211bHRpcGxpZXJSH2NvbnRleHRfaXRlbV9jb250ZXh0X211bHRpcGxpZXJSGGNhY2hlX2NvbnRleHRfbXVsdGlwbGllclITbWF4X2NjaXNfY29uc2lkZXJlZGIGcHJvdG8z", [file_exa_chat_pb_chat, file_exa_codeium_common_pb_codeium_common, file_exa_context_module_pb_context_module, file_exa_cortex_pb_cortex, file_exa_language_server_pb_language_server]);
/**
* @generated from message exa.prompt_pb.PendingCommand
*/
export type PendingCommand = Message<"exa.prompt_pb.PendingCommand"> & {
/**
* @generated from field: string instruction = 1;
*/
instruction: string;
/**
* @generated from field: string completion = 2;
*/
completion: string;
};
/**
* Describes the message exa.prompt_pb.PendingCommand.
* Use `create(PendingCommandSchema)` to create a new message.
*/
export const PendingCommandSchema: GenMessage<PendingCommand> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 0);
/**
* @generated from message exa.prompt_pb.CommandIntentInfo
*/
export type CommandIntentInfo = Message<"exa.prompt_pb.CommandIntentInfo"> & {
/**
* @generated from field: string selection = 1;
*/
selection: string;
/**
* @generated from field: string instruction = 2;
*/
instruction: string;
/**
* @generated from field: exa.codeium_common_pb.Document input_document = 3;
*/
inputDocument?: Document | undefined;
/**
* @generated from field: uint64 selection_start_line = 4;
*/
selectionStartLine: bigint;
/**
* @generated from field: uint64 selection_end_line = 5;
*/
selectionEndLine: bigint;
/**
* @generated from field: exa.codeium_common_pb.TerminalCommandData terminal_command_data = 6;
*/
terminalCommandData?: TerminalCommandData | undefined;
/**
* @generated from field: repeated exa.codeium_common_pb.TerminalShellCommand previous_commands = 7;
*/
previousCommands: TerminalShellCommand[];
/**
* @generated from field: repeated exa.prompt_pb.PendingCommand pending_commands = 8;
*/
pendingCommands: PendingCommand[];
/**
* @generated from field: exa.codeium_common_pb.CommandRequestSource request_source = 9;
*/
requestSource: CommandRequestSource;
/**
* @generated from field: repeated exa.codeium_common_pb.IntellisenseSuggestion intellisense_prompt = 10;
*/
intellisensePrompt: IntellisenseSuggestion[];
/**
* @generated from field: repeated exa.codeium_common_pb.CodeDiagnostic diagnostics_prompt = 11;
*/
diagnosticsPrompt: CodeDiagnostic[];
};
/**
* Describes the message exa.prompt_pb.CommandIntentInfo.
* Use `create(CommandIntentInfoSchema)` to create a new message.
*/
export const CommandIntentInfoSchema: GenMessage<CommandIntentInfo> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 1);
/**
* @generated from message exa.prompt_pb.SupercompleteFeedback
*/
export type SupercompleteFeedback = Message<"exa.prompt_pb.SupercompleteFeedback"> & {
/**
* @generated from field: bool accepted = 1;
*/
accepted: boolean;
/**
* @generated from field: bool intentional_reject = 2;
*/
intentionalReject: boolean;
/**
* @generated from field: string completion_id = 3;
*/
completionId: string;
/**
* @generated from field: int64 timestamp_ms = 4;
*/
timestampMs: bigint;
/**
* @generated from field: exa.language_server_pb.HandleStreamingTabV2Response.Diff diff_suggestion = 5;
*/
diffSuggestion?: HandleStreamingTabV2Response_Diff | undefined;
/**
* @generated from field: exa.language_server_pb.HandleStreamingTabV2Response.TabJump tabjump_suggestion = 6;
*/
tabjumpSuggestion?: HandleStreamingTabV2Response_TabJump | undefined;
};
/**
* Describes the message exa.prompt_pb.SupercompleteFeedback.
* Use `create(SupercompleteFeedbackSchema)` to create a new message.
*/
export const SupercompleteFeedbackSchema: GenMessage<SupercompleteFeedback> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 2);
/**
* @generated from message exa.prompt_pb.SupercompleteFeedbackContext
*/
export type SupercompleteFeedbackContext = Message<"exa.prompt_pb.SupercompleteFeedbackContext"> & {
/**
* @generated from field: repeated exa.prompt_pb.SupercompleteFeedback feedback = 1;
*/
feedback: SupercompleteFeedback[];
};
/**
* Describes the message exa.prompt_pb.SupercompleteFeedbackContext.
* Use `create(SupercompleteFeedbackContextSchema)` to create a new message.
*/
export const SupercompleteFeedbackContextSchema: GenMessage<SupercompleteFeedbackContext> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 3);
/**
* @generated from message exa.prompt_pb.UnifiedPromptComponents
*/
export type UnifiedPromptComponents = Message<"exa.prompt_pb.UnifiedPromptComponents"> & {
/**
* @generated from field: exa.context_module_pb.ContextModuleResult context_module_result = 2;
*/
contextModuleResult?: ContextModuleResult | undefined;
/**
* @generated from field: exa.cortex_pb.CortexTrajectory cortex_trajectory = 3;
*/
cortexTrajectory?: CortexTrajectory | undefined;
/**
* @generated from field: exa.prompt_pb.CommandIntentInfo command_intent_info = 4;
*/
commandIntentInfo?: CommandIntentInfo | undefined;
/**
* @generated from field: repeated exa.chat_pb.ChatMessage chat_messages = 1;
*/
chatMessages: ChatMessage[];
/**
* @generated from field: repeated exa.codeium_common_pb.CodeDiagnostic code_diagnostics = 5;
*/
codeDiagnostics: CodeDiagnostic[];
/**
* @generated from field: repeated exa.codeium_common_pb.Document other_documents = 9;
*/
otherDocuments: Document[];
/**
* @generated from field: exa.chat_pb.DeepWikiSymbolContext deep_wiki_context = 10 [deprecated = true];
* @deprecated
*/
deepWikiContext?: DeepWikiSymbolContext | undefined;
/**
* @generated from field: exa.chat_pb.DeepWikiContext deep_wiki_context_v2 = 11;
*/
deepWikiContextV2?: DeepWikiContext | undefined;
/**
* @generated from field: exa.prompt_pb.SupercompleteFeedbackContext supercomplete_feedback_context = 12;
*/
supercompleteFeedbackContext?: SupercompleteFeedbackContext | undefined;
};
/**
* Describes the message exa.prompt_pb.UnifiedPromptComponents.
* Use `create(UnifiedPromptComponentsSchema)` to create a new message.
*/
export const UnifiedPromptComponentsSchema: GenMessage<UnifiedPromptComponents> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 4);
/**
* @generated from message exa.prompt_pb.SystemPromptConstructionConfig
*/
export type SystemPromptConstructionConfig = Message<"exa.prompt_pb.SystemPromptConstructionConfig"> & {
/**
* @generated from field: string element_separator = 1;
*/
elementSeparator: string;
};
/**
* Describes the message exa.prompt_pb.SystemPromptConstructionConfig.
* Use `create(SystemPromptConstructionConfigSchema)` to create a new message.
*/
export const SystemPromptConstructionConfigSchema: GenMessage<SystemPromptConstructionConfig> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 5);
/**
* @generated from message exa.prompt_pb.CommandPromptCacheConfig
*/
export type CommandPromptCacheConfig = Message<"exa.prompt_pb.CommandPromptCacheConfig"> & {
/**
* @generated from field: int64 max_tracked_files = 1;
*/
maxTrackedFiles: bigint;
/**
* @generated from field: int64 max_cache_age_seconds = 2;
*/
maxCacheAgeSeconds: bigint;
};
/**
* Describes the message exa.prompt_pb.CommandPromptCacheConfig.
* Use `create(CommandPromptCacheConfigSchema)` to create a new message.
*/
export const CommandPromptCacheConfigSchema: GenMessage<CommandPromptCacheConfig> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 6);
/**
* @generated from message exa.prompt_pb.CumulativePromptConfig
*/
export type CumulativePromptConfig = Message<"exa.prompt_pb.CumulativePromptConfig"> & {
/**
* @generated from field: float persistent_context_multiplier = 7;
*/
persistentContextMultiplier: number;
/**
* @generated from field: float persistent_active_document_multiplier = 10;
*/
persistentActiveDocumentMultiplier: number;
/**
* @generated from field: float persistent_open_docs_multiplier = 11;
*/
persistentOpenDocsMultiplier: number;
/**
* @generated from field: int64 persistent_max_tokens_per_open_doc = 17;
*/
persistentMaxTokensPerOpenDoc: bigint;
/**
* @generated from field: int64 persistent_max_ccis_considered = 12;
*/
persistentMaxCcisConsidered: bigint;
/**
* @generated from field: float persistent_document_suffix_frac = 20;
*/
persistentDocumentSuffixFrac: number;
/**
* @generated from field: float trajectory_context_multiplier = 2;
*/
trajectoryContextMultiplier: number;
/**
* @generated from field: float trajectory_refresh_threshold_multiplier = 15;
*/
trajectoryRefreshThresholdMultiplier: number;
/**
* @generated from field: float trajectory_truncation_multiplier = 16;
*/
trajectoryTruncationMultiplier: number;
/**
* @generated from field: float ephemeral_context_multiplier = 9;
*/
ephemeralContextMultiplier: number;
/**
* @generated from field: int64 intent_reservation_tokens = 6;
*/
intentReservationTokens: bigint;
/**
* @generated from field: float ephemeral_active_document_multiplier = 13;
*/
ephemeralActiveDocumentMultiplier: number;
/**
* @generated from field: int64 ephemeral_max_ccis_considered = 14;
*/
ephemeralMaxCcisConsidered: bigint;
/**
* @generated from field: float ephemeral_document_suffix_frac = 21;
*/
ephemeralDocumentSuffixFrac: number;
/**
* @generated from field: repeated exa.cortex_pb.CortexStepType allowed_cascade_step_types = 18;
*/
allowedCascadeStepTypes: CortexStepType[];
/**
* @generated from field: map<string, bool> allowed_implicit_step_types = 22;
*/
allowedImplicitStepTypes: { [key: string]: boolean };
};
/**
* Describes the message exa.prompt_pb.CumulativePromptConfig.
* Use `create(CumulativePromptConfigSchema)` to create a new message.
*/
export const CumulativePromptConfigSchema: GenMessage<CumulativePromptConfig> = /*@__PURE__*/
messageDesc(file_exa_prompt_pb_prompt, 7);
@@ -0,0 +1,450 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file exa/reactive_component_pb/reactive_component.proto (package exa.reactive_component_pb, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file exa/reactive_component_pb/reactive_component.proto.
*/
export const file_exa_reactive_component_pb_reactive_component: GenFile = /*@__PURE__*/
fileDesc("CjJleGEvcmVhY3RpdmVfY29tcG9uZW50X3BiL3JlYWN0aXZlX2NvbXBvbmVudC5wcm90bxIZZXhhLnJlYWN0aXZlX2NvbXBvbmVudF9wYiJEChxTdHJlYW1SZWFjdGl2ZVVwZGF0ZXNSZXF1ZXN0EhgKEHByb3RvY29sX3ZlcnNpb24YASABKA0SCgoCaWQYAiABKAkiegodU3RyZWFtUmVhY3RpdmVVcGRhdGVzUmVzcG9uc2USDwoHdmVyc2lvbhgBIAEoBBI0CgRkaWZmGAIgASgLMiYuZXhhLnJlYWN0aXZlX2NvbXBvbmVudF9wYi5NZXNzYWdlRGlmZhISCgpmdWxsX3N0YXRlGAMgASgMIqEBCglUZXN0UHJvdG8SDwoHY291bnRlchgBIAEoBRIOCgZ2YWx1ZXMYAiADKAUSNAoGbmVzdGVkGAMgASgLMiQuZXhhLnJlYWN0aXZlX2NvbXBvbmVudF9wYi5UZXN0UHJvdG8SPQoPbmVzdGVkX3JlcGVhdGVkGAQgAygLMiQuZXhhLnJlYWN0aXZlX2NvbXBvbmVudF9wYi5UZXN0UHJvdG8iSAoLTWVzc2FnZURpZmYSOQoLZmllbGRfZGlmZnMYASADKAsyJC5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLkZpZWxkRGlmZiL9AQoJRmllbGREaWZmEhQKDGZpZWxkX251bWJlchgBIAEoDRJDCg91cGRhdGVfc2luZ3VsYXIYAiABKAsyKC5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLlNpbmd1bGFyVmFsdWVIABJCCg91cGRhdGVfcmVwZWF0ZWQYAyABKAsyJy5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLlJlcGVhdGVkRGlmZkgAEjgKCnVwZGF0ZV9tYXAYBCABKAsyIi5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLk1hcERpZmZIABIPCgVjbGVhchgFIAEoCEgAQgYKBGRpZmYiewoMUmVwZWF0ZWREaWZmEhIKCm5ld19sZW5ndGgYASABKA0SPwoNdXBkYXRlX3ZhbHVlcxgCIAMoCzIoLmV4YS5yZWFjdGl2ZV9jb21wb25lbnRfcGIuU2luZ3VsYXJWYWx1ZRIWCg51cGRhdGVfaW5kaWNlcxgDIAMoDSJHCgdNYXBEaWZmEjwKDW1hcF9rZXlfZGlmZnMYASADKAsyJS5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLk1hcEtleURpZmYipQEKCk1hcEtleURpZmYSOQoHbWFwX2tleRgBIAEoCzIoLmV4YS5yZWFjdGl2ZV9jb21wb25lbnRfcGIuU2luZ3VsYXJWYWx1ZRJDCg91cGRhdGVfc2luZ3VsYXIYAiABKAsyKC5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLlNpbmd1bGFyVmFsdWVIABIPCgVjbGVhchgDIAEoCEgAQgYKBGRpZmYi1wMKDVNpbmd1bGFyVmFsdWUSFgoMZG91YmxlX3ZhbHVlGAEgASgBSAASFQoLZmxvYXRfdmFsdWUYAiABKAJIABIVCgtpbnQzMl92YWx1ZRgDIAEoBUgAEhUKC2ludDY0X3ZhbHVlGAQgASgDSAASFgoMdWludDMyX3ZhbHVlGAUgASgNSAASFgoMdWludDY0X3ZhbHVlGAYgASgESAASFgoMc2ludDMyX3ZhbHVlGAcgASgRSAASFgoMc2ludDY0X3ZhbHVlGAggASgSSAASFwoNZml4ZWQzMl92YWx1ZRgJIAEoB0gAEhcKDWZpeGVkNjRfdmFsdWUYCiABKAZIABIYCg5zZml4ZWQzMl92YWx1ZRgLIAEoD0gAEhgKDnNmaXhlZDY0X3ZhbHVlGAwgASgQSAASFAoKYm9vbF92YWx1ZRgNIAEoCEgAEhQKCmVudW1fdmFsdWUYDiABKA1IABIWCgxzdHJpbmdfdmFsdWUYDyABKAlIABIVCgtieXRlc192YWx1ZRgQIAEoDEgAEj8KDW1lc3NhZ2VfdmFsdWUYESABKAsyJi5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLk1lc3NhZ2VEaWZmSABCBwoFdmFsdWUiiAYKDVRlc3REaWZmUHJvdG8SHQoVc2luZ3VsYXJfc2NhbGFyX3ZhbHVlGAEgASgBEkQKFnNpbmd1bGFyX21lc3NhZ2VfdmFsdWUYAiABKAsyJC5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLlRlc3RQcm90bxIiChVvcHRpb25hbF9zY2FsYXJfdmFsdWUYCiABKAFIAYgBARIdChVyZXBlYXRlZF9zY2FsYXJfdmFsdWUYAyADKAESRAoWcmVwZWF0ZWRfbWVzc2FnZV92YWx1ZRgEIAMoCzIkLmV4YS5yZWFjdGl2ZV9jb21wb25lbnRfcGIuVGVzdFByb3RvElYKEG1hcF9zY2FsYXJfdmFsdWUYBSADKAsyPC5leGEucmVhY3RpdmVfY29tcG9uZW50X3BiLlRlc3REaWZmUHJvdG8uTWFwU2NhbGFyVmFsdWVFbnRyeRJYChFtYXBfbWVzc2FnZV92YWx1ZRgGIAMoCzI9LmV4YS5yZWFjdGl2ZV9jb21wb25lbnRfcGIuVGVzdERpZmZQcm90by5NYXBNZXNzYWdlVmFsdWVFbnRyeRIcChJvbmVvZl9zY2FsYXJfdmFsdWUYByABKAFIABJDChNvbmVvZl9tZXNzYWdlX3ZhbHVlGAggASgLMiQuZXhhLnJlYWN0aXZlX2NvbXBvbmVudF9wYi5UZXN0UHJvdG9IABI3CgplbnVtX3ZhbHVlGAkgASgOMiMuZXhhLnJlYWN0aXZlX2NvbXBvbmVudF9wYi5UZXN0RW51bRo1ChNNYXBTY2FsYXJWYWx1ZUVudHJ5EgsKA2tleRgBIAEoBRINCgV2YWx1ZRgCIAEoAToCOAEaXAoUTWFwTWVzc2FnZVZhbHVlRW50cnkSCwoDa2V5GAEgASgJEjMKBXZhbHVlGAIgASgLMiQuZXhhLnJlYWN0aXZlX2NvbXBvbmVudF9wYi5UZXN0UHJvdG86AjgBQgwKCm9uZW9mX3Rlc3RCGAoWX29wdGlvbmFsX3NjYWxhcl92YWx1ZSpLCghUZXN0RW51bRIZChVURVNUX0VOVU1fVU5TUEVDSUZJRUQQABIRCg1URVNUX0VOVU1fT05FEAESEQoNVEVTVF9FTlVNX1RXTxACYgZwcm90bzM");
/**
* @generated from message exa.reactive_component_pb.StreamReactiveUpdatesRequest
*/
export type StreamReactiveUpdatesRequest = Message<"exa.reactive_component_pb.StreamReactiveUpdatesRequest"> & {
/**
* @generated from field: uint32 protocol_version = 1;
*/
protocolVersion: number;
/**
* @generated from field: string id = 2;
*/
id: string;
};
/**
* Describes the message exa.reactive_component_pb.StreamReactiveUpdatesRequest.
* Use `create(StreamReactiveUpdatesRequestSchema)` to create a new message.
*/
export const StreamReactiveUpdatesRequestSchema: GenMessage<StreamReactiveUpdatesRequest> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 0);
/**
* @generated from message exa.reactive_component_pb.StreamReactiveUpdatesResponse
*/
export type StreamReactiveUpdatesResponse = Message<"exa.reactive_component_pb.StreamReactiveUpdatesResponse"> & {
/**
* @generated from field: uint64 version = 1;
*/
version: bigint;
/**
* @generated from field: exa.reactive_component_pb.MessageDiff diff = 2;
*/
diff?: MessageDiff | undefined;
/**
* @generated from field: bytes full_state = 3;
*/
fullState: Uint8Array;
};
/**
* Describes the message exa.reactive_component_pb.StreamReactiveUpdatesResponse.
* Use `create(StreamReactiveUpdatesResponseSchema)` to create a new message.
*/
export const StreamReactiveUpdatesResponseSchema: GenMessage<StreamReactiveUpdatesResponse> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 1);
/**
* @generated from message exa.reactive_component_pb.TestProto
*/
export type TestProto = Message<"exa.reactive_component_pb.TestProto"> & {
/**
* @generated from field: int32 counter = 1;
*/
counter: number;
/**
* @generated from field: repeated int32 values = 2;
*/
values: number[];
/**
* @generated from field: exa.reactive_component_pb.TestProto nested = 3;
*/
nested?: TestProto | undefined;
/**
* @generated from field: repeated exa.reactive_component_pb.TestProto nested_repeated = 4;
*/
nestedRepeated: TestProto[];
};
/**
* Describes the message exa.reactive_component_pb.TestProto.
* Use `create(TestProtoSchema)` to create a new message.
*/
export const TestProtoSchema: GenMessage<TestProto> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 2);
/**
* @generated from message exa.reactive_component_pb.MessageDiff
*/
export type MessageDiff = Message<"exa.reactive_component_pb.MessageDiff"> & {
/**
* @generated from field: repeated exa.reactive_component_pb.FieldDiff field_diffs = 1;
*/
fieldDiffs: FieldDiff[];
};
/**
* Describes the message exa.reactive_component_pb.MessageDiff.
* Use `create(MessageDiffSchema)` to create a new message.
*/
export const MessageDiffSchema: GenMessage<MessageDiff> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 3);
/**
* @generated from message exa.reactive_component_pb.FieldDiff
*/
export type FieldDiff = Message<"exa.reactive_component_pb.FieldDiff"> & {
/**
* @generated from field: uint32 field_number = 1;
*/
fieldNumber: number;
/**
* @generated from oneof exa.reactive_component_pb.FieldDiff.diff
*/
diff: {
/**
* @generated from field: exa.reactive_component_pb.SingularValue update_singular = 2;
*/
value: SingularValue;
case: "updateSingular";
} | {
/**
* @generated from field: exa.reactive_component_pb.RepeatedDiff update_repeated = 3;
*/
value: RepeatedDiff;
case: "updateRepeated";
} | {
/**
* @generated from field: exa.reactive_component_pb.MapDiff update_map = 4;
*/
value: MapDiff;
case: "updateMap";
} | {
/**
* @generated from field: bool clear = 5;
*/
value: boolean;
case: "clear";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message exa.reactive_component_pb.FieldDiff.
* Use `create(FieldDiffSchema)` to create a new message.
*/
export const FieldDiffSchema: GenMessage<FieldDiff> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 4);
/**
* @generated from message exa.reactive_component_pb.RepeatedDiff
*/
export type RepeatedDiff = Message<"exa.reactive_component_pb.RepeatedDiff"> & {
/**
* @generated from field: uint32 new_length = 1;
*/
newLength: number;
/**
* @generated from field: repeated exa.reactive_component_pb.SingularValue update_values = 2;
*/
updateValues: SingularValue[];
/**
* @generated from field: repeated uint32 update_indices = 3;
*/
updateIndices: number[];
};
/**
* Describes the message exa.reactive_component_pb.RepeatedDiff.
* Use `create(RepeatedDiffSchema)` to create a new message.
*/
export const RepeatedDiffSchema: GenMessage<RepeatedDiff> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 5);
/**
* @generated from message exa.reactive_component_pb.MapDiff
*/
export type MapDiff = Message<"exa.reactive_component_pb.MapDiff"> & {
/**
* @generated from field: repeated exa.reactive_component_pb.MapKeyDiff map_key_diffs = 1;
*/
mapKeyDiffs: MapKeyDiff[];
};
/**
* Describes the message exa.reactive_component_pb.MapDiff.
* Use `create(MapDiffSchema)` to create a new message.
*/
export const MapDiffSchema: GenMessage<MapDiff> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 6);
/**
* @generated from message exa.reactive_component_pb.MapKeyDiff
*/
export type MapKeyDiff = Message<"exa.reactive_component_pb.MapKeyDiff"> & {
/**
* @generated from field: exa.reactive_component_pb.SingularValue map_key = 1;
*/
mapKey?: SingularValue | undefined;
/**
* @generated from oneof exa.reactive_component_pb.MapKeyDiff.diff
*/
diff: {
/**
* @generated from field: exa.reactive_component_pb.SingularValue update_singular = 2;
*/
value: SingularValue;
case: "updateSingular";
} | {
/**
* @generated from field: bool clear = 3;
*/
value: boolean;
case: "clear";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message exa.reactive_component_pb.MapKeyDiff.
* Use `create(MapKeyDiffSchema)` to create a new message.
*/
export const MapKeyDiffSchema: GenMessage<MapKeyDiff> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 7);
/**
* @generated from message exa.reactive_component_pb.SingularValue
*/
export type SingularValue = Message<"exa.reactive_component_pb.SingularValue"> & {
/**
* @generated from oneof exa.reactive_component_pb.SingularValue.value
*/
value: {
/**
* @generated from field: double double_value = 1;
*/
value: number;
case: "doubleValue";
} | {
/**
* @generated from field: float float_value = 2;
*/
value: number;
case: "floatValue";
} | {
/**
* @generated from field: int32 int32_value = 3;
*/
value: number;
case: "int32Value";
} | {
/**
* @generated from field: int64 int64_value = 4;
*/
value: bigint;
case: "int64Value";
} | {
/**
* @generated from field: uint32 uint32_value = 5;
*/
value: number;
case: "uint32Value";
} | {
/**
* @generated from field: uint64 uint64_value = 6;
*/
value: bigint;
case: "uint64Value";
} | {
/**
* @generated from field: sint32 sint32_value = 7;
*/
value: number;
case: "sint32Value";
} | {
/**
* @generated from field: sint64 sint64_value = 8;
*/
value: bigint;
case: "sint64Value";
} | {
/**
* @generated from field: fixed32 fixed32_value = 9;
*/
value: number;
case: "fixed32Value";
} | {
/**
* @generated from field: fixed64 fixed64_value = 10;
*/
value: bigint;
case: "fixed64Value";
} | {
/**
* @generated from field: sfixed32 sfixed32_value = 11;
*/
value: number;
case: "sfixed32Value";
} | {
/**
* @generated from field: sfixed64 sfixed64_value = 12;
*/
value: bigint;
case: "sfixed64Value";
} | {
/**
* @generated from field: bool bool_value = 13;
*/
value: boolean;
case: "boolValue";
} | {
/**
* @generated from field: uint32 enum_value = 14;
*/
value: number;
case: "enumValue";
} | {
/**
* @generated from field: string string_value = 15;
*/
value: string;
case: "stringValue";
} | {
/**
* @generated from field: bytes bytes_value = 16;
*/
value: Uint8Array;
case: "bytesValue";
} | {
/**
* @generated from field: exa.reactive_component_pb.MessageDiff message_value = 17;
*/
value: MessageDiff;
case: "messageValue";
} | { case: undefined; value?: undefined };
};
/**
* Describes the message exa.reactive_component_pb.SingularValue.
* Use `create(SingularValueSchema)` to create a new message.
*/
export const SingularValueSchema: GenMessage<SingularValue> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 8);
/**
* @generated from message exa.reactive_component_pb.TestDiffProto
*/
export type TestDiffProto = Message<"exa.reactive_component_pb.TestDiffProto"> & {
/**
* @generated from field: double singular_scalar_value = 1;
*/
singularScalarValue: number;
/**
* @generated from field: exa.reactive_component_pb.TestProto singular_message_value = 2;
*/
singularMessageValue?: TestProto | undefined;
/**
* @generated from field: optional double optional_scalar_value = 10;
*/
optionalScalarValue?: number | undefined;
/**
* @generated from field: repeated double repeated_scalar_value = 3;
*/
repeatedScalarValue: number[];
/**
* @generated from field: repeated exa.reactive_component_pb.TestProto repeated_message_value = 4;
*/
repeatedMessageValue: TestProto[];
/**
* @generated from field: map<int32, double> map_scalar_value = 5;
*/
mapScalarValue: { [key: number]: number };
/**
* @generated from field: map<string, exa.reactive_component_pb.TestProto> map_message_value = 6;
*/
mapMessageValue: { [key: string]: TestProto };
/**
* @generated from oneof exa.reactive_component_pb.TestDiffProto.oneof_test
*/
oneofTest: {
/**
* @generated from field: double oneof_scalar_value = 7;
*/
value: number;
case: "oneofScalarValue";
} | {
/**
* @generated from field: exa.reactive_component_pb.TestProto oneof_message_value = 8;
*/
value: TestProto;
case: "oneofMessageValue";
} | { case: undefined; value?: undefined };
/**
* @generated from field: exa.reactive_component_pb.TestEnum enum_value = 9;
*/
enumValue: TestEnum;
};
/**
* Describes the message exa.reactive_component_pb.TestDiffProto.
* Use `create(TestDiffProtoSchema)` to create a new message.
*/
export const TestDiffProtoSchema: GenMessage<TestDiffProto> = /*@__PURE__*/
messageDesc(file_exa_reactive_component_pb_reactive_component, 9);
/**
* @generated from enum exa.reactive_component_pb.TestEnum
*/
export enum TestEnum {
/**
* @generated from enum value: TEST_ENUM_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: TEST_ENUM_ONE = 1;
*/
ONE = 1,
/**
* @generated from enum value: TEST_ENUM_TWO = 2;
*/
TWO = 2,
}
/**
* Describes the enum exa.reactive_component_pb.TestEnum.
*/
export const TestEnumSchema: GenEnum<TestEnum> = /*@__PURE__*/
enumDesc(file_exa_reactive_component_pb_reactive_component, 0);
@@ -0,0 +1,712 @@
// @generated by protoc-gen-es v2.12.0 with parameter "target=ts"
// @generated from file exa/trust_pb/trust.proto (package exa.trust_pb, syntax proto3)
/* eslint-disable */
import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
import type { Timestamp } from "@bufbuild/protobuf/wkt";
import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
import type { Message } from "@bufbuild/protobuf";
/**
* Describes the file exa/trust_pb/trust.proto.
*/
export const file_exa_trust_pb_trust: GenFile = /*@__PURE__*/
fileDesc("ChhleGEvdHJ1c3RfcGIvdHJ1c3QucHJvdG8SDGV4YS50cnVzdF9wYiJhCg9UcnVzdElkZW50aWZpZXISOgoPaWRlbnRpZmllcl90eXBlGAEgASgOMiEuZXhhLnRydXN0X3BiLlRydXN0SWRlbnRpZmllclR5cGUSEgoKaWRlbnRpZmllchgCIAEoCSJPCg1UcnVzdFF1ZXJ5S2V5EjEKCGtleV90eXBlGAEgASgOMh8uZXhhLnRydXN0X3BiLlRydXN0UXVlcnlLZXlUeXBlEgsKA2tleRgCIAEoCSKPBwoKVHJ1c3RFdmVudBIvCgtvYnNlcnZlZF9hdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoGc291cmNlGAMgASgOMh4uZXhhLnRydXN0X3BiLlRydXN0RXZlbnRTb3VyY2USFwoPaWRlbXBvdGVuY3lfa2V5GAQgASgJEi4KB3Vua25vd24YBSABKAsyGy5leGEudHJ1c3RfcGIuVW5rbm93blNpZ25hbEgAEkUKE3Byb3ZpZGVyc19leGhhdXN0ZWQYBiABKAsyJi5leGEudHJ1c3RfcGIuUHJvdmlkZXJzRXhoYXVzdGVkU2lnbmFsSAASSQoWY3Jvc3NfbW9kZWxfcmF0ZV9saW1pdBgHIAEoCzInLmV4YS50cnVzdF9wYi5Dcm9zc01vZGVsUmF0ZUxpbWl0U2lnbmFsSAASOwoOYWNjb3VudF9mYW5vdXQYCCABKAsyIS5leGEudHJ1c3RfcGIuQWNjb3VudEZhbm91dFNpZ25hbEgAEkQKE211bHRpX2lwX3RyYWplY3RvcnkYCSABKAsyJS5leGEudHJ1c3RfcGIuTXVsdGlJcFRyYWplY3RvcnlTaWduYWxIABI0CgtjeWJlcl9hYnVzZRgKIAEoCzIdLmV4YS50cnVzdF9wYi5DeWJlckFidXNlRXZlbnRIABJDChNvcGVuYWlfYmxvY2tlZF91c2VyGAsgASgLMiQuZXhhLnRydXN0X3BiLk9wZW5BSUJsb2NrZWRVc2VyRXZlbnRIABJIChVzdXNwaWNpb3VzX3VzZXJfYWdlbnQYDCABKAsyJy5leGEudHJ1c3RfcGIuU3VzcGljaW91c1VzZXJBZ2VudFNpZ25hbEgAEjcKDG1hbnVhbF90cnVzdBgOIAEoCzIfLmV4YS50cnVzdF9wYi5NYW51YWxUcnVzdFNpZ25hbEgAElAKGWh1bnRlcl9lbWFpbF92ZXJpZmljYXRpb24YESABKAsyKy5leGEudHJ1c3RfcGIuSHVudGVyRW1haWxWZXJpZmljYXRpb25TaWduYWxIABIyCgtpZGVudGlmaWVycxgNIAMoCzIdLmV4YS50cnVzdF9wYi5UcnVzdElkZW50aWZpZXISLgoJcXVlcnlfa2V5GA8gASgLMhsuZXhhLnRydXN0X3BiLlRydXN0UXVlcnlLZXlCCAoGc2lnbmFsSgQIAhADIg8KDVVua25vd25TaWduYWwiswEKGFByb3ZpZGVyc0V4aGF1c3RlZFNpZ25hbBIRCgltb2RlbF91aWQYASABKAkSDAoEdGllchgCIAEoCRIWCg50b3RhbF9hdHRlbXB0cxgDIAEoBRIXCg9sYXN0X2Vycm9yX2NvZGUYBCABKAkSGgoSbGFzdF9lcnJvcl9tZXNzYWdlGAUgASgJEhcKD3Byb3ZpZGVyc190cmllZBgGIAEoBRIQCghhdXRoX3VpZBgHIAEoCSKcAQoZQ3Jvc3NNb2RlbFJhdGVMaW1pdFNpZ25hbBIRCgltb2RlbF91aWQYASABKAkSDAoEdGllchgCIAEoCRINCgVjb3VudBgDIAEoAxINCgVsaW1pdBgEIAEoAxIWCg5wZXJpb2Rfc2Vjb25kcxgFIAEoBRIWCg5lbWFpbF9taXNtYXRjaBgGIAEoCBIQCghhdXRoX3VpZBgHIAEoCSJfChNBY2NvdW50RmFub3V0U2lnbmFsEhAKCGF1dGhfdWlkGAEgASgJEhAKCGlkZW50aXR5GAIgASgJEhIKCmFjY291bnRfaWQYAyABKAkSEAoIaXNfdHJpYWwYBCABKAgilwEKF011bHRpSXBUcmFqZWN0b3J5U2lnbmFsEhAKCGF1dGhfdWlkGAEgASgJEhAKCGlwX2NvdW50GAIgASgDEhEKCXRocmVzaG9sZBgDIAEoAxIWCg53aW5kb3dfc2Vjb25kcxgEIAEoBRIMCgR0aWVyGAUgASgJEg0KBWVtYWlsGAYgASgJEhAKCGVuZm9yY2VkGAcgASgIImoKD0N5YmVyQWJ1c2VFdmVudBIQCghhdXRoX3VpZBgBIAEoCRIQCghwcm92aWRlchgCIAEoCRISCgpldmVudF90eXBlGAMgASgJEhEKCW1vZGVsX3VpZBgEIAEoCRIMCgR0aWVyGAUgASgJIl0KFk9wZW5BSUJsb2NrZWRVc2VyRXZlbnQSEAoIYXV0aF91aWQYASABKAkSEAoIcHJvdmlkZXIYAiABKAkSEQoJbW9kZWxfdWlkGAMgASgJEgwKBHRpZXIYBCABKAkiWQoZU3VzcGljaW91c1VzZXJBZ2VudFNpZ25hbBIQCghhdXRoX3VpZBgBIAEoCRISCgp1c2VyX2FnZW50GAIgASgJEhYKDm1hdGNoZWRfcHJlZml4GAMgASgJIo0BChFNYW51YWxUcnVzdFNpZ25hbBIQCghhdXRoX3VpZBgBIAEoCRIxCgd2ZXJkaWN0GAIgASgOMiAuZXhhLnRydXN0X3BiLk1hbnVhbFRydXN0VmVyZGljdBIPCgdwZXJjZW50GAMgASgFEg4KBnJlYXNvbhgEIAEoCRISCgpmbGFnZ2VkX2J5GAUgASgJIpwCCh1IdW50ZXJFbWFpbFZlcmlmaWNhdGlvblNpZ25hbBINCgVlbWFpbBgBIAEoCRIOCgZyZXN1bHQYAiABKAkSDgoGc3RhdHVzGAMgASgJEg0KBXNjb3JlGAQgASgFEg4KBnJlZ2V4cBgFIAEoCBIRCglnaWJiZXJpc2gYBiABKAgSEgoKZGlzcG9zYWJsZRgHIAEoCBIPCgd3ZWJtYWlsGAggASgIEhIKCm14X3JlY29yZHMYCSABKAgSEwoLc210cF9zZXJ2ZXIYCiABKAgSEgoKc210cF9jaGVjaxgLIAEoCBISCgphY2NlcHRfYWxsGAwgASgIEg0KBWJsb2NrGA0gASgIEhUKDXNvdXJjZXNfY291bnQYDiABKAUiRAoYUmVjb3JkVHJ1c3RFdmVudHNSZXF1ZXN0EigKBmV2ZW50cxgBIAMoCzIYLmV4YS50cnVzdF9wYi5UcnVzdEV2ZW50IhsKGVJlY29yZFRydXN0RXZlbnRzUmVzcG9uc2UqqwEKEFRydXN0RXZlbnRTb3VyY2USIgoeVFJVU1RfRVZFTlRfU09VUkNFX1VOU1BFQ0lGSUVEEAASIQodVFJVU1RfRVZFTlRfU09VUkNFX0FQSV9TRVJWRVIQARImCiJUUlVTVF9FVkVOVF9TT1VSQ0VfREVWSU5fV0VCU0VSVkVSEAISKAokVFJVU1RfRVZFTlRfU09VUkNFX0lOVEVSTkFMX0RFVEVDVE9SEAMqsgEKE1RydXN0SWRlbnRpZmllclR5cGUSJQohVFJVU1RfSURFTlRJRklFUl9UWVBFX1VOU1BFQ0lGSUVEEAASHwobVFJVU1RfSURFTlRJRklFUl9UWVBFX0VNQUlMEAESJwojVFJVU1RfSURFTlRJRklFUl9UWVBFX0RFVklOX1VTRVJfSUQQAhIqCiZUUlVTVF9JREVOVElGSUVSX1RZUEVfREVWSU5fQUNDT1VOVF9JRBADKq8BChFUcnVzdFF1ZXJ5S2V5VHlwZRIkCiBUUlVTVF9RVUVSWV9LRVlfVFlQRV9VTlNQRUNJRklFRBAAEiEKHVRSVVNUX1FVRVJZX0tFWV9UWVBFX0FVVEhfVUlEEAESJgoiVFJVU1RfUVVFUllfS0VZX1RZUEVfREVWSU5fVVNFUl9JRBACEikKJVRSVVNUX1FVRVJZX0tFWV9UWVBFX0RFVklOX0FDQ09VTlRfSUQQAyp9ChJNYW51YWxUcnVzdFZlcmRpY3QSJAogTUFOVUFMX1RSVVNUX1ZFUkRJQ1RfVU5TUEVDSUZJRUQQABIeChpNQU5VQUxfVFJVU1RfVkVSRElDVF9UUlVTVBABEiEKHU1BTlVBTF9UUlVTVF9WRVJESUNUX0RJU1RSVVNUEAJiBnByb3RvMw", [file_google_protobuf_timestamp]);
/**
* @generated from message exa.trust_pb.TrustIdentifier
*/
export type TrustIdentifier = Message<"exa.trust_pb.TrustIdentifier"> & {
/**
* @generated from field: exa.trust_pb.TrustIdentifierType identifier_type = 1;
*/
identifierType: TrustIdentifierType;
/**
* @generated from field: string identifier = 2;
*/
identifier: string;
};
/**
* Describes the message exa.trust_pb.TrustIdentifier.
* Use `create(TrustIdentifierSchema)` to create a new message.
*/
export const TrustIdentifierSchema: GenMessage<TrustIdentifier> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 0);
/**
* @generated from message exa.trust_pb.TrustQueryKey
*/
export type TrustQueryKey = Message<"exa.trust_pb.TrustQueryKey"> & {
/**
* @generated from field: exa.trust_pb.TrustQueryKeyType key_type = 1;
*/
keyType: TrustQueryKeyType;
/**
* @generated from field: string key = 2;
*/
key: string;
};
/**
* Describes the message exa.trust_pb.TrustQueryKey.
* Use `create(TrustQueryKeySchema)` to create a new message.
*/
export const TrustQueryKeySchema: GenMessage<TrustQueryKey> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 1);
/**
* @generated from message exa.trust_pb.TrustEvent
*/
export type TrustEvent = Message<"exa.trust_pb.TrustEvent"> & {
/**
* @generated from field: google.protobuf.Timestamp observed_at = 1;
*/
observedAt?: Timestamp | undefined;
/**
* @generated from field: exa.trust_pb.TrustEventSource source = 3;
*/
source: TrustEventSource;
/**
* @generated from field: string idempotency_key = 4;
*/
idempotencyKey: string;
/**
* @generated from oneof exa.trust_pb.TrustEvent.signal
*/
signal: {
/**
* @generated from field: exa.trust_pb.UnknownSignal unknown = 5;
*/
value: UnknownSignal;
case: "unknown";
} | {
/**
* @generated from field: exa.trust_pb.ProvidersExhaustedSignal providers_exhausted = 6;
*/
value: ProvidersExhaustedSignal;
case: "providersExhausted";
} | {
/**
* @generated from field: exa.trust_pb.CrossModelRateLimitSignal cross_model_rate_limit = 7;
*/
value: CrossModelRateLimitSignal;
case: "crossModelRateLimit";
} | {
/**
* @generated from field: exa.trust_pb.AccountFanoutSignal account_fanout = 8;
*/
value: AccountFanoutSignal;
case: "accountFanout";
} | {
/**
* @generated from field: exa.trust_pb.MultiIpTrajectorySignal multi_ip_trajectory = 9;
*/
value: MultiIpTrajectorySignal;
case: "multiIpTrajectory";
} | {
/**
* @generated from field: exa.trust_pb.CyberAbuseEvent cyber_abuse = 10;
*/
value: CyberAbuseEvent;
case: "cyberAbuse";
} | {
/**
* @generated from field: exa.trust_pb.OpenAIBlockedUserEvent openai_blocked_user = 11;
*/
value: OpenAIBlockedUserEvent;
case: "openaiBlockedUser";
} | {
/**
* @generated from field: exa.trust_pb.SuspiciousUserAgentSignal suspicious_user_agent = 12;
*/
value: SuspiciousUserAgentSignal;
case: "suspiciousUserAgent";
} | {
/**
* @generated from field: exa.trust_pb.ManualTrustSignal manual_trust = 14;
*/
value: ManualTrustSignal;
case: "manualTrust";
} | {
/**
* @generated from field: exa.trust_pb.HunterEmailVerificationSignal hunter_email_verification = 17;
*/
value: HunterEmailVerificationSignal;
case: "hunterEmailVerification";
} | { case: undefined; value?: undefined };
/**
* @generated from field: repeated exa.trust_pb.TrustIdentifier identifiers = 13;
*/
identifiers: TrustIdentifier[];
/**
* @generated from field: exa.trust_pb.TrustQueryKey query_key = 15;
*/
queryKey?: TrustQueryKey | undefined;
};
/**
* Describes the message exa.trust_pb.TrustEvent.
* Use `create(TrustEventSchema)` to create a new message.
*/
export const TrustEventSchema: GenMessage<TrustEvent> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 2);
/**
* @generated from message exa.trust_pb.UnknownSignal
*/
export type UnknownSignal = Message<"exa.trust_pb.UnknownSignal"> & {
};
/**
* Describes the message exa.trust_pb.UnknownSignal.
* Use `create(UnknownSignalSchema)` to create a new message.
*/
export const UnknownSignalSchema: GenMessage<UnknownSignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 3);
/**
* @generated from message exa.trust_pb.ProvidersExhaustedSignal
*/
export type ProvidersExhaustedSignal = Message<"exa.trust_pb.ProvidersExhaustedSignal"> & {
/**
* @generated from field: string model_uid = 1;
*/
modelUid: string;
/**
* @generated from field: string tier = 2;
*/
tier: string;
/**
* @generated from field: int32 total_attempts = 3;
*/
totalAttempts: number;
/**
* @generated from field: string last_error_code = 4;
*/
lastErrorCode: string;
/**
* @generated from field: string last_error_message = 5;
*/
lastErrorMessage: string;
/**
* @generated from field: int32 providers_tried = 6;
*/
providersTried: number;
/**
* @generated from field: string auth_uid = 7;
*/
authUid: string;
};
/**
* Describes the message exa.trust_pb.ProvidersExhaustedSignal.
* Use `create(ProvidersExhaustedSignalSchema)` to create a new message.
*/
export const ProvidersExhaustedSignalSchema: GenMessage<ProvidersExhaustedSignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 4);
/**
* @generated from message exa.trust_pb.CrossModelRateLimitSignal
*/
export type CrossModelRateLimitSignal = Message<"exa.trust_pb.CrossModelRateLimitSignal"> & {
/**
* @generated from field: string model_uid = 1;
*/
modelUid: string;
/**
* @generated from field: string tier = 2;
*/
tier: string;
/**
* @generated from field: int64 count = 3;
*/
count: bigint;
/**
* @generated from field: int64 limit = 4;
*/
limit: bigint;
/**
* @generated from field: int32 period_seconds = 5;
*/
periodSeconds: number;
/**
* @generated from field: bool email_mismatch = 6;
*/
emailMismatch: boolean;
/**
* @generated from field: string auth_uid = 7;
*/
authUid: string;
};
/**
* Describes the message exa.trust_pb.CrossModelRateLimitSignal.
* Use `create(CrossModelRateLimitSignalSchema)` to create a new message.
*/
export const CrossModelRateLimitSignalSchema: GenMessage<CrossModelRateLimitSignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 5);
/**
* @generated from message exa.trust_pb.AccountFanoutSignal
*/
export type AccountFanoutSignal = Message<"exa.trust_pb.AccountFanoutSignal"> & {
/**
* @generated from field: string auth_uid = 1;
*/
authUid: string;
/**
* @generated from field: string identity = 2;
*/
identity: string;
/**
* @generated from field: string account_id = 3;
*/
accountId: string;
/**
* @generated from field: bool is_trial = 4;
*/
isTrial: boolean;
};
/**
* Describes the message exa.trust_pb.AccountFanoutSignal.
* Use `create(AccountFanoutSignalSchema)` to create a new message.
*/
export const AccountFanoutSignalSchema: GenMessage<AccountFanoutSignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 6);
/**
* @generated from message exa.trust_pb.MultiIpTrajectorySignal
*/
export type MultiIpTrajectorySignal = Message<"exa.trust_pb.MultiIpTrajectorySignal"> & {
/**
* @generated from field: string auth_uid = 1;
*/
authUid: string;
/**
* @generated from field: int64 ip_count = 2;
*/
ipCount: bigint;
/**
* @generated from field: int64 threshold = 3;
*/
threshold: bigint;
/**
* @generated from field: int32 window_seconds = 4;
*/
windowSeconds: number;
/**
* @generated from field: string tier = 5;
*/
tier: string;
/**
* @generated from field: string email = 6;
*/
email: string;
/**
* @generated from field: bool enforced = 7;
*/
enforced: boolean;
};
/**
* Describes the message exa.trust_pb.MultiIpTrajectorySignal.
* Use `create(MultiIpTrajectorySignalSchema)` to create a new message.
*/
export const MultiIpTrajectorySignalSchema: GenMessage<MultiIpTrajectorySignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 7);
/**
* @generated from message exa.trust_pb.CyberAbuseEvent
*/
export type CyberAbuseEvent = Message<"exa.trust_pb.CyberAbuseEvent"> & {
/**
* @generated from field: string auth_uid = 1;
*/
authUid: string;
/**
* @generated from field: string provider = 2;
*/
provider: string;
/**
* @generated from field: string event_type = 3;
*/
eventType: string;
/**
* @generated from field: string model_uid = 4;
*/
modelUid: string;
/**
* @generated from field: string tier = 5;
*/
tier: string;
};
/**
* Describes the message exa.trust_pb.CyberAbuseEvent.
* Use `create(CyberAbuseEventSchema)` to create a new message.
*/
export const CyberAbuseEventSchema: GenMessage<CyberAbuseEvent> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 8);
/**
* @generated from message exa.trust_pb.OpenAIBlockedUserEvent
*/
export type OpenAIBlockedUserEvent = Message<"exa.trust_pb.OpenAIBlockedUserEvent"> & {
/**
* @generated from field: string auth_uid = 1;
*/
authUid: string;
/**
* @generated from field: string provider = 2;
*/
provider: string;
/**
* @generated from field: string model_uid = 3;
*/
modelUid: string;
/**
* @generated from field: string tier = 4;
*/
tier: string;
};
/**
* Describes the message exa.trust_pb.OpenAIBlockedUserEvent.
* Use `create(OpenAIBlockedUserEventSchema)` to create a new message.
*/
export const OpenAIBlockedUserEventSchema: GenMessage<OpenAIBlockedUserEvent> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 9);
/**
* @generated from message exa.trust_pb.SuspiciousUserAgentSignal
*/
export type SuspiciousUserAgentSignal = Message<"exa.trust_pb.SuspiciousUserAgentSignal"> & {
/**
* @generated from field: string auth_uid = 1;
*/
authUid: string;
/**
* @generated from field: string user_agent = 2;
*/
userAgent: string;
/**
* @generated from field: string matched_prefix = 3;
*/
matchedPrefix: string;
};
/**
* Describes the message exa.trust_pb.SuspiciousUserAgentSignal.
* Use `create(SuspiciousUserAgentSignalSchema)` to create a new message.
*/
export const SuspiciousUserAgentSignalSchema: GenMessage<SuspiciousUserAgentSignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 10);
/**
* @generated from message exa.trust_pb.ManualTrustSignal
*/
export type ManualTrustSignal = Message<"exa.trust_pb.ManualTrustSignal"> & {
/**
* @generated from field: string auth_uid = 1;
*/
authUid: string;
/**
* @generated from field: exa.trust_pb.ManualTrustVerdict verdict = 2;
*/
verdict: ManualTrustVerdict;
/**
* @generated from field: int32 percent = 3;
*/
percent: number;
/**
* @generated from field: string reason = 4;
*/
reason: string;
/**
* @generated from field: string flagged_by = 5;
*/
flaggedBy: string;
};
/**
* Describes the message exa.trust_pb.ManualTrustSignal.
* Use `create(ManualTrustSignalSchema)` to create a new message.
*/
export const ManualTrustSignalSchema: GenMessage<ManualTrustSignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 11);
/**
* @generated from message exa.trust_pb.HunterEmailVerificationSignal
*/
export type HunterEmailVerificationSignal = Message<"exa.trust_pb.HunterEmailVerificationSignal"> & {
/**
* @generated from field: string email = 1;
*/
email: string;
/**
* @generated from field: string result = 2;
*/
result: string;
/**
* @generated from field: string status = 3;
*/
status: string;
/**
* @generated from field: int32 score = 4;
*/
score: number;
/**
* @generated from field: bool regexp = 5;
*/
regexp: boolean;
/**
* @generated from field: bool gibberish = 6;
*/
gibberish: boolean;
/**
* @generated from field: bool disposable = 7;
*/
disposable: boolean;
/**
* @generated from field: bool webmail = 8;
*/
webmail: boolean;
/**
* @generated from field: bool mx_records = 9;
*/
mxRecords: boolean;
/**
* @generated from field: bool smtp_server = 10;
*/
smtpServer: boolean;
/**
* @generated from field: bool smtp_check = 11;
*/
smtpCheck: boolean;
/**
* @generated from field: bool accept_all = 12;
*/
acceptAll: boolean;
/**
* @generated from field: bool block = 13;
*/
block: boolean;
/**
* @generated from field: int32 sources_count = 14;
*/
sourcesCount: number;
};
/**
* Describes the message exa.trust_pb.HunterEmailVerificationSignal.
* Use `create(HunterEmailVerificationSignalSchema)` to create a new message.
*/
export const HunterEmailVerificationSignalSchema: GenMessage<HunterEmailVerificationSignal> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 12);
/**
* @generated from message exa.trust_pb.RecordTrustEventsRequest
*/
export type RecordTrustEventsRequest = Message<"exa.trust_pb.RecordTrustEventsRequest"> & {
/**
* @generated from field: repeated exa.trust_pb.TrustEvent events = 1;
*/
events: TrustEvent[];
};
/**
* Describes the message exa.trust_pb.RecordTrustEventsRequest.
* Use `create(RecordTrustEventsRequestSchema)` to create a new message.
*/
export const RecordTrustEventsRequestSchema: GenMessage<RecordTrustEventsRequest> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 13);
/**
* @generated from message exa.trust_pb.RecordTrustEventsResponse
*/
export type RecordTrustEventsResponse = Message<"exa.trust_pb.RecordTrustEventsResponse"> & {
};
/**
* Describes the message exa.trust_pb.RecordTrustEventsResponse.
* Use `create(RecordTrustEventsResponseSchema)` to create a new message.
*/
export const RecordTrustEventsResponseSchema: GenMessage<RecordTrustEventsResponse> = /*@__PURE__*/
messageDesc(file_exa_trust_pb_trust, 14);
/**
* @generated from enum exa.trust_pb.TrustEventSource
*/
export enum TrustEventSource {
/**
* @generated from enum value: TRUST_EVENT_SOURCE_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: TRUST_EVENT_SOURCE_API_SERVER = 1;
*/
API_SERVER = 1,
/**
* @generated from enum value: TRUST_EVENT_SOURCE_DEVIN_WEBSERVER = 2;
*/
DEVIN_WEBSERVER = 2,
/**
* @generated from enum value: TRUST_EVENT_SOURCE_INTERNAL_DETECTOR = 3;
*/
INTERNAL_DETECTOR = 3,
}
/**
* Describes the enum exa.trust_pb.TrustEventSource.
*/
export const TrustEventSourceSchema: GenEnum<TrustEventSource> = /*@__PURE__*/
enumDesc(file_exa_trust_pb_trust, 0);
/**
* @generated from enum exa.trust_pb.TrustIdentifierType
*/
export enum TrustIdentifierType {
/**
* @generated from enum value: TRUST_IDENTIFIER_TYPE_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: TRUST_IDENTIFIER_TYPE_EMAIL = 1;
*/
EMAIL = 1,
/**
* @generated from enum value: TRUST_IDENTIFIER_TYPE_DEVIN_USER_ID = 2;
*/
DEVIN_USER_ID = 2,
/**
* @generated from enum value: TRUST_IDENTIFIER_TYPE_DEVIN_ACCOUNT_ID = 3;
*/
DEVIN_ACCOUNT_ID = 3,
}
/**
* Describes the enum exa.trust_pb.TrustIdentifierType.
*/
export const TrustIdentifierTypeSchema: GenEnum<TrustIdentifierType> = /*@__PURE__*/
enumDesc(file_exa_trust_pb_trust, 1);
/**
* @generated from enum exa.trust_pb.TrustQueryKeyType
*/
export enum TrustQueryKeyType {
/**
* @generated from enum value: TRUST_QUERY_KEY_TYPE_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: TRUST_QUERY_KEY_TYPE_AUTH_UID = 1;
*/
AUTH_UID = 1,
/**
* @generated from enum value: TRUST_QUERY_KEY_TYPE_DEVIN_USER_ID = 2;
*/
DEVIN_USER_ID = 2,
/**
* @generated from enum value: TRUST_QUERY_KEY_TYPE_DEVIN_ACCOUNT_ID = 3;
*/
DEVIN_ACCOUNT_ID = 3,
}
/**
* Describes the enum exa.trust_pb.TrustQueryKeyType.
*/
export const TrustQueryKeyTypeSchema: GenEnum<TrustQueryKeyType> = /*@__PURE__*/
enumDesc(file_exa_trust_pb_trust, 2);
/**
* @generated from enum exa.trust_pb.ManualTrustVerdict
*/
export enum ManualTrustVerdict {
/**
* @generated from enum value: MANUAL_TRUST_VERDICT_UNSPECIFIED = 0;
*/
UNSPECIFIED = 0,
/**
* @generated from enum value: MANUAL_TRUST_VERDICT_TRUST = 1;
*/
TRUST = 1,
/**
* @generated from enum value: MANUAL_TRUST_VERDICT_DISTRUST = 2;
*/
DISTRUST = 2,
}
/**
* Describes the enum exa.trust_pb.ManualTrustVerdict.
*/
export const ManualTrustVerdictSchema: GenEnum<ManualTrustVerdict> = /*@__PURE__*/
enumDesc(file_exa_trust_pb_trust, 3);
+151
View File
@@ -0,0 +1,151 @@
import { gunzipSync } from "node:zlib";
import { create, fromBinary, toBinary } from "@bufbuild/protobuf";
import type { FetchImpl, ModelSpec } from "../types";
import {
GetCliModelConfigsRequestSchema,
GetCliModelConfigsResponseSchema,
} from "./devin-gen/exa/api_server_pb/api_server_pb";
import { type ClientModelConfig, MetadataSchema } from "./devin-gen/exa/codeium_common_pb/codeium_common_pb";
const DEVIN_DEFAULT_BASE_URL = "https://server.codeium.com";
const DEVIN_GET_CLI_MODEL_CONFIGS_PATH = "/exa.api_server_pb.ApiServerService/GetCliModelConfigs";
const DEVIN_IDE_VERSION = "3.2.23";
const DEVIN_EXTENSION_VERSION = "1.48.2";
const DEVIN_SESSION_TOKEN_PREFIX = "devin-session-token$";
const DEFAULT_CONTEXT_WINDOW = 200_000;
const DEFAULT_MAX_TOKENS = 64_000;
/** Best-effort match for labels whose wording implies a thinking / reasoning-effort variant. */
const REASONING_LABEL_PATTERN = /think|thinking|high|medium|low|xhigh|reasoning/i;
const NO_REASONING_LABEL_PATTERN = /\bno thinking\b/i;
function supportsDevinThinking(config: ClientModelConfig): boolean {
if (NO_REASONING_LABEL_PATTERN.test(config.label)) return false;
return config.modelInfo?.modelFeatures?.supportsThinking === true || REASONING_LABEL_PATTERN.test(config.label);
}
/**
* Options for fetching dynamic Devin (Codeium Cascade) models from `GetCliModelConfigs`.
*/
export interface DevinModelDiscoveryOptions {
/** Codeium session token carried inside protobuf `Metadata.apiKey`. */
apiKey?: string;
/** Optional Codeium API base URL override. */
baseUrl?: string;
/** Optional request timeout in milliseconds (default 5000). */
timeoutMs?: number;
/** Optional caller abort signal, combined with the internal timeout. */
signal?: AbortSignal;
/** Optional fetch implementation for request-debug/proxy/test transports. */
fetch?: FetchImpl;
}
/**
* Fetches Devin models through the `GetCliModelConfigs` unary Connect RPC and
* normalizes them into canonical model entries.
*
* Returns `null` on request/decode failures.
* Returns `[]` only when the endpoint responds successfully with no usable models.
*/
export async function fetchDevinModels(
options: DevinModelDiscoveryOptions,
): Promise<ModelSpec<"devin-agent">[] | null> {
const timeoutMs = options.timeoutMs ?? 5_000;
const resolvedBaseUrl = options.baseUrl ?? DEVIN_DEFAULT_BASE_URL;
const requestUrl = `${resolvedBaseUrl.replace(/\/+$/, "")}${DEVIN_GET_CLI_MODEL_CONFIGS_PATH}`;
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), timeoutMs);
const signal = options.signal ? AbortSignal.any([controller.signal, options.signal]) : controller.signal;
try {
const request = create(GetCliModelConfigsRequestSchema, {
metadata: create(MetadataSchema, {
apiKey: normalizeDevinSessionToken(options.apiKey),
ideName: "windsurf",
ideVersion: DEVIN_IDE_VERSION,
extensionName: "windsurf",
extensionVersion: DEVIN_EXTENSION_VERSION,
}),
});
const body = toBinary(GetCliModelConfigsRequestSchema, request);
const headers: Record<string, string> = {
"content-type": "application/proto",
"connect-protocol-version": "1",
accept: "*/*",
};
const fetchImpl = options.fetch ?? fetch;
const response = await fetchImpl(requestUrl, { method: "POST", headers, body, signal });
if (!response.ok) {
return null;
}
const decoded = decodeCliModelConfigsResponse(new Uint8Array(await response.arrayBuffer()));
if (!decoded) {
return null;
}
return normalizeDevinModels(decoded.clientModelConfigs, options.baseUrl);
} catch {
return null;
} finally {
clearTimeout(timer);
}
}
function normalizeDevinSessionToken(apiKey: string | undefined): string {
if (!apiKey) return "";
return apiKey.startsWith(DEVIN_SESSION_TOKEN_PREFIX) ? apiKey : `${DEVIN_SESSION_TOKEN_PREFIX}${apiKey}`;
}
/**
* Decodes a raw (unframed) `GetCliModelConfigsResponse`. Bun's `fetch` usually
* auto-decompresses gzip, so the direct decode is attempted first; a
* `gunzipSync` fallback covers runtimes that hand back the still-compressed body.
*/
function decodeCliModelConfigsResponse(payload: Uint8Array) {
try {
return fromBinary(GetCliModelConfigsResponseSchema, payload);
} catch {
try {
return fromBinary(GetCliModelConfigsResponseSchema, gunzipSync(payload));
} catch {
return null;
}
}
}
function normalizeDevinModels(
configs: readonly ClientModelConfig[],
baseUrlOverride: string | undefined,
): ModelSpec<"devin-agent">[] {
const byId = new Map<string, ModelSpec<"devin-agent">>();
for (const config of configs) {
if (config.disabled) {
continue;
}
const id = config.modelUid.trim();
if (!id) {
continue;
}
const input: ("text" | "image")[] = config.supportsImages ? ["text", "image"] : ["text"];
const contextWindow = config.maxTokens > 0 ? config.maxTokens : DEFAULT_CONTEXT_WINDOW;
byId.set(id, {
id,
name: config.label.trim() || id,
api: "devin-agent",
provider: "devin",
baseUrl: baseUrlOverride ?? DEVIN_DEFAULT_BASE_URL,
reasoning: supportsDevinThinking(config),
input,
supportsTools: true,
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow,
maxTokens: Math.min(config.maxTokens > 0 ? config.maxTokens : DEFAULT_MAX_TOKENS, DEFAULT_MAX_TOKENS),
});
}
return [...byId.values()].sort((a, b) => a.id.localeCompare(b.id));
}
File diff suppressed because it is too large Load Diff
@@ -48,7 +48,7 @@ import {
zenmuxModelManagerOptions,
zhipuCodingPlanModelManagerOptions,
} from "./openai-compat";
import { cursorModelManagerOptions, zaiModelManagerOptions } from "./special";
import { cursorModelManagerOptions, devinModelManagerOptions, zaiModelManagerOptions } from "./special";
export const CATALOG_PROVIDERS = [
{
@@ -108,6 +108,14 @@ export const CATALOG_PROVIDERS = [
createModelManagerOptions: (config: ModelManagerConfig) => deepseekModelManagerOptions(config),
catalogDiscovery: { label: "DeepSeek" },
},
{
id: "devin",
defaultModel: "swe-1-6",
envVars: ["DEVIN_API_KEY"],
createModelManagerOptions: (config: ModelManagerConfig) => devinModelManagerOptions(config),
dynamicModelsAuthoritative: true,
catalogDiscovery: { label: "Devin", envVars: ["DEVIN_API_KEY"], oauthProvider: "devin" },
},
{
id: "firepass",
defaultModel: "kimi-k2.6-turbo",
@@ -1,5 +1,6 @@
import { once } from "@oh-my-pi/pi-utils";
import { fetchCodexModels } from "../discovery/codex";
import type { DevinModelDiscoveryOptions } from "../discovery/devin";
import type { ModelManagerOptions } from "../model-manager";
// ---------------------------------------------------------------------------
@@ -56,6 +57,34 @@ export function cursorModelManagerOptions(config: CursorModelManagerConfig = {})
const cursorDiscovery = once(() => import("../discovery/cursor"));
// ---------------------------------------------------------------------------
// Devin (Codeium Cascade)
// ---------------------------------------------------------------------------
export interface DevinModelManagerConfig {
apiKey?: string;
baseUrl?: string;
fetch?: DevinModelDiscoveryOptions["fetch"];
}
export function devinModelManagerOptions(config: DevinModelManagerConfig = {}): ModelManagerOptions<"devin-agent"> {
const { apiKey, baseUrl, fetch } = config;
return {
providerId: "devin",
...(apiKey ? { dynamicModelsAuthoritative: true } : undefined),
...(apiKey
? {
fetchDynamicModels: async () => {
const { fetchDevinModels } = await devinDiscovery();
return fetchDevinModels({ apiKey, baseUrl, fetch });
},
}
: undefined),
};
}
const devinDiscovery = once(() => import("../discovery/devin"));
// ---------------------------------------------------------------------------
// Zai
// ---------------------------------------------------------------------------
+2 -1
View File
@@ -14,7 +14,8 @@ export type KnownApi =
| "google-gemini-cli"
| "google-vertex"
| "ollama-chat"
| "cursor-agent";
| "cursor-agent"
| "devin-agent";
export type Api = KnownApi | (string & {});
/** Canonical thinking transport used by a model. */
@@ -43,7 +43,7 @@ describe("CursorExecHandlers.grep bridge", () => {
path: cwd,
pattern: "hello",
} as any);
expect(defaultResult.details?.matchCount).toBe(1);
expect((defaultResult.details as { matchCount?: number } | undefined)?.matchCount).toBe(1);
// 2. If caseInsensitive: true, should be case-insensitive (match count 2 for "hello")
const insensitiveResult = await handlers.grep({
@@ -52,7 +52,7 @@ describe("CursorExecHandlers.grep bridge", () => {
pattern: "hello",
caseInsensitive: true,
} as any);
expect(insensitiveResult.details?.matchCount).toBe(2);
expect((insensitiveResult.details as { matchCount?: number } | undefined)?.matchCount).toBe(2);
// 3. If caseInsensitive: false, should be case-sensitive (match count 1 for "hello")
const sensitiveResult = await handlers.grep({
@@ -61,6 +61,6 @@ describe("CursorExecHandlers.grep bridge", () => {
pattern: "hello",
caseInsensitive: false,
} as any);
expect(sensitiveResult.details?.matchCount).toBe(1);
expect((sensitiveResult.details as { matchCount?: number } | undefined)?.matchCount).toBe(1);
});
});
@@ -94,7 +94,7 @@ describe("BashTool argument validation", () => {
arguments: { command: "echo should-not-run", async: true },
});
await expect(tool.execute("tool-call", args as BashToolInput)).rejects.toThrow(
await expect(tool.execute("tool-call", args as unknown as BashToolInput)).rejects.toThrow(
"Async bash execution is disabled",
);
});