Skip to content

API Reference

This page documents the primary TypeScript APIs available in @agentctx/core.

The core parser that converts CTX strings into typed ASTs.

const parser = new CTXParser();

Parse a single CTX statement:

// Strict mode (default)
const stmt: CTXStatement = parser.parse('?k "auth" #code ^3');
// Hybrid mode
const result: CTXHybridResult = parser.parse(
'Search for ?k "auth" #code ^3',
{ mode: 'hybrid' }
);

Parameters:

NameTypeDescription
inputstringRaw CTX string
optionsCTXParseOptionsOptional: { mode, depth }

Returns: CTXStatement (strict) or CTXHybridResult (hybrid)

Throws: CTXParseError with typed data.code

Parse multiple newline-separated statements:

const stmts: CTXStatement[] = parser.parseMulti(`
?t github
>t github.issues.list state="open"
`);

The central request router and middleware pipeline.

const gateway = new Gateway(config, knowledge, memory);

Process a raw CTX string through the full middleware pipeline:

const result: GatewayResult = await gateway.process('?k "auth" ^3');
// { ok: true, op: "?k", ms: 4, data: { results: [...] } }

Shutdown the gateway and all backend connections:

await gateway.close();

Deterministic translation engine with Ed25519 signing.

const sidecar = new Sidecar(); // Default emitters
const sidecar = new Sidecar(registry); // Custom emitter registry

Translate a CTX AST to a target language:

const translation: Translation = sidecar.translate(ast, 'human');
// { source: "?k ...", target: "human", output: "Searched for...", timestamp: "..." }

Translate multiple statements:

const translation: Translation = sidecar.translateBatch(asts, 'surrealql');

Translate, sign with Ed25519, and write to .context/translations/:

const signed: SignedTranslation = await sidecar.signAndWrite(ast, crypto, contextDir);
// { ctx, human, signature, digest, timestamp }

Ed25519 keypair management and signing.

Initialize or load existing keypair:

const crypto = new CryptoManager(contextDir);
await crypto.init();

Sign a CTX↔human translation pair:

const signed = await crypto.signTranslation(ctxRaw, humanOutput);
interface CTXStatement {
operator: CTXOperator; // "?" | "!" | ">" | "+" | "~" | "-" | "^"
plane: CTXPlane; // "k" | "t" | "s" | "m" | "a" | "i" | "l"
verb?: CTXVerb; // Pipeline verb
decorator?: CTXDecorator; // @similar, @traverse, etc.
target: string; // Target identifier or query
filters: CTXFilter[]; // Tag, time, limit, etc.
payload?: CTXPayload; // Key-value pairs or quoted string
raw: string; // Original normalized input
}
interface GatewayResult {
ok: boolean;
op: string;
ms: number;
data: unknown;
error?: string;
code?: string;
}
interface Translation {
source: string;
target: TranslationTarget;
output: string;
timestamp: string;
}