← Vytvářejte agenty na Cloudflare / agents / tools / codemode
Referenční dokumentace API Code Mode
Code Mode publikuje šest vstupních bodů balíčku. Rozhraní API specifická pro daný framework importujte z odpovídajícího vstupního bodu:
| Vstupní bod | Účel |
|---|---|
@cloudflare/codemode |
Runtime, konektory, exekutor Workers a nástroje nezávislé na frameworku |
@cloudflare/codemode/ai |
nástroje AI SDK a adaptér konektoru |
@cloudflare/codemode/mcp |
Wrappery pro MCP servery |
@cloudflare/codemode/tanstack-ai |
Nástroje a adaptér TanStack AI |
@cloudflare/codemode/browser |
Deskriptor nástroje prohlížeče a spouštěč iframe |
@cloudflare/codemode/vite |
Plugin Vite pro zjišťování konektorů a exporty Worker |
@cloudflare/codemode
Hlavní vstupní bod nevyžaduje instalaci volitelných peer dependencies AI SDK, TanStack AI ani Zod.
Sestavení runtime
createCodemodeRuntime()
function createCodemodeRuntime(
options: CreateCodemodeRuntimeOptions,
): CodemodeRuntimeHandle;Vytvoří řídicí rovinu na straně hostitele pro pojmenovaný runtime Code Mode.
CreateCodemodeRuntimeOptions má tato pole:
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
ctx |
DurableObjectState |
Ano | Stav Durable Object, který hostí runtime facet. |
connectors |
CodemodeConnector[] |
Ano | Konektory jsou dostupné jako globální proměnné sandboxu. Názvy konektorů musí být jedinečné a codemode je vyhrazen. |
executor |
Executor |
Ano | Sandbox, který spouští vygenerovaný kód. |
name |
string |
Ne | Identita trvalého runtime. Výchozí hodnota je "default". Platnými znaky jsou písmena, číslice, _, -, a .. |
maxExecutions |
number |
Ne | Záznamy o ukončených bězích uchovávané při zahájení nového běhu. Výchozí hodnota je 50. Běžící a pozastavená spuštění se automaticky neodstraňují. |
transformResult |
TransformResult |
Ne | Přetváří dokončený výsledek vracený modelu. Auditní stopa uchovává nezměněný výsledek. |
interface CodemodeRuntimeHandle {
tool(
options?: CodemodeRuntimeToolOptions,
): Tool<ProxyToolInput, ProxyToolOutput>;
execute(input: ProxyToolInput): Promise<ProxyToolOutput>;
search(query: string): Promise<SearchOutput>;
describe(target: string): Promise<DescribeOutput>;
approve(options: CodemodeApproveOptions): Promise<ProxyToolOutput>;
reject(options: CodemodeRejectOptions): Promise<boolean>;
rollback(options: CodemodeRollbackOptions): Promise<void>;
pending(executionId?: string): Promise<PendingAction[]>;
expirePaused(options?: CodemodeExpireOptions): Promise<string[]>;
executions(limit?: number): Promise<ExecutionState[]>;
deleteExecution(id: string): Promise<boolean>;
pruneExecutions(keep?: number): Promise<number>;
saveSnippet(name: string, options: SaveSnippetOptions): Promise<Snippet>;
snippets(): Promise<Snippet[]>;
deleteSnippet(name: string): Promise<boolean>;
}Metody handle mají tyto efekty:
| Metoda | Účinek |
|---|---|
tool(options?) |
Vrací nástroj AI SDK poskytnutý modelu. description nahrazuje výchozí popis. connectorHints přidává jednořádkovou nápovědu pro každý konektor při použití výchozího popisu. |
execute({ code }) |
Spustí kód přímo, aniž by přizpůsoboval runtime nástroji AI SDK. Výsledek může být dokončen, pozastaven kvůli schválení nebo může vrátit chybový stav. |
search(query) |
Vyhledává v metodách konektorů a uložených fragmentech kódu bez spouštění kódu v sandboxu. |
describe(target) |
Vrací dokumentaci TypeScript na vyžádání pro konektor, metodu nebo uložený úryvek. |
approve({ executionId }) |
Obnoví pozastavené provedení prostřednictvím replay. Výsledek může dokončit, znovu se pozastavit nebo vrátit chybový stav. Neobnovuje provedení, které nebylo pozastaveno. |
reject({ seq, executionId }) |
Odmítne jednu čekající akci a ukončí spuštění. Vrátí false pokud akce už není nevyřízená. Dřívější akce nevrací zpět. |
rollback({ executionId }) |
Volá dostupné revert funkce v opačném pořadí volání. Chybějící konektory a metody bez revert zůstávají použity. Po selhání se pokusí o pozdější vrácení změn. |
pending(executionId?) |
Vypisuje čekající akce. Bez ID kombinuje akce ze všech pozastavených spuštění. |
expirePaused({ maxAgeMs? }) |
Ukončí zastaralá pozastavená nebo běžící spuštění a vrátí jejich ID. Výchozí stáří je 24 hodin. |
executions(limit?) |
Vrací auditní záznamy, od nejnovějších. |
deleteExecution(id) |
Smaže jeden auditní záznam. Zároveň uvolní prostředky pro neukončené provedení. Vrátí, zda záznam existoval. |
pruneExecutions(keep?) |
Smaže starší ukončené záznamy a vrátí počet smazaných záznamů. Ve výchozím nastavení ponechává 50. |
saveSnippet(name, options) |
Ukládá kód z options.executionId jako opakovaně použitelný úryvek kódu. Přijímá libovolný stav provedení, aplikace by proto měly nejprve ověřit úspěšné dokončení. Nahrazuje položku se stejným názvem. |
snippets() |
Vrací uložené úryvky seřazené podle názvu. |
deleteSnippet(name) |
Smaže snippet a vrátí, zda existoval. |
Typy možností metody jsou:
type CodemodeRuntimeToolOptions = {
description?: string;
connectorHints?: Record<string, string>;
};
type CodemodeApproveOptions = { executionId: string };
type CodemodeRejectOptions = { seq: number; executionId: string };
type CodemodeRollbackOptions = { executionId: string };
type CodemodeExpireOptions = { maxAgeMs?: number };CodemodeRuntime
class CodemodeRuntime extends DurableObject<unknown> {
constructor(ctx: DurableObjectState, env: unknown);
}CodemodeRuntime je trvalý facet za runtime handle. Plugin Vite exportuje tuto třídu ze vstupního modulu Workeru. Použijte createCodemodeRuntime() pro kód aplikace místo přímého vytváření facetu.
Hlavní vstupní bod také exportuje tyto konstanty runtime:
| Konstanta | Hodnota | Účel |
|---|---|---|
DEFAULT_MAX_EXECUTIONS |
50 |
Výchozí počet uchovávaných ukončených provedení |
DEFAULT_PAUSED_TTL_MS |
86400000 |
Výchozí stáří zastaralého provedení v milisekundách (24 hodin) |
MAX_DURABLE_VALUE_BYTES |
1000000 |
Limit délky serializovaného řetězce JavaScript pro jednu trvalou hodnotu |
Vstup a výstup nástroje runtime
type ProxyToolInput = { code: string };
type ProxyToolOutput =
| {
status: "completed";
executionId: string;
result: unknown;
logs?: string[];
}
| {
status: "paused";
executionId: string;
pending: PendingAction[];
}
| {
status: "error";
executionId: string;
error: string;
logs?: string[];
};
type TransformResult = (result: unknown) => unknown | Promise<unknown>;Chyby sandboxu a přehrávání používají error výstupní variantu. Nevyvolávají výjimku skrz volání nástroje modelem.
Záznamy o spuštění
type ExecutionStatus =
| "running"
| "paused"
| "completed"
| "error"
| "rejected"
| "rolled_back";
type ExecutionState = {
id: string;
code: string;
status: ExecutionStatus;
log: ToolLogEntry[];
result?: unknown;
error?: string;
logs?: string[];
connectors?: string[];
createdAt: number;
updatedAt: number;
};
type ToolLogEntry = {
seq: number;
connector: string;
method: string;
args: unknown;
result?: unknown;
requiresApproval: boolean;
ephemeral?: boolean;
state: "executing" | "applied" | "pending" | "reverted" | "error";
};
type PendingAction = {
executionId: string;
seq: number;
connector: string;
method: string;
args: unknown;
};createdAt a updatedAt obsahují milisekundy epochy. Dočasný záznam v protokolu pochází z nástroje konektoru s replay: "reexecute". Jeho výsledek se neukládá a volání se při přehrávání spustí znovu.
Typ rozhodnutí runtime je:
type ToolDecision =
| { kind: "replay"; result: unknown }
| { kind: "execute"; seq: number }
| { kind: "pause"; seq: number };Sandbox codemode API
runtime.tool() vloží codemode globální proměnnou do generovaného kódu sandboxu.
declare const codemode: {
search(query: string): Promise<SearchOutput>;
describe(target: string): Promise<DescribeOutput>;
step<T>(name: string, fn: () => T | Promise<T>): Promise<T>;
run(name: string, input?: unknown): Promise<unknown>;
};Metody sandboxu se chovají následovně:
| Metoda | Popis |
|---|---|
search(query) |
Vyhledává v metodách konektorů a uložených fragmentech kódu. Výsledky jsou seřazeny podle relevance a omezeny na 50. |
describe(target) |
Vrací vygenerovaný TypeScript pro konektor, connector.method, nebo název úryvku. |
step(name, fn) |
Spustí closure jednou a zaznamená jeho výsledek. Replay vrátí zaznamenaný výsledek, aniž by closure spustil znovu. |
run(name, input?) |
Spustí uložený snippet. Chybějící snippet nebo zaznamenaný konektor se vyhodnotí jako objekt s error vlastnost. |
Použijte step() kolem nedeterministické práce v sandboxu s vedlejšími efekty, která nepoužívá konektor. Volání konektoru vydávejte postupně, pokud může být provádění pozastaveno. Souběžná volání se mohou ke kurzoru přehrávání dostat v jiném pořadí.
Typy výstupů zjišťování jsou:
type SearchResult = {
path: string;
connector: string;
method: string;
description?: string;
requiresApproval?: boolean;
kind: "method" | "snippet";
score: number;
};
type SearchOutput = {
results: SearchResult[];
total: number;
truncated: boolean;
};
type DescribeOutput = {
path: string;
description?: string;
requiresApproval?: boolean;
types: string;
kind: "connector" | "method" | "snippet";
};requiresApproval je true když se metoda konektoru pozastaví před spuštěním. U metod, které nevyžadují schválení, a u fragmentů kódu se vynechává.
Typy snippetů
interface SaveSnippetOptions {
description?: string;
inputSchema?: unknown;
executionId: string;
}
interface Snippet {
name: string;
description: string;
code: string;
savedAt: number;
inputSchema?: unknown;
connectors?: string[];
}connectors zaznamená každý jmenný prostor nakonfigurovaný v okamžiku spuštění zdrojového provádění. savedAt obsahuje milisekundy epochy. Před voláním saveSnippet(), ověřte, že zdroj ExecutionState.status je completed.
Executor API
Executor
interface Executor {
execute(
code: string,
providersOrFns:
| ResolvedProvider[]
| Record<string, (...args: unknown[]) => Promise<unknown>>,
options?: ExecuteOptions,
): Promise<ExecuteResult>;
}Vlastní executory by měly hlásit selhání v ExecuteResult.error místo vyvolání výjimky.
interface ExecuteResult {
result: unknown;
error?: string;
logs?: string[];
}
interface ResolvedProvider {
name: string;
fns: Record<string, (...args: unknown[]) => Promise<unknown>>;
prelude?: string;
}
interface ConnectorBinding {
name: string;
binding: {
callTool(method: string, args: unknown): Promise<unknown>;
};
}
interface ExecuteOptions {
connectors?: ConnectorBinding[];
}Předání záznamu funkce namísto ResolvedProvider[] je zastaralé. Vytváří jednoho poskytovatele s názvem codemode.
DynamicWorkerExecutor
class DynamicWorkerExecutor implements Executor {
constructor(options: DynamicWorkerExecutorOptions);
execute(
code: string,
providersOrFns:
| ResolvedProvider[]
| Record<string, (...args: unknown[]) => Promise<unknown>>,
options?: ExecuteOptions,
): Promise<ExecuteResult>;
}DynamicWorkerExecutorOptions má tato pole:
| Pole | Typ | Povinné | Výchozí | Popis |
|---|---|---|---|---|
loader |
WorkerLoader |
Ano | , | Vazba Worker Loader použitá k vytváření izolovaných Workers. |
timeout |
number |
Ne | 60000 |
Časový limit spuštění v milisekundách. |
globalOutbound |
Fetcher | null |
Ne | null |
Politika odchozí sítě. null blokuje přístup. Fetcher přijímá všechny odchozí požadavky. |
modules |
Record<string, string> |
Ne | {} |
Zdrojový kód modulu klíčovaný podle specifikátoru importu. Vyhrazený executor.js klíč se ignoruje. |
bindings |
Record<string, unknown> |
Ne | {} |
Doplňkové vazby prostředí vložené do každého sandboxového Workeru. |
Executor ověřuje jmenné prostory poskytovatelů a konektorů. Názvy musí být platné identifikátory JavaScriptu, jedinečné a nesmí zastiňovat globální proměnné executoru.
ToolDispatcher
class ToolDispatcher extends RpcTarget {
constructor(fns: Record<string, (...args: unknown[]) => Promise<unknown>>);
call(name: string, argsJson?: string): Promise<string>;
}ToolDispatcher je most Workers RPC, který používá DynamicWorkerExecutor. call() přijímá serializované poziční argumenty a vrací serializovaný výsledek nebo chybovou obálku.
runCode()
function runCode(options: {
code: string;
executor: Executor;
providers: ResolvedProvider[];
connectors?: ConnectorBinding[];
}): Promise<{ result: unknown; logs?: string[] }>;Normalizuje a spouští kód. Nástroj ExecuteResult.error způsobí runCode() vyhodit Error který obsahuje zachycený výstup konzole.
Poskytovatelé nástrojů
interface ToolProvider {
name?: string;
tools: ToolDescriptors | ToolSet | SimpleToolRecord;
types?: string;
}Poskytovatelé nástrojů mají tato pole:
| Pole | Popis |
|---|---|
name |
Jmenný prostor Sandbox. Výchozí hodnota je codemode. |
tools |
Deskriptory nástrojů, AI SDK ToolSet, nebo záznamy obsahující execute. |
types |
Deklarace TypeScript zobrazené modelu. Pokud je vynecháte, Code Mode je vygeneruje. |
function resolveProvider(provider: ToolProvider): ResolvedProvider;Implementace hlavního vstupního bodu neověřuje vstupy podle schémat. Vylučuje nástroje, jejichž needsApproval je true nebo funkci. Pro trvalé schvalovací postupy použijte runtime konektory.
Základní třídy konektorů
CodemodeConnector
abstract class CodemodeConnector<
Env = unknown,
Props = unknown,
> extends WorkerEntrypoint<Env, Props> {
constructor(ctx: DurableObjectState | ExecutionContext, env: Env);
abstract name(): string;
protected instructions(): string | undefined;
protected abstract tools(): ConnectorTools | Promise<ConnectorTools>;
protected tool(name: string, tool: ConnectorTool): ConnectorTool;
describe(): Promise<ConnectorDescription>;
executeTool(
method: string,
args: unknown,
ctx?: ToolExecuteContext,
): Promise<unknown>;
revertAction(
method: string,
args: unknown,
result: unknown,
ctx?: ToolExecuteContext,
): Promise<boolean>;
onPassEnd(executionId: string, status: PassEndStatus): Promise<void>;
disposeExecution(
executionId: string,
status: ExecutionEndStatus,
): Promise<void>;
getTypeScriptTypes(): Promise<string>;
}Autoři konektorů implementují nebo přepisují tyto hooky:
| Hook | Povinné | Popis |
|---|---|---|
name() |
Ano | Vrací jedinečný jmenný prostor sandboxu. |
instructions() |
Ne | Vrací pokyny ke konektoru zahrnuté v describe(). |
tools() |
Ano | Vrací záznam nástroje konektoru. Odvozené konektory implementují tento hook. |
tool(name, tool) |
Ne | Obaluje přeložený nástroj. Slouží k přidání chování pro schvalování, opakování nebo vracení změn u odvozených nástrojů. |
onPassEnd(executionId, status) |
Ne | Uvolní prostředky vázané na jednotlivý průchod. Spouští se po každém průchodu, včetně pozastaveného průchodu. |
disposeExecution(executionId, status) |
Ne | Uvolní prostředky vázané na jednotlivé spuštění po ukončeném přechodu. Při pozastavení se nespouští. |
Hooky životního cyklu by měly být idempotentní, neměly by se spoléhat na paměť instance a neměly by vyhazovat výjimku. Při ukončovacím průchodu onPassEnd() se spustí před disposeExecution().
Základní třída odvozuje describe(), executeTool(), revertAction(), a getTypeScriptTypes() ze záznamu nástroje. Autoři konektorů nemusí tyto metody implementovat.
Typy nástrojů konektoru
type ConnectorTool = {
description?: string;
inputSchema?: JSONSchema7;
outputSchema?: JSONSchema7;
requiresApproval?: boolean;
replay?: "log" | "reexecute";
execute: (
args: unknown,
ctx?: ToolExecuteContext,
) => Promise<unknown> | unknown;
revert?: (
args: unknown,
result: unknown,
ctx?: ToolExecuteContext,
) => Promise<void> | void;
};
type ConnectorTools = Record<string, ConnectorTool>;
type ToolExecuteContext = { executionId: string };inputSchema výchozí hodnotou je otevřený objekt. requiresApproval: true se pozastaví před spuštěním. replay: "reexecute" vynechá trvalé uložení výsledku a při každém obnovení volání znovu provede. Tyto dvě možnosti nelze kombinovat.
revert poskytuje kompenzaci pro runtime.rollback(). Lze jej použít na jakýkoli nástroj bez ohledu na to, zda vyžaduje schválení.
McpConnector
abstract class McpConnector<
Env = unknown,
Props = unknown,
> extends CodemodeConnector<Env, Props> {
protected abstract createConnection():
| McpConnectionLike
| Promise<McpConnectionLike>;
protected toolName(tool: McpTool): string;
}McpConnector převádí každý nástroj MCP na metodu konektoru. toolName() má výchozí hodnotu sanitizeToolName(tool.name). Přepište ji, abyste vyřešili kolize v pojmenování.
interface McpConnectionLike {
name?: string;
client: Pick<Client, "callTool">;
instructions?: string;
tools?: McpTool[];
fetchTools?: () => Promise<McpTool[]>;
}Konektor používá tools když toto pole není prázdné. Jinak zavolá fetchTools() pokud je uveden. Chybové výsledky MCP se stanou vyvolanými chybami konektoru. Strukturovaný obsah se vrací před textovým obsahem.
OpenApiConnector
abstract class OpenApiConnector<
Env = unknown,
Props = unknown,
> extends CodemodeConnector<Env, Props> {
protected abstract spec():
| Record<string, unknown>
| Promise<Record<string, unknown>>;
protected abstract request(options: OpenApiRequestOptions): Promise<unknown>;
protected exposeSpec(): boolean;
}OpenApiConnector vytvoří jednu metodu pro každou operaci OpenAPI. Používá sanitizovaný operationId pokud je přítomen, jinak se vrátí k názvu odvozenému z metody HTTP a cesty. Duplicitní operace a názvy vyhrazené pro request nebo spec se přeskočí.
Každý konektor OpenAPI zpřístupňuje nízkoúrovňové request metodu. exposeSpec() má výchozí hodnotu false. Vraťte true aby zároveň vystavil spec.
type OpenApiRequestOptions = {
path: string;
method?: string;
params?: Record<string, unknown>;
body?: unknown;
headers?: Record<string, string>;
};Odvozené nástroje operací nahrazují parametry cesty. Hodnoty dotazu (query) předávají jako params, hodnoty hlaviček jako headers, a data požadavku JSON jako body.
Typy životního cyklu a popisu konektoru
type ExecutionEndStatus = "completed" | "error" | "rejected" | "rolled_back";
type PassEndStatus = ExecutionEndStatus | "paused";
type ToolAnnotations = {
requiresApproval?: boolean;
replay?: "log" | "reexecute";
};
type ConnectorDescription = {
name: string;
instructions?: string;
descriptors: JsonSchemaToolDescriptors;
annotations?: Record<string, ToolAnnotations>;
};Nástroje JSON Schema
interface JsonSchemaToolDescriptor {
description?: string;
inputSchema: JSONSchema7;
outputSchema?: JSONSchema7;
}
type JsonSchemaToolDescriptors = Record<string, JsonSchemaToolDescriptor>;
function generateTypesFromJsonSchema(tools: JsonSchemaToolDescriptors): string;
function jsonSchemaToType(schema: JSONSchema7, typeName: string): string;generateTypesFromJsonSchema() vrátí deklarace pro codemode namespace. Názvy nástrojů se před vygenerováním deklarací očistí. Nepodporovaná schémata se zjednoduší na unknown místo toho, aby generování selhalo.
Nástroje pro kód a výstup
Hlavní vstupní bod poskytuje tyto nástroje pro práci s kódem a výsledky:
| Funkce | Podpis | Chování |
|---|---|---|
sanitizeToolName |
(name: string) => string |
Nahrazuje běžné oddělovače, odstraňuje neplatné znaky, doplňuje prefix před názvy začínajícími číslicí a přidává sufix k rezervovaným slovům JavaScriptu. |
normalizeCode |
(code: string) => string |
Převádí běžné formy výstupu modelu na asynchronní arrow funkci. Zároveň odstraňuje podporované oddělovače bloků kódu Markdown. |
truncateResponse |
(text: string, options?: TruncateOptions) => string |
Zkrátí text na znakový rozpočet a připojí značku velikosti. |
truncateResult |
(value: unknown, options?: TruncateOptions) => unknown |
Zachovává malé strukturované hodnoty. Nadměrně velké serializovatelné hodnoty se zkrátí na text JSON. |
type TruncateOptions = {
maxChars?: number;
maxTokens?: number;
};Výchozí rozpočet je 6000 odhadovaných tokenů při čtyřech znacích na token. maxChars přepisuje odvozený rozpočet znaků.
@cloudflare/codemode/ai
Tento vstupní bod vyžaduje ai a zod peer závislosti.
createCodeTool()
function createCodeTool(
options: CreateCodeToolOptions,
): Tool<CodeInput, CodeOutput>;
interface CreateCodeToolOptions {
tools: ToolProviderTools | ToolProvider[];
executor: Executor;
description?: string;
}
type CodeInput = { code: string };
type CodeOutput = { result: unknown; logs?: string[] };description může obsahovat {{types}}. Code Mode nahradí tento token vygenerovanými deklaracemi. Nezpracovaný záznam nástroje se stane jedním poskytovatelem s názvem codemode. Pole přijímá více jmenných prostorů poskytovatelů.
Nástroje, jejichž needsApproval je true nebo funkce jsou vyloučeny. Toto API nepozastavuje běh. Použijte createCodemodeRuntime() a konektory pro trvalé zpracování schvalování.
pomocné nástroje poskytovatele AI SDK
Vstupní bod AI SDK poskytuje tyto pomocné nástroje pro poskytovatele nástrojů:
| Export | Podpis | Popis |
|---|---|---|
aiTools |
(tools: ToolDescriptors | ToolSet) => ToolProvider |
Obaluje nástroje AI SDK ve výchozím poskytovateli. |
generateTypes |
(tools: ToolDescriptors | ToolSet, namespace?: string) => string |
Generuje deklarace ze schémat AI SDK nebo Zod. Výchozí jmenný prostor je codemode. |
resolveProvider |
(provider: ToolProvider) => ResolvedProvider |
Filtruje nástroje podmíněné schválením, validuje vstup pomocí AI SDK asSchema() pokud jsou k dispozici, a extrahuje spustitelné funkce. |
interface ToolDescriptor {
description?: string;
inputSchema: ZodType;
outputSchema?: ZodType;
execute?: (args: unknown) => Promise<unknown>;
}
type ToolDescriptors = Record<string, ToolDescriptor>;ToolSetConnector
class ToolSetConnector extends CodemodeConnector {
constructor(
ctx: DurableObjectState | ExecutionContext,
options: ToolSetConnectorOptions,
);
}
function toolSetConnector(
ctx: DurableObjectState | ExecutionContext,
options: ToolSetConnectorOptions,
): ToolSetConnector;
interface ToolSetConnectorOptions {
name?: string;
instructions?: string;
tools: ToolSet;
}Jmenný prostor má výchozí hodnotu tools. Konektor vylučuje nástroje bez execute funkci. needsApproval: true a hodnoty typu funkce needsApproval se mapuje na trvalé schválení konektoru. needsApproval: false se provede bez schválení. Schémata AI SDK ověří vstup před spuštěním.
@cloudflare/codemode/mcp
Tento vstupní bod vyžaduje peer dependencies MCP SDK a Zod.
codeMcpServer()
interface CodeMcpServerOptions {
server: McpServer;
executor: Executor;
description?: string;
}
function codeMcpServer(options: CodeMcpServerOptions): Promise<McpServer>;Obaluje existující MCP server jedním code nástroj. Wrapper se připojí ke zdrojovému serveru přes transport v paměti, zjistí jeho nástroje a zpřístupní je jako metody na codemode uvnitř exekutoru.
Vlastní popis může obsahovat {{types}}, který wrapper nahradí vygenerovanými deklaracemi TypeScript. Může také obsahovat {{example}}, který wrapper nahradí ukázkovým voláním založeným na prvním upstreamovém nástroji MCP. Vrácené hodnoty MCP se rozbalují v tomto pořadí: kompatibilita toolResult, chyby MCP, structuredContent, obsah, který je celý textový, jinak původní výsledek se smíšeným obsahem.
openApiMcpServer()
interface OpenApiMcpServerOptions {
spec: Record<string, unknown>;
executor: Executor;
request: (options: RequestOptions) => Promise<unknown>;
name?: string;
version?: string;
description?: string;
}
interface RequestOptions {
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
path: string;
query?: Record<string, string | number | boolean | undefined>;
body?: unknown;
contentType?: string;
rawBody?: boolean;
}
function openApiMcpServer(options: OpenApiMcpServerOptions): McpServer;Vytvoří server MCP se dvěma nástroji:
| Nástroj MCP | Sandbox API | Účel |
|---|---|---|
search |
codemode.spec() |
Spustí kód proti dokumentu OpenAPI. Místní $ref hodnoty se přeloží dříve, než kód dokument obdrží. |
execute |
codemode.spec() a codemode.request(options) |
Spustí kód, který může zkontrolovat dokument a zavolat funkci požadavku poskytnutou hostitelem. |
name má výchozí hodnotu openapi. version má výchozí hodnotu 1.0.0. Funkce požadavku na hostiteli udržuje přihlašovací údaje mimo sandbox. Textové odpovědi jsou omezeny na přibližně 6 000 tokenů a při oříznutí obsahují značku zkrácení.
search a execute popisy nástrojů používají pevné ukázkové úryvky. Na rozdíl od codeMcpServer(), tato funkce nepodporuje {{types}} nebo {{example}} zástupné symboly. Volitelný description se připojí k execute popisu nástroje.
@cloudflare/codemode/tanstack-ai
Tento vstupní bod vyžaduje @tanstack/ai a zod peer závislosti.
createCodeTool()
function createCodeTool(options: CreateCodeToolOptions): ServerTool;Možnosti, CodeInput, a CodeOutput odpovídá /ai vstupní bod. Vrácený ServerTool lze předat do TanStack AI chat().
Nástroje poskytovatele TanStack AI
Vstupní bod TanStack AI poskytuje tyto pomocné nástroje pro poskytovatele nástrojů:
| Export | Podpis | Popis |
|---|---|---|
tanstackTools |
(tools: TanStackTool[], name?: string) => ToolProvider |
Obaluje nástroje TanStack AI v poskytovateli. Pouze nástroje s execute funkce jsou volatelné. Namespace se ve výchozím stavu nastaví na codemode. |
generateTypes |
(tools: TanStackTool[], namespace?: string) => string |
Převádí podporovaná schémata TanStack AI na JSON Schema a poté generuje deklarace. |
resolveProvider |
(provider: ToolProvider) => ResolvedProvider |
Určí poskytovatele nezávislého na frameworku bez validace schématu. |
normalizeProviders |
(tools: ToolProviderTools | ToolProvider[]) => ToolProvider[] |
Převádí surové nástroje na jednoprvkové pole providerů. |
Tento vstupní bod také exportuje DEFAULT_DESCRIPTION. tanstackTools() vyloučí nástroje s needsApproval: true nebo hodnotou funkce needsApproval. Nástroje s needsApproval: false zůstávají volatelné.
@cloudflare/codemode/browser
Vstupní bod pro prohlížeč používá API prohlížeče a obyčejné JSON Schema. Nevyžaduje AI SDK ani Zod.
createBrowserCodeTool()
function createBrowserCodeTool(
options: CreateBrowserCodeToolOptions,
): BrowserCodeToolDescriptor;
interface CreateBrowserCodeToolOptions {
tools:
| JsonSchemaExecutableToolDescriptor[]
| JsonSchemaExecutableToolDescriptors;
executor?: Executor;
description?: string;
}Nástroje v podobě pole musí obsahovat name. Nástroje ve tvaru objektu používají jako název každý klíč záznamu. Executor jako výchozí hodnotu použije nový IframeSandboxExecutor.
tools možnost také přijímá deskriptory s needsApproval?: boolean | ((...args: unknown[]) => unknown). Nástroje s needsApproval: true nebo hodnotou funkce needsApproval jsou vyloučeny. Nástroje s needsApproval: false zůstávají volatelné. JSON Schema přispívá deklaracemi určenými pro model, ale neprovádí ověřování za běhu.
interface JsonSchemaExecutableToolDescriptor extends JsonSchemaToolDescriptor {
name?: string;
execute: (args: Record<string, unknown>) => Promise<unknown>;
}
type JsonSchemaExecutableToolDescriptors = Record<
string,
JsonSchemaExecutableToolDescriptor
>;Vrácený deskriptor má tento tvar:
interface BrowserCodeToolDescriptor {
name: string;
description: string;
inputSchema: {
type: "object";
properties: {
code: { type: "string"; description: string };
};
required: ["code"];
};
outputSchema: {
type: "object";
properties: {
result: { description: string };
logs: {
type: "array";
items: { type: "string" };
description: string;
};
};
required: ["result"];
};
execute(args: CodeInput): Promise<CodeOutput>;
}IframeSandboxExecutor
class IframeSandboxExecutor implements Executor {
constructor(options?: IframeSandboxExecutorOptions);
execute(
code: string,
providersOrFns:
| ResolvedProvider[]
| Record<string, (...args: unknown[]) => Promise<unknown>>,
): Promise<ExecuteResult>;
}
interface IframeSandboxExecutorOptions {
timeout?: number;
csp?: string;
}Executor iframe přijímá tyto možnosti:
| Pole | Výchozí | Popis |
|---|---|---|
timeout |
30000 |
Maximální doba běhu v milisekundách. Nemůže přerušit synchronní smyčku, která blokuje event loop prohlížeče. |
csp |
default-src 'none'; script-src 'unsafe-inline' 'unsafe-eval'; |
Content Security Policy uplatněná na dokument iframe sandboxu. |
Každé spuštění vytvoří skrytý iframe s sandbox="allow-scripts". Volání nástrojů překračují hranici iframe prostřednictvím zpráv vázaných na nonce postMessage zprávy. Iframe se po úspěchu, chybě nebo vypršení časového limitu odstraní.
Tento vstupní bod také exportuje na frameworku nezávislý Executor, ExecuteResult, a ResolvedProvider typy. Znovu exportuje JsonSchemaToolDescriptor a JsonSchemaToolDescriptors.
@cloudflare/codemode/vite
Vstupní bod Vite má jeden výchozí export:
function codemodeVitePlugin(): Plugin;Plugin připojuje export { CodemodeRuntime } from "@cloudflare/codemode" do vstupního modulu Workeru (src/server.ts, src/index.ts, nebo src/worker.ts). Díky tomu je tato součást runtimu dostupná jako ctx.exports.CodemodeRuntime, který createCodemodeRuntime() vyžaduje.
Plugin ponechá vstupní modul beze změny, pokud už exportuje CodemodeRuntime. Třídy konektoru nepotřebují žádný speciální název souboru ani syntaxi importu: importujte je běžně a předejte instance runtime.
Bez pluginu přidejte export ručně:
export { CodemodeRuntime } from "@cloudflare/codemode";Import konektoru může směřovat na jeden soubor konektoru nebo na adresář. Import adresáře reexportuje každý odpovídající soubor konektoru v daném adresáři.