@prompty/core 0.1.4 → 2.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tracing/tracer.ts","../src/index.ts","../src/core/types.ts","../src/core/registry.ts","../src/core/connections.ts","../src/core/loader.ts","../src/model/context.ts","../src/model/connection.ts","../src/model/model-options.ts","../src/model/model.ts","../src/model/property.ts","../src/model/format.ts","../src/model/parser.ts","../src/model/template.ts","../src/model/binding.ts","../src/model/mcp-approval-mode.ts","../src/model/tool.ts","../src/model/prompty.ts","../src/renderers/common.ts","../src/core/pipeline.ts","../src/renderers/nunjucks.ts","../src/renderers/mustache.ts","../src/parsers/prompty.ts","../src/tracing/index.ts","../src/tracing/console.ts","../src/tracing/promptyTracer.ts"],"sourcesContent":["/**\n * Tracing framework — multi-backend registry with function wrappers.\n *\n * Matches the Python tracing architecture:\n * - `Tracer` registry holds named backends\n * - `trace()` wraps async functions with span tracking\n * - `traceSpan()` creates manual spans\n * - Each backend receives `(key, value)` events\n *\n * @module\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A tracer backend receives (key, value) events for a span. */\nexport type TracerBackend = (key: string, value: unknown) => void;\n\n/** Factory: given a span signature, return a backend (or null to skip). */\nexport type TracerFactory = (signature: string) => TracerBackend | null;\n\n// ---------------------------------------------------------------------------\n// Tracer Registry\n// ---------------------------------------------------------------------------\n\nconst backends = new Map<string, TracerFactory>();\n\nexport const Tracer = {\n /**\n * Register a tracer backend.\n *\n * @param name - Unique name for this backend.\n * @param factory - Called for each new span; return a callback or null.\n */\n add(name: string, factory: TracerFactory): void {\n backends.set(name, factory);\n },\n\n /** Remove a tracer backend by name. */\n remove(name: string): void {\n backends.delete(name);\n },\n\n /** Remove all backends. */\n clear(): void {\n backends.clear();\n },\n\n /**\n * Start a new trace span. Returns a callback for emitting events\n * and a `end()` function to close the span.\n */\n start(signature: string): SpanEmitter {\n const active: TracerBackend[] = [];\n for (const factory of backends.values()) {\n const backend = factory(signature);\n if (backend) active.push(backend);\n }\n\n const emit: SpanEmitter = (key: string, value: unknown) => {\n for (const b of active) {\n try {\n b(key, value);\n } catch {\n // tracer errors should never crash the pipeline\n }\n }\n };\n emit.end = () => {\n emit(\"__end__\", Date.now());\n };\n return emit;\n },\n};\n\nexport interface SpanEmitter {\n (key: string, value: unknown): void;\n end: () => void;\n}\n\n// ---------------------------------------------------------------------------\n// trace() — function wrapper\n// ---------------------------------------------------------------------------\n\n/**\n * Wrap an async function with tracing.\n *\n * Creates a span with the function name, traces inputs and output,\n * and measures duration.\n *\n * @param fn - The async function to wrap.\n * @param name - Optional span name (defaults to `fn.name`).\n * @returns Wrapped function with same signature.\n */\nexport function trace<T extends (...args: unknown[]) => Promise<unknown>>(\n fn: T,\n name?: string,\n): T {\n const spanName = name ?? fn.name ?? \"anonymous\";\n\n const wrapped = async function (this: unknown, ...args: unknown[]): Promise<unknown> {\n const span = Tracer.start(spanName);\n const startTime = Date.now();\n\n try {\n span(\"inputs\", sanitizeValue(\"inputs\", args));\n const result = await fn.apply(this, args);\n span(\"result\", result);\n span(\"duration_ms\", Date.now() - startTime);\n span.end();\n return result;\n } catch (err) {\n span(\"error\", err instanceof Error ? err.message : String(err));\n span(\"duration_ms\", Date.now() - startTime);\n span.end();\n throw err;\n }\n } as unknown as T;\n\n // Preserve function name for debugging\n Object.defineProperty(wrapped, \"name\", { value: spanName });\n return wrapped;\n}\n\n// ---------------------------------------------------------------------------\n// traceSpan() — manual span creation\n// ---------------------------------------------------------------------------\n\n/**\n * Execute a callback within a traced span.\n *\n * @param name - Span name.\n * @param fn - Callback receiving a `(key, value)` emitter.\n * @returns The callback's return value.\n */\nexport async function traceSpan<T>(\n name: string,\n fn: (emit: (key: string, value: unknown) => void) => Promise<T>,\n): Promise<T> {\n const span = Tracer.start(name);\n const startTime = Date.now();\n\n try {\n const result = await fn(span);\n span(\"duration_ms\", Date.now() - startTime);\n span.end();\n return result;\n } catch (err) {\n span(\"error\", err instanceof Error ? err.message : String(err));\n span(\"duration_ms\", Date.now() - startTime);\n span.end();\n throw err;\n }\n}\n\n// ---------------------------------------------------------------------------\n// @trace() — method decorator\n// ---------------------------------------------------------------------------\n\n/**\n * Method decorator that wraps a class method with tracing.\n *\n * ```typescript\n * class MyService {\n * @traceMethod()\n * async chat(question: string): Promise<string> { ... }\n * }\n * ```\n *\n * @param attributes - Optional key-value pairs to emit at the start of each span.\n */\nexport function traceMethod(attributes?: Record<string, unknown>) {\n return function (\n _target: unknown,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n const original = descriptor.value;\n\n descriptor.value = async function (this: unknown, ...args: unknown[]): Promise<unknown> {\n const span = Tracer.start(propertyKey);\n const startTime = Date.now();\n\n try {\n // Emit optional attributes\n if (attributes) {\n for (const [k, v] of Object.entries(attributes)) {\n span(k, v);\n }\n }\n\n span(\"inputs\", sanitizeValue(\"inputs\", args));\n const result = await original.apply(this, args);\n span(\"result\", result);\n span(\"duration_ms\", Date.now() - startTime);\n span.end();\n return result;\n } catch (err) {\n span(\"error\", err instanceof Error ? err.message : String(err));\n span(\"duration_ms\", Date.now() - startTime);\n span.end();\n throw err;\n }\n };\n\n // Preserve the original function name\n Object.defineProperty(descriptor.value, \"name\", { value: propertyKey });\n return descriptor;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Sanitization\n// ---------------------------------------------------------------------------\n\n// Matches genuinely sensitive key names while avoiding false positives:\n// - `api_?key` matches apiKey, api_key but NOT primary_key, sort_key\n// - `token(?!s)` matches auth_token but NOT prompt_tokens, total_tokens\n// - `auth(?!ors?\\b)` matches authorization but NOT author, authors\n// - `secret|password|credential|passphrase|bearer` are always sensitive\nconst SENSITIVE_PATTERN =\n /secret|password|credential|passphrase|bearer|api[_.]?key|token(?!s)|auth(?!ors?\\b)/i;\n\n/** Redact sensitive values from trace output. */\nexport function sanitizeValue(key: string, value: unknown): unknown {\n if (typeof key === \"string\" && SENSITIVE_PATTERN.test(key)) {\n return \"***REDACTED***\";\n }\n\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n const record = value as Record<string, unknown>;\n const sanitized: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(record)) {\n sanitized[k] = sanitizeValue(k, v);\n }\n return sanitized;\n }\n\n if (Array.isArray(value)) {\n return value.map((v, i) => sanitizeValue(String(i), v));\n }\n\n return value;\n}\n\n/**\n * Convert an arbitrary object to a JSON-serializable form.\n * Handles Date, Error, Map, Set, etc.\n */\nexport function toSerializable(obj: unknown): unknown {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj === \"boolean\" || typeof obj === \"number\" || typeof obj === \"string\") return obj;\n if (obj instanceof Date) return obj.toISOString();\n if (obj instanceof Error) return { name: obj.name, message: obj.message, stack: obj.stack };\n if (obj instanceof Map) return Object.fromEntries(obj);\n if (obj instanceof Set) return [...obj];\n if (Array.isArray(obj)) return obj.map(toSerializable);\n if (typeof obj === \"object\") {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n result[k] = toSerializable(v);\n }\n return result;\n }\n return String(obj);\n}\n","/**\n * @prompty/core — load, render, parse, and trace .prompty files.\n *\n * This is the core package. It provides the loader, pipeline, types,\n * registry, renderers, parsers, and tracing. Provider packages\n * (@prompty/openai, @prompty/foundry, etc.) register their\n * executor/processor implementations separately.\n *\n * @module @prompty/core\n */\n\n// ---------------------------------------------------------------------------\n// Core types & interfaces\n// ---------------------------------------------------------------------------\n\nexport {\n // Types\n type ContentPart,\n type TextPart,\n type ImagePart,\n type FilePart,\n type AudioPart,\n type Role,\n type ToolCall,\n Message,\n ThreadMarker,\n PromptyStream,\n RICH_KINDS,\n ROLES,\n text,\n textMessage,\n dictToMessage,\n dictContentToPart,\n\n // Interfaces\n type Renderer,\n type Parser,\n type Executor,\n type Processor,\n\n // Registry\n registerRenderer,\n registerParser,\n registerExecutor,\n registerProcessor,\n getRenderer,\n getParser,\n getExecutor,\n getProcessor,\n clearCache,\n InvokerError,\n\n // Connections\n registerConnection,\n getConnection,\n clearConnections,\n\n // Loader\n load,\n\n // Pipeline functions\n validateInputs,\n render,\n parse,\n process,\n prepare,\n run,\n execute,\n executeAgent,\n runAgent,\n} from \"./core/index.js\";\n\n// ---------------------------------------------------------------------------\n// Implementations (core-provided: renderers + parsers only)\n// ---------------------------------------------------------------------------\n\nexport { NunjucksRenderer, MustacheRenderer } from \"./renderers/index.js\";\nexport { PromptyChatParser } from \"./parsers/index.js\";\n\n// ---------------------------------------------------------------------------\n// Tracing\n// ---------------------------------------------------------------------------\n\nexport {\n Tracer,\n trace,\n traceMethod,\n traceSpan,\n sanitizeValue,\n toSerializable,\n consoleTracer,\n PromptyTracer,\n type TracerBackend,\n type TracerFactory,\n type SpanEmitter,\n} from \"./tracing/index.js\";\n\n// ---------------------------------------------------------------------------\n// Re-export generated model types\n// ---------------------------------------------------------------------------\n\nexport {\n Prompty,\n Model,\n ModelOptions,\n Template,\n Format,\n Parser as SchemaParser,\n Property,\n ArrayProperty,\n ObjectProperty,\n Connection,\n ApiKeyConnection,\n ReferenceConnection,\n RemoteConnection,\n AnonymousConnection,\n FoundryConnection,\n OAuthConnection,\n LoadContext,\n SaveContext,\n Tool,\n FunctionTool,\n CustomTool,\n McpTool,\n OpenApiTool,\n McpApprovalMode,\n Binding,\n} from \"./model/index.js\";\n\n// Backward-compat aliases (will be removed in a future version)\nexport { Prompty as PromptAgent } from \"./model/index.js\";\nexport { Prompty as AgentDefinition } from \"./model/index.js\";\n\n// ---------------------------------------------------------------------------\n// Auto-register built-in renderers and parsers\n// ---------------------------------------------------------------------------\n\nimport { registerRenderer, registerParser } from \"./core/registry.js\";\nimport { NunjucksRenderer } from \"./renderers/nunjucks.js\";\nimport { MustacheRenderer } from \"./renderers/mustache.js\";\nimport { PromptyChatParser } from \"./parsers/prompty.js\";\n\n// Renderers\nregisterRenderer(\"nunjucks\", new NunjucksRenderer());\nregisterRenderer(\"jinja2\", new NunjucksRenderer()); // jinja2 alias → nunjucks\nregisterRenderer(\"mustache\", new MustacheRenderer());\n\n// Parsers\nregisterParser(\"prompty\", new PromptyChatParser());\n","/**\n * Core message types for the Prompty pipeline.\n *\n * These types are protocol-agnostic — they represent the abstract\n * message format that executors translate to provider-specific\n * wire formats (e.g., OpenAI JSON).\n *\n * @module\n */\n\n// ---------------------------------------------------------------------------\n// Content Parts (discriminated union by `kind`)\n// ---------------------------------------------------------------------------\n\n/** Base shape shared by all content parts. */\ninterface ContentPartBase {\n kind: string;\n}\n\n/** Plain text content. */\nexport interface TextPart extends ContentPartBase {\n kind: \"text\";\n value: string;\n}\n\n/** Image reference (URL or base64 data URI). */\nexport interface ImagePart extends ContentPartBase {\n kind: \"image\";\n source: string;\n detail?: string;\n mediaType?: string;\n}\n\n/** File reference. */\nexport interface FilePart extends ContentPartBase {\n kind: \"file\";\n source: string;\n mediaType?: string;\n}\n\n/** Audio reference (URL or base64 data URI). */\nexport interface AudioPart extends ContentPartBase {\n kind: \"audio\";\n source: string;\n mediaType?: string;\n}\n\n/** Discriminated union of all content part types. */\nexport type ContentPart = TextPart | ImagePart | FilePart | AudioPart;\n\n// ---------------------------------------------------------------------------\n// Message\n// ---------------------------------------------------------------------------\n\n/** Valid message roles. */\nexport type Role = \"system\" | \"user\" | \"assistant\" | \"developer\" | \"tool\";\n\n/**\n * An abstract message in the Prompty pipeline.\n *\n * Executors convert this to provider-specific wire format.\n * Parsers produce this from rendered template text.\n */\nexport class Message {\n role: Role;\n parts: ContentPart[];\n metadata: Record<string, unknown>;\n\n constructor(\n role: Role,\n parts: ContentPart[] = [],\n metadata: Record<string, unknown> = {},\n ) {\n this.role = role;\n this.parts = parts;\n this.metadata = metadata;\n }\n\n /** Concatenate all TextPart values into a single string. */\n get text(): string {\n return this.parts\n .filter((p): p is TextPart => p.kind === \"text\")\n .map((p) => p.value)\n .join(\"\");\n }\n\n /**\n * Return content in a format suitable for wire serialization:\n * - If all parts are text, return a single string.\n * - If multimodal, return an array of content objects.\n */\n toTextContent(): string | Record<string, unknown>[] {\n if (this.parts.length === 1 && this.parts[0].kind === \"text\") {\n return (this.parts[0] as TextPart).value;\n }\n return this.parts.map(partToWireContent);\n }\n}\n\n/** Convert a ContentPart to a generic wire-format object. */\nfunction partToWireContent(part: ContentPart): Record<string, unknown> {\n switch (part.kind) {\n case \"text\":\n return { type: \"text\", text: part.value };\n case \"image\":\n return {\n type: \"image_url\",\n image_url: { url: part.source, ...(part.detail && { detail: part.detail }) },\n };\n case \"file\":\n return { type: \"file\", file: { url: part.source } };\n case \"audio\":\n return {\n type: \"input_audio\",\n input_audio: {\n data: part.source,\n ...(part.mediaType && { format: part.mediaType }),\n },\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Thread Marker\n// ---------------------------------------------------------------------------\n\n/**\n * Positional marker for conversation history insertion.\n *\n * During `prepare()`, nonce strings in rendered text are replaced\n * with ThreadMarker objects. Then `expandThreadMarkers()` replaces\n * them with actual conversation messages from the inputs.\n */\nexport class ThreadMarker {\n readonly name: string;\n constructor(name: string) {\n this.name = name;\n }\n}\n\n// ---------------------------------------------------------------------------\n// ToolCall\n// ---------------------------------------------------------------------------\n\n/** Represents a tool call extracted from an LLM response. */\nexport interface ToolCall {\n id: string;\n name: string;\n arguments: string;\n}\n\n// ---------------------------------------------------------------------------\n// Rich Input Kinds\n// ---------------------------------------------------------------------------\n\n/**\n * Input kinds that receive special handling in the pipeline\n * (nonce-based substitution rather than direct template interpolation).\n */\nexport const RICH_KINDS = new Set([\"thread\", \"image\", \"file\", \"audio\"]);\n\n/** Standard message roles. */\nexport const ROLES = new Set<Role>([\"system\", \"user\", \"assistant\", \"developer\", \"tool\"]);\n\n// ---------------------------------------------------------------------------\n// Streaming\n// ---------------------------------------------------------------------------\n\n/**\n * Tracing-aware wrapper for asynchronous LLM streaming responses.\n *\n * Accumulates all chunks as they are yielded. When the async iterator\n * is exhausted, the accumulated items are flushed to the tracer.\n *\n * Matches the Python PromptyStream / AsyncPromptyStream pattern.\n */\nexport class PromptyStream implements AsyncIterable<unknown> {\n readonly name: string;\n private readonly inner: AsyncIterable<unknown>;\n readonly items: unknown[] = [];\n\n constructor(name: string, inner: AsyncIterable<unknown>) {\n this.name = name;\n this.inner = inner;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<unknown> {\n // Lazy import to avoid circular deps\n const { Tracer } = await import(\"../tracing/tracer.js\");\n\n try {\n for await (const chunk of this.inner) {\n this.items.push(chunk);\n yield chunk;\n }\n } finally {\n // Flush accumulated items to tracer when stream is exhausted\n if (this.items.length > 0) {\n const span = Tracer.start(\"PromptyStream\");\n span(\"signature\", `${this.name}.PromptyStream`);\n span(\"inputs\", \"None\");\n span(\"result\", this.items);\n span.end();\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Create a TextPart. */\nexport function text(value: string): TextPart {\n return { kind: \"text\", value };\n}\n\n/** Create a Message with a single text part. */\nexport function textMessage(role: Role, value: string, metadata: Record<string, unknown> = {}): Message {\n return new Message(role, [text(value)], metadata);\n}\n\n/** Convert a plain dict `{role, content, ...}` to a Message. */\nexport function dictToMessage(d: Record<string, unknown>): Message {\n const role = (d.role as Role) ?? \"user\";\n const metadata: Record<string, unknown> = {};\n const parts: ContentPart[] = [];\n\n // Copy non-role, non-content keys to metadata\n for (const [k, v] of Object.entries(d)) {\n if (k !== \"role\" && k !== \"content\") {\n metadata[k] = v;\n }\n }\n\n const content = d.content;\n if (typeof content === \"string\") {\n parts.push(text(content));\n } else if (Array.isArray(content)) {\n for (const item of content) {\n if (typeof item === \"string\") {\n parts.push(text(item));\n } else if (typeof item === \"object\" && item !== null) {\n parts.push(dictContentToPart(item as Record<string, unknown>));\n }\n }\n }\n\n return new Message(role, parts, metadata);\n}\n\n/** Convert a content dict to a ContentPart. */\nexport function dictContentToPart(d: Record<string, unknown>): ContentPart {\n const type = (d.type as string) ?? (d.kind as string) ?? \"text\";\n switch (type) {\n case \"text\":\n return { kind: \"text\", value: (d.text ?? d.value ?? \"\") as string };\n case \"image_url\":\n case \"image\": {\n const img = (d.image_url ?? d) as Record<string, unknown>;\n return {\n kind: \"image\",\n source: (img.url ?? img.source ?? \"\") as string,\n detail: img.detail as string | undefined,\n mediaType: img.media_type as string | undefined,\n };\n }\n case \"file\":\n return {\n kind: \"file\",\n source: (d.url ?? d.source ?? \"\") as string,\n mediaType: d.media_type as string | undefined,\n };\n case \"input_audio\":\n case \"audio\": {\n const audio = (d.input_audio ?? d) as Record<string, unknown>;\n return {\n kind: \"audio\",\n source: (audio.data ?? audio.source ?? \"\") as string,\n mediaType: (audio.format ?? audio.media_type) as string | undefined,\n };\n }\n default:\n return { kind: \"text\", value: JSON.stringify(d) };\n }\n}\n","/**\n * Plugin registry for Prompty pipeline components.\n *\n * TypeScript doesn't have Python's entry-point system, so we use\n * explicit registration. Built-in implementations are registered\n * when the package is imported (see src/index.ts).\n *\n * Third-party plugins call `registerRenderer()`, etc. at module load.\n *\n * @module\n */\n\nimport type { Renderer, Parser, Executor, Processor } from \"./interfaces.js\";\n\n// ---------------------------------------------------------------------------\n// Internal Maps\n// ---------------------------------------------------------------------------\n\nconst renderers = new Map<string, Renderer>();\nconst parsers = new Map<string, Parser>();\nconst executors = new Map<string, Executor>();\nconst processors = new Map<string, Processor>();\n\n// ---------------------------------------------------------------------------\n// Registration\n// ---------------------------------------------------------------------------\n\nexport function registerRenderer(key: string, impl: Renderer): void {\n renderers.set(key, impl);\n}\n\nexport function registerParser(key: string, impl: Parser): void {\n parsers.set(key, impl);\n}\n\nexport function registerExecutor(key: string, impl: Executor): void {\n executors.set(key, impl);\n}\n\nexport function registerProcessor(key: string, impl: Processor): void {\n processors.set(key, impl);\n}\n\n// ---------------------------------------------------------------------------\n// Lookup\n// ---------------------------------------------------------------------------\n\nexport class InvokerError extends Error {\n constructor(\n public readonly group: string,\n public readonly key: string,\n ) {\n super(\n `No ${group} registered for key \"${key}\". ` +\n `Register one with register${group.charAt(0).toUpperCase() + group.slice(1)}(\"${key}\", impl) ` +\n `or install a package that provides it.`,\n );\n this.name = \"InvokerError\";\n }\n}\n\nexport function getRenderer(key: string): Renderer {\n const r = renderers.get(key);\n if (!r) throw new InvokerError(\"renderer\", key);\n return r;\n}\n\nexport function getParser(key: string): Parser {\n const p = parsers.get(key);\n if (!p) throw new InvokerError(\"parser\", key);\n return p;\n}\n\nexport function getExecutor(key: string): Executor {\n const e = executors.get(key);\n if (!e) throw new InvokerError(\"executor\", key);\n return e;\n}\n\nexport function getProcessor(key: string): Processor {\n const p = processors.get(key);\n if (!p) throw new InvokerError(\"processor\", key);\n return p;\n}\n\n// ---------------------------------------------------------------------------\n// Cache management\n// ---------------------------------------------------------------------------\n\n/** Clear all registered implementations. Useful in tests. */\nexport function clearCache(): void {\n renderers.clear();\n parsers.clear();\n executors.clear();\n processors.clear();\n}\n","/**\n * Connection registry for pre-configured SDK clients.\n *\n * Executors look up registered connections when\n * `model.connection.kind === \"reference\"`.\n *\n * @module\n */\n\nconst connections = new Map<string, unknown>();\n\n/**\n * Register a pre-configured SDK client by name.\n *\n * @example\n * ```ts\n * import OpenAI from \"openai\";\n * registerConnection(\"my-openai\", new OpenAI({ apiKey: \"sk-...\" }));\n * ```\n */\nexport function registerConnection(name: string, client: unknown): void {\n connections.set(name, client);\n}\n\n/**\n * Look up a registered connection.\n * @throws {Error} if the name is not registered.\n */\nexport function getConnection(name: string): unknown {\n const c = connections.get(name);\n if (c === undefined) {\n throw new Error(\n `Connection \"${name}\" is not registered. ` +\n `Call registerConnection(\"${name}\", client) first.`,\n );\n }\n return c;\n}\n\n/** Remove all registered connections. Useful in tests. */\nexport function clearConnections(): void {\n connections.clear();\n}\n","/**\n * Prompty loader — loads .prompty files into typed Prompty objects.\n *\n * Splits frontmatter (YAML) from the markdown body, resolves\n * `${protocol:value}` references (env vars, file includes),\n * and delegates to `Prompty.load()`.\n *\n * @module\n */\n\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname, extname } from \"node:path\";\nimport matter from \"gray-matter\";\nimport { LoadContext } from \"../model/context.js\";\nimport { Prompty } from \"../model/prompty.js\";\nimport \"dotenv/config\";\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Load a `.prompty` file and return a typed `Prompty`.\n *\n * @param path - File system path to a `.prompty` file.\n * @returns Fully typed Prompty definition.\n */\nexport function load(path: string): Prompty {\n const resolved = resolve(path);\n const raw = readFileSync(resolved, \"utf-8\");\n return buildAgent(raw, resolved);\n}\n\n// ---------------------------------------------------------------------------\n// Internal pipeline\n// ---------------------------------------------------------------------------\n\nfunction buildAgent(raw: string, filePath: string): Prompty {\n // 1. Split frontmatter + body\n const { data, content } = matter(raw);\n\n // If there's a body (instructions), merge it in\n const frontmatter: Record<string, unknown> = data ?? {};\n if (content.trim()) {\n frontmatter.instructions = content.trim();\n }\n\n // 2. Load via Prompty.load() with preProcess for ${protocol:value} expansion\n const ctx = new LoadContext({\n preProcess: makePreProcess(filePath) as (data: Record<string, unknown>) => Record<string, unknown>,\n });\n return Prompty.load(frontmatter, ctx);\n}\n\n// ---------------------------------------------------------------------------\n// Reference resolution via preProcess\n// ---------------------------------------------------------------------------\n\n/**\n * Return a `preProcess` callback that resolves `${protocol:value}`\n * references in every dict the loader visits.\n *\n * Supported protocols:\n * - `${env:VAR_NAME}` — environment variable (required)\n * - `${env:VAR_NAME:default}` — environment variable with default\n * - `${file:relative/path}` — load file content (JSON/YAML/text)\n */\nfunction makePreProcess(agentFile: string): (data: unknown) => unknown {\n const agentDir = dirname(agentFile);\n\n return (data: unknown): unknown => {\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n return data;\n }\n\n const record = data as Record<string, unknown>;\n for (const [key, value] of Object.entries(record)) {\n if (typeof value !== \"string\" || !value.startsWith(\"${\") || !value.endsWith(\"}\")) {\n continue;\n }\n\n const inner = value.slice(2, -1);\n const colonIdx = inner.indexOf(\":\");\n if (colonIdx === -1) continue;\n\n const protocol = inner.slice(0, colonIdx).toLowerCase();\n const val = inner.slice(colonIdx + 1);\n\n if (protocol === \"env\") {\n // Support ${env:VAR:default}\n const nextColon = val.indexOf(\":\");\n const varName = nextColon === -1 ? val : val.slice(0, nextColon);\n const defaultVal = nextColon === -1 ? undefined : val.slice(nextColon + 1);\n\n const envVal = process.env[varName];\n if (envVal !== undefined) {\n record[key] = envVal;\n } else if (defaultVal !== undefined) {\n record[key] = defaultVal;\n } else {\n throw new Error(\n `Environment variable '${varName}' not set for key '${key}'`,\n );\n }\n } else if (protocol === \"file\") {\n const filePath = resolve(agentDir, val);\n record[key] = loadFileContent(filePath);\n }\n }\n\n return record;\n };\n}\n\nfunction loadFileContent(path: string): unknown {\n const raw = readFileSync(path, \"utf-8\");\n const ext = extname(path).toLowerCase();\n\n if (ext === \".json\") {\n return JSON.parse(raw);\n }\n // For YAML we return raw string — the loader handles YAML natively\n return raw;\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport * as yaml from \"yaml\";\n\n/**\n * Context for customizing the loading process of agent definitions.\n *\n * Provides hooks for pre-processing input data before parsing and\n * post-processing output data after instantiation.\n */\nexport class LoadContext {\n /**\n * Optional callback to transform input data before parsing.\n */\n preProcess?: (data: Record<string, unknown>) => Record<string, unknown>;\n\n /**\n * Optional callback to transform the result after instantiation.\n */\n postProcess?: (result: unknown) => unknown;\n\n constructor(init?: Partial<LoadContext>) {\n if (init?.preProcess) {\n this.preProcess = init.preProcess;\n }\n if (init?.postProcess) {\n this.postProcess = init.postProcess;\n }\n }\n\n /**\n * Apply pre-processing to input data if a preProcess callback is set.\n * @param data - The raw input dictionary to process.\n * @returns The processed dictionary, or the original if no callback is set.\n */\n processInput(data: Record<string, unknown>): Record<string, unknown> {\n if (this.preProcess) {\n return this.preProcess(data);\n }\n return data;\n }\n\n /**\n * Apply post-processing to the result if a postProcess callback is set.\n * @param result - The instantiated object to process.\n * @returns The processed result, or the original if no callback is set.\n */\n processOutput<T>(result: T): T {\n if (this.postProcess) {\n return this.postProcess(result) as T;\n }\n return result;\n }\n}\n\n/**\n * Context for customizing the serialization process of agent definitions.\n *\n * Provides hooks for pre-processing the object before serialization and\n * post-processing the dictionary after serialization.\n */\nexport class SaveContext {\n /**\n * Optional callback to transform the object before serialization.\n */\n preSave?: (obj: unknown) => unknown;\n\n /**\n * Optional callback to transform the dictionary after serialization.\n */\n postSave?: (data: Record<string, unknown>) => Record<string, unknown>;\n\n /**\n * Output format for collections: \"object\" (name as key) or \"array\" (list of dicts).\n * Defaults to \"object\".\n */\n collectionFormat: \"object\" | \"array\" = \"object\";\n\n /**\n * Use shorthand scalar representation when possible.\n * Defaults to true.\n */\n useShorthand: boolean = true;\n\n constructor(init?: Partial<SaveContext>) {\n if (init?.preSave) {\n this.preSave = init.preSave;\n }\n if (init?.postSave) {\n this.postSave = init.postSave;\n }\n if (init?.collectionFormat) {\n this.collectionFormat = init.collectionFormat;\n }\n if (init?.useShorthand !== undefined) {\n this.useShorthand = init.useShorthand;\n }\n }\n\n /**\n * Apply pre-processing to the object if a preSave callback is set.\n * @param obj - The object to process before serialization.\n * @returns The processed object, or the original if no callback is set.\n */\n processObject<T>(obj: T): T {\n if (this.preSave) {\n return this.preSave(obj) as T;\n }\n return obj;\n }\n\n /**\n * Apply post-processing to the dictionary if a postSave callback is set.\n * @param data - The serialized dictionary to process.\n * @returns The processed dictionary, or the original if no callback is set.\n */\n processDict(data: Record<string, unknown>): Record<string, unknown> {\n if (this.postSave) {\n return this.postSave(data);\n }\n return data;\n }\n\n /**\n * Convert a dictionary to a YAML string.\n * @param data - The dictionary to convert.\n * @returns The YAML string representation.\n */\n toYaml(data: Record<string, unknown>): string {\n return yaml.stringify(data, { indent: 2 });\n }\n\n /**\n * Convert a dictionary to a JSON string.\n * @param data - The dictionary to convert.\n * @param indent - Number of spaces for indentation.\n * @returns The JSON string representation.\n */\n toJson(data: Record<string, unknown>, indent: number = 2): string {\n return JSON.stringify(data, null, indent);\n }\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\n\n/**\n * Connection configuration for AI agents.\n * `provider`, `kind`, and `endpoint` are required properties here,\n * but this section can accept additional via options.\n *\n */\nexport abstract class Connection {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The Authentication kind for the AI service (e.g., 'key' for API key, 'oauth' for OAuth tokens)\n */\n kind: string = \"\";\n\n /**\n * The authority level for the connection, indicating under whose authority the connection is made (e.g., 'user', 'agent', 'system')\n */\n authenticationMode: string = \"system\";\n\n /**\n * The usage description for the connection, providing context on how this connection will be used\n */\n usageDescription?: string | undefined;\n\n /**\n * Initializes a new instance of Connection.\n */\n constructor(init?: Partial<Connection>) {\n this.kind = init?.kind ?? \"\";\n\n this.authenticationMode = init?.authenticationMode ?? \"system\";\n\n if (init?.usageDescription !== undefined) {\n this.usageDescription = init.usageDescription;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a Connection instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Connection instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): Connection {\n if (context) {\n data = context.processInput(data);\n }\n\n // Load polymorphic Connection instance\n const instance = Connection.loadKind(data, context);\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (\n data[\"authenticationMode\"] !== undefined &&\n data[\"authenticationMode\"] !== null\n ) {\n instance.authenticationMode = String(data[\"authenticationMode\"]);\n }\n\n if (\n data[\"usageDescription\"] !== undefined &&\n data[\"usageDescription\"] !== null\n ) {\n instance.usageDescription = String(data[\"usageDescription\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as Connection;\n }\n return instance;\n }\n\n /**\n * Load polymorphic Connection based on discriminator.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Connection instance.\n */\n private static loadKind(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): Connection {\n const discriminatorValue = data[\"kind\"];\n if (discriminatorValue !== undefined && discriminatorValue !== null) {\n const discriminator = String(discriminatorValue).toLowerCase();\n switch (discriminator) {\n case \"reference\":\n return ReferenceConnection.load(data, context);\n case \"remote\":\n return RemoteConnection.load(data, context);\n case \"key\":\n return ApiKeyConnection.load(data, context);\n case \"anonymous\":\n return AnonymousConnection.load(data, context);\n case \"foundry\":\n return FoundryConnection.load(data, context);\n case \"oauth\":\n return OAuthConnection.load(data, context);\n default:\n throw new Error(\n `Unknown Connection discriminator value: ${discriminator}`,\n );\n }\n }\n\n throw new Error(\"Missing Connection discriminator property: 'kind'\");\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Connection instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Connection) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (\n obj.authenticationMode !== undefined &&\n obj.authenticationMode !== null\n ) {\n result[\"authenticationMode\"] = obj.authenticationMode;\n }\n\n if (obj.usageDescription !== undefined && obj.usageDescription !== null) {\n result[\"usageDescription\"] = obj.usageDescription;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the Connection instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Connection instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Connection instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Connection instance.\n */\n static fromJson(json: string, context?: LoadContext): Connection {\n const data = JSON.parse(json);\n\n return Connection.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Connection instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Connection instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Connection {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return Connection.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Connection configuration for AI services using named connections.\n *\n */\nexport class ReferenceConnection extends Connection {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The Authentication kind for the AI service (e.g., 'key' for API key, 'oauth' for OAuth tokens)\n */\n kind: string = \"reference\";\n\n /**\n * The name of the connection\n */\n name: string = \"\";\n\n /**\n * The target resource or service that this connection refers to\n */\n target?: string | undefined;\n\n /**\n * Initializes a new instance of ReferenceConnection.\n */\n constructor(init?: Partial<ReferenceConnection>) {\n super(init);\n\n this.kind = init?.kind ?? \"reference\";\n\n this.name = init?.name ?? \"\";\n\n if (init?.target !== undefined) {\n this.target = init.target;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a ReferenceConnection instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ReferenceConnection instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): ReferenceConnection {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new ReferenceConnection();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"name\"] !== undefined && data[\"name\"] !== null) {\n instance.name = String(data[\"name\"]);\n }\n\n if (data[\"target\"] !== undefined && data[\"target\"] !== null) {\n instance.target = String(data[\"target\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as ReferenceConnection;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the ReferenceConnection instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as ReferenceConnection)\n : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.name !== undefined && obj.name !== null) {\n result[\"name\"] = obj.name;\n }\n\n if (obj.target !== undefined && obj.target !== null) {\n result[\"target\"] = obj.target;\n }\n\n return result;\n }\n\n /**\n * Convert the ReferenceConnection instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the ReferenceConnection instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a ReferenceConnection instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ReferenceConnection instance.\n */\n static fromJson(json: string, context?: LoadContext): ReferenceConnection {\n const data = JSON.parse(json);\n\n return ReferenceConnection.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a ReferenceConnection instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ReferenceConnection instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): ReferenceConnection {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return ReferenceConnection.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Connection configuration for AI services using named connections.\n *\n */\nexport class RemoteConnection extends Connection {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The Authentication kind for the AI service (e.g., 'key' for API key, 'oauth' for OAuth tokens)\n */\n kind: string = \"remote\";\n\n /**\n * The name of the connection\n */\n name: string = \"\";\n\n /**\n * The endpoint URL for the AI service\n */\n endpoint: string = \"\";\n\n /**\n * Initializes a new instance of RemoteConnection.\n */\n constructor(init?: Partial<RemoteConnection>) {\n super(init);\n\n this.kind = init?.kind ?? \"remote\";\n\n this.name = init?.name ?? \"\";\n\n this.endpoint = init?.endpoint ?? \"\";\n }\n\n //#region Load Methods\n\n /**\n * Load a RemoteConnection instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded RemoteConnection instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): RemoteConnection {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new RemoteConnection();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"name\"] !== undefined && data[\"name\"] !== null) {\n instance.name = String(data[\"name\"]);\n }\n\n if (data[\"endpoint\"] !== undefined && data[\"endpoint\"] !== null) {\n instance.endpoint = String(data[\"endpoint\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as RemoteConnection;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the RemoteConnection instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as RemoteConnection)\n : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.name !== undefined && obj.name !== null) {\n result[\"name\"] = obj.name;\n }\n\n if (obj.endpoint !== undefined && obj.endpoint !== null) {\n result[\"endpoint\"] = obj.endpoint;\n }\n\n return result;\n }\n\n /**\n * Convert the RemoteConnection instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the RemoteConnection instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a RemoteConnection instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded RemoteConnection instance.\n */\n static fromJson(json: string, context?: LoadContext): RemoteConnection {\n const data = JSON.parse(json);\n\n return RemoteConnection.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a RemoteConnection instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded RemoteConnection instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): RemoteConnection {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return RemoteConnection.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Connection configuration for AI services using API keys.\n *\n */\nexport class ApiKeyConnection extends Connection {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The Authentication kind for the AI service (e.g., 'key' for API key, 'oauth' for OAuth tokens)\n */\n kind: string = \"key\";\n\n /**\n * The endpoint URL for the AI service\n */\n endpoint: string = \"\";\n\n /**\n * The API key for authenticating with the AI service\n */\n apiKey: string = \"\";\n\n /**\n * Initializes a new instance of ApiKeyConnection.\n */\n constructor(init?: Partial<ApiKeyConnection>) {\n super(init);\n\n this.kind = init?.kind ?? \"key\";\n\n this.endpoint = init?.endpoint ?? \"\";\n\n this.apiKey = init?.apiKey ?? \"\";\n }\n\n //#region Load Methods\n\n /**\n * Load a ApiKeyConnection instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ApiKeyConnection instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): ApiKeyConnection {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new ApiKeyConnection();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"endpoint\"] !== undefined && data[\"endpoint\"] !== null) {\n instance.endpoint = String(data[\"endpoint\"]);\n }\n\n if (data[\"apiKey\"] !== undefined && data[\"apiKey\"] !== null) {\n instance.apiKey = String(data[\"apiKey\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as ApiKeyConnection;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the ApiKeyConnection instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as ApiKeyConnection)\n : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.endpoint !== undefined && obj.endpoint !== null) {\n result[\"endpoint\"] = obj.endpoint;\n }\n\n if (obj.apiKey !== undefined && obj.apiKey !== null) {\n result[\"apiKey\"] = obj.apiKey;\n }\n\n return result;\n }\n\n /**\n * Convert the ApiKeyConnection instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the ApiKeyConnection instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a ApiKeyConnection instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ApiKeyConnection instance.\n */\n static fromJson(json: string, context?: LoadContext): ApiKeyConnection {\n const data = JSON.parse(json);\n\n return ApiKeyConnection.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a ApiKeyConnection instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ApiKeyConnection instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): ApiKeyConnection {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return ApiKeyConnection.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n *\n *\n */\nexport class AnonymousConnection extends Connection {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The Authentication kind for the AI service (e.g., 'key' for API key, 'oauth' for OAuth tokens)\n */\n kind: string = \"anonymous\";\n\n /**\n * The endpoint for authenticating with the AI service\n */\n endpoint: string = \"\";\n\n /**\n * Initializes a new instance of AnonymousConnection.\n */\n constructor(init?: Partial<AnonymousConnection>) {\n super(init);\n\n this.kind = init?.kind ?? \"anonymous\";\n\n this.endpoint = init?.endpoint ?? \"\";\n }\n\n //#region Load Methods\n\n /**\n * Load a AnonymousConnection instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded AnonymousConnection instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): AnonymousConnection {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new AnonymousConnection();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"endpoint\"] !== undefined && data[\"endpoint\"] !== null) {\n instance.endpoint = String(data[\"endpoint\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as AnonymousConnection;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the AnonymousConnection instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as AnonymousConnection)\n : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.endpoint !== undefined && obj.endpoint !== null) {\n result[\"endpoint\"] = obj.endpoint;\n }\n\n return result;\n }\n\n /**\n * Convert the AnonymousConnection instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the AnonymousConnection instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a AnonymousConnection instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded AnonymousConnection instance.\n */\n static fromJson(json: string, context?: LoadContext): AnonymousConnection {\n const data = JSON.parse(json);\n\n return AnonymousConnection.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a AnonymousConnection instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded AnonymousConnection instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): AnonymousConnection {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return AnonymousConnection.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Connection configuration for Microsoft Foundry projects.\n * Provides project-scoped access to models, tools, and services\n * via Entra ID (DefaultAzureCredential) authentication.\n *\n */\nexport class FoundryConnection extends Connection {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The connection kind for Foundry project access\n */\n kind: string = \"foundry\";\n\n /**\n * The Foundry project endpoint URL\n */\n endpoint: string = \"\";\n\n /**\n * The named connection within the Foundry project\n */\n name?: string | undefined;\n\n /**\n * The connection type within the Foundry project (e.g., 'model', 'index', 'storage')\n */\n connectionType?: string | undefined;\n\n /**\n * Initializes a new instance of FoundryConnection.\n */\n constructor(init?: Partial<FoundryConnection>) {\n super(init);\n\n this.kind = init?.kind ?? \"foundry\";\n\n this.endpoint = init?.endpoint ?? \"\";\n\n if (init?.name !== undefined) {\n this.name = init.name;\n }\n\n if (init?.connectionType !== undefined) {\n this.connectionType = init.connectionType;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a FoundryConnection instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded FoundryConnection instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): FoundryConnection {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new FoundryConnection();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"endpoint\"] !== undefined && data[\"endpoint\"] !== null) {\n instance.endpoint = String(data[\"endpoint\"]);\n }\n\n if (data[\"name\"] !== undefined && data[\"name\"] !== null) {\n instance.name = String(data[\"name\"]);\n }\n\n if (\n data[\"connectionType\"] !== undefined &&\n data[\"connectionType\"] !== null\n ) {\n instance.connectionType = String(data[\"connectionType\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as FoundryConnection;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the FoundryConnection instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as FoundryConnection)\n : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.endpoint !== undefined && obj.endpoint !== null) {\n result[\"endpoint\"] = obj.endpoint;\n }\n\n if (obj.name !== undefined && obj.name !== null) {\n result[\"name\"] = obj.name;\n }\n\n if (obj.connectionType !== undefined && obj.connectionType !== null) {\n result[\"connectionType\"] = obj.connectionType;\n }\n\n return result;\n }\n\n /**\n * Convert the FoundryConnection instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the FoundryConnection instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a FoundryConnection instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded FoundryConnection instance.\n */\n static fromJson(json: string, context?: LoadContext): FoundryConnection {\n const data = JSON.parse(json);\n\n return FoundryConnection.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a FoundryConnection instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded FoundryConnection instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): FoundryConnection {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return FoundryConnection.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Connection configuration using OAuth 2.0 client credentials.\n * Useful for tools and services that require OAuth authentication,\n * such as MCP servers, OpenAPI endpoints, or other REST APIs.\n *\n */\nexport class OAuthConnection extends Connection {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The connection kind for OAuth authentication\n */\n kind: string = \"oauth\";\n\n /**\n * The endpoint URL for the service\n */\n endpoint: string = \"\";\n\n /**\n * The OAuth client ID\n */\n clientId: string = \"\";\n\n /**\n * The OAuth client secret\n */\n clientSecret: string = \"\";\n\n /**\n * The OAuth token endpoint URL\n */\n tokenUrl: string = \"\";\n\n /**\n * OAuth scopes to request\n */\n scopes?: string[] = [];\n\n /**\n * Initializes a new instance of OAuthConnection.\n */\n constructor(init?: Partial<OAuthConnection>) {\n super(init);\n\n this.kind = init?.kind ?? \"oauth\";\n\n this.endpoint = init?.endpoint ?? \"\";\n\n this.clientId = init?.clientId ?? \"\";\n\n this.clientSecret = init?.clientSecret ?? \"\";\n\n this.tokenUrl = init?.tokenUrl ?? \"\";\n\n if (init?.scopes !== undefined) {\n this.scopes = init.scopes;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a OAuthConnection instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded OAuthConnection instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): OAuthConnection {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new OAuthConnection();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"endpoint\"] !== undefined && data[\"endpoint\"] !== null) {\n instance.endpoint = String(data[\"endpoint\"]);\n }\n\n if (data[\"clientId\"] !== undefined && data[\"clientId\"] !== null) {\n instance.clientId = String(data[\"clientId\"]);\n }\n\n if (data[\"clientSecret\"] !== undefined && data[\"clientSecret\"] !== null) {\n instance.clientSecret = String(data[\"clientSecret\"]);\n }\n\n if (data[\"tokenUrl\"] !== undefined && data[\"tokenUrl\"] !== null) {\n instance.tokenUrl = String(data[\"tokenUrl\"]);\n }\n\n if (data[\"scopes\"] !== undefined && data[\"scopes\"] !== null) {\n instance.scopes = Array.isArray(data[\"scopes\"])\n ? (data[\"scopes\"] as unknown[]).map((v) => String(v))\n : [];\n }\n\n if (context) {\n return context.processOutput(instance) as OAuthConnection;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the OAuthConnection instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as OAuthConnection)\n : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.endpoint !== undefined && obj.endpoint !== null) {\n result[\"endpoint\"] = obj.endpoint;\n }\n\n if (obj.clientId !== undefined && obj.clientId !== null) {\n result[\"clientId\"] = obj.clientId;\n }\n\n if (obj.clientSecret !== undefined && obj.clientSecret !== null) {\n result[\"clientSecret\"] = obj.clientSecret;\n }\n\n if (obj.tokenUrl !== undefined && obj.tokenUrl !== null) {\n result[\"tokenUrl\"] = obj.tokenUrl;\n }\n\n if (obj.scopes !== undefined && obj.scopes !== null) {\n result[\"scopes\"] = obj.scopes;\n }\n\n return result;\n }\n\n /**\n * Convert the OAuthConnection instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the OAuthConnection instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a OAuthConnection instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded OAuthConnection instance.\n */\n static fromJson(json: string, context?: LoadContext): OAuthConnection {\n const data = JSON.parse(json);\n\n return OAuthConnection.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a OAuthConnection instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded OAuthConnection instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): OAuthConnection {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return OAuthConnection.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\n\n/**\n * Options for configuring the behavior of the AI model.\n *\n */\nexport class ModelOptions {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The frequency penalty to apply to the model's output\n */\n frequencyPenalty?: number | undefined;\n\n /**\n * The maximum number of tokens to generate in the output\n */\n maxOutputTokens?: number | undefined;\n\n /**\n * The presence penalty to apply to the model's output\n */\n presencePenalty?: number | undefined;\n\n /**\n * A random seed for deterministic output\n */\n seed?: number | undefined;\n\n /**\n * The temperature to use for sampling\n */\n temperature?: number | undefined;\n\n /**\n * The top-K sampling value\n */\n topK?: number | undefined;\n\n /**\n * The top-P sampling value\n */\n topP?: number | undefined;\n\n /**\n * Stop sequences to end generation\n */\n stopSequences?: string[] = [];\n\n /**\n * Whether to allow multiple tool calls in a single response\n */\n allowMultipleToolCalls?: boolean | undefined;\n\n /**\n * Additional custom properties for model options\n */\n additionalProperties?: Record<string, unknown> | undefined = {};\n\n /**\n * Initializes a new instance of ModelOptions.\n */\n constructor(init?: Partial<ModelOptions>) {\n if (init?.frequencyPenalty !== undefined) {\n this.frequencyPenalty = init.frequencyPenalty;\n }\n\n if (init?.maxOutputTokens !== undefined) {\n this.maxOutputTokens = init.maxOutputTokens;\n }\n\n if (init?.presencePenalty !== undefined) {\n this.presencePenalty = init.presencePenalty;\n }\n\n if (init?.seed !== undefined) {\n this.seed = init.seed;\n }\n\n if (init?.temperature !== undefined) {\n this.temperature = init.temperature;\n }\n\n if (init?.topK !== undefined) {\n this.topK = init.topK;\n }\n\n if (init?.topP !== undefined) {\n this.topP = init.topP;\n }\n\n if (init?.stopSequences !== undefined) {\n this.stopSequences = init.stopSequences;\n }\n\n if (init?.allowMultipleToolCalls !== undefined) {\n this.allowMultipleToolCalls = init.allowMultipleToolCalls;\n }\n\n if (init?.additionalProperties !== undefined) {\n this.additionalProperties = init.additionalProperties;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a ModelOptions instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ModelOptions instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): ModelOptions {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new ModelOptions();\n\n if (\n data[\"frequencyPenalty\"] !== undefined &&\n data[\"frequencyPenalty\"] !== null\n ) {\n instance.frequencyPenalty = Number(data[\"frequencyPenalty\"]);\n }\n\n if (\n data[\"maxOutputTokens\"] !== undefined &&\n data[\"maxOutputTokens\"] !== null\n ) {\n instance.maxOutputTokens = Number(data[\"maxOutputTokens\"]);\n }\n\n if (\n data[\"presencePenalty\"] !== undefined &&\n data[\"presencePenalty\"] !== null\n ) {\n instance.presencePenalty = Number(data[\"presencePenalty\"]);\n }\n\n if (data[\"seed\"] !== undefined && data[\"seed\"] !== null) {\n instance.seed = Number(data[\"seed\"]);\n }\n\n if (data[\"temperature\"] !== undefined && data[\"temperature\"] !== null) {\n instance.temperature = Number(data[\"temperature\"]);\n }\n\n if (data[\"topK\"] !== undefined && data[\"topK\"] !== null) {\n instance.topK = Number(data[\"topK\"]);\n }\n\n if (data[\"topP\"] !== undefined && data[\"topP\"] !== null) {\n instance.topP = Number(data[\"topP\"]);\n }\n\n if (data[\"stopSequences\"] !== undefined && data[\"stopSequences\"] !== null) {\n instance.stopSequences = Array.isArray(data[\"stopSequences\"])\n ? (data[\"stopSequences\"] as unknown[]).map((v) => String(v))\n : [];\n }\n\n if (\n data[\"allowMultipleToolCalls\"] !== undefined &&\n data[\"allowMultipleToolCalls\"] !== null\n ) {\n instance.allowMultipleToolCalls = Boolean(data[\"allowMultipleToolCalls\"]);\n }\n\n if (\n data[\"additionalProperties\"] !== undefined &&\n data[\"additionalProperties\"] !== null\n ) {\n instance.additionalProperties = data[\"additionalProperties\"] as Record<\n string,\n unknown\n >;\n }\n\n if (context) {\n return context.processOutput(instance) as ModelOptions;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the ModelOptions instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as ModelOptions) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.frequencyPenalty !== undefined && obj.frequencyPenalty !== null) {\n result[\"frequencyPenalty\"] = obj.frequencyPenalty;\n }\n\n if (obj.maxOutputTokens !== undefined && obj.maxOutputTokens !== null) {\n result[\"maxOutputTokens\"] = obj.maxOutputTokens;\n }\n\n if (obj.presencePenalty !== undefined && obj.presencePenalty !== null) {\n result[\"presencePenalty\"] = obj.presencePenalty;\n }\n\n if (obj.seed !== undefined && obj.seed !== null) {\n result[\"seed\"] = obj.seed;\n }\n\n if (obj.temperature !== undefined && obj.temperature !== null) {\n result[\"temperature\"] = obj.temperature;\n }\n\n if (obj.topK !== undefined && obj.topK !== null) {\n result[\"topK\"] = obj.topK;\n }\n\n if (obj.topP !== undefined && obj.topP !== null) {\n result[\"topP\"] = obj.topP;\n }\n\n if (obj.stopSequences !== undefined && obj.stopSequences !== null) {\n result[\"stopSequences\"] = obj.stopSequences;\n }\n\n if (\n obj.allowMultipleToolCalls !== undefined &&\n obj.allowMultipleToolCalls !== null\n ) {\n result[\"allowMultipleToolCalls\"] = obj.allowMultipleToolCalls;\n }\n\n if (\n obj.additionalProperties !== undefined &&\n obj.additionalProperties !== null\n ) {\n result[\"additionalProperties\"] = obj.additionalProperties;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the ModelOptions instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the ModelOptions instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a ModelOptions instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ModelOptions instance.\n */\n static fromJson(json: string, context?: LoadContext): ModelOptions {\n const data = JSON.parse(json);\n\n return ModelOptions.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a ModelOptions instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ModelOptions instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): ModelOptions {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return ModelOptions.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\nimport { Connection } from \"./connection\";\nimport { ModelOptions } from \"./model-options\";\n\n/**\n * Model for defining the structure and behavior of AI agents.\n * This model includes properties for specifying the model's provider, connection details, and various options.\n * It allows for flexible configuration of AI models to suit different use cases and requirements.\n *\n */\nexport class Model {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = \"id\";\n\n /**\n * The unique identifier of the model - can be used as the single property shorthand\n */\n id: string = \"\";\n\n /**\n * The provider of the model (e.g., 'openai', 'azure', 'anthropic')\n */\n provider?: string | undefined;\n\n /**\n * The type of API to use for the model (e.g., 'chat', 'response', etc.)\n */\n apiType?: string | undefined;\n\n /**\n * The connection configuration for the model\n */\n connection?: Connection | undefined;\n\n /**\n * Additional options for the model\n */\n options?: ModelOptions | undefined;\n\n /**\n * Initializes a new instance of Model.\n */\n constructor(init?: Partial<Model>) {\n this.id = init?.id ?? \"\";\n\n if (init?.provider !== undefined) {\n this.provider = init.provider;\n }\n\n if (init?.apiType !== undefined) {\n this.apiType = init.apiType;\n }\n\n if (init?.connection !== undefined) {\n this.connection = init.connection;\n }\n\n if (init?.options !== undefined) {\n this.options = init.options;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a Model instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Model instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Model {\n if (context) {\n data = context.processInput(data);\n }\n\n // Handle alternate representations\n if (typeof data === \"string\") {\n data = { id: data };\n } else if (typeof data === \"number\") {\n } else if (typeof data === \"boolean\") {\n }\n\n // Create new instance\n const instance = new Model();\n\n if (data[\"id\"] !== undefined && data[\"id\"] !== null) {\n instance.id = String(data[\"id\"]);\n }\n\n if (data[\"provider\"] !== undefined && data[\"provider\"] !== null) {\n instance.provider = String(data[\"provider\"]);\n }\n\n if (data[\"apiType\"] !== undefined && data[\"apiType\"] !== null) {\n instance.apiType = String(data[\"apiType\"]);\n }\n\n if (data[\"connection\"] !== undefined && data[\"connection\"] !== null) {\n instance.connection = Connection.load(\n data[\"connection\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"options\"] !== undefined && data[\"options\"] !== null) {\n instance.options = ModelOptions.load(\n data[\"options\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (context) {\n return context.processOutput(instance) as Model;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Model instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Model) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.id !== undefined && obj.id !== null) {\n result[\"id\"] = obj.id;\n }\n\n if (obj.provider !== undefined && obj.provider !== null) {\n result[\"provider\"] = obj.provider;\n }\n\n if (obj.apiType !== undefined && obj.apiType !== null) {\n result[\"apiType\"] = obj.apiType;\n }\n\n if (obj.connection !== undefined && obj.connection !== null) {\n result[\"connection\"] = obj.connection?.save(context);\n }\n\n if (obj.options !== undefined && obj.options !== null) {\n result[\"options\"] = obj.options?.save(context);\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the Model instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Model instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Model instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Model instance.\n */\n static fromJson(json: string, context?: LoadContext): Model {\n const data = JSON.parse(json);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Model.load({ id: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Model.load({ id: data }, context);\n }\n\n return Model.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Model instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Model instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Model {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Model.load({ id: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Model.load({ id: data }, context);\n }\n\n return Model.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\n\n/**\n * Represents a single property.\n *\n * - This model defines the structure of properties that can be used in prompts,\n * including their type, description, whether they are required, and other attributes.\n * - It allows for the definition of dynamic inputs that can be filled with data\n * and processed to generate prompts for AI models.\n *\n */\nexport class Property {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = \"example\";\n\n /**\n * Name of the property\n */\n name: string = \"\";\n\n /**\n * The data type of the input property\n */\n kind: string = \"\";\n\n /**\n * A short description of the input property\n */\n description?: string | undefined;\n\n /**\n * Whether the property is required\n */\n required?: boolean | undefined;\n\n /**\n * The default value of the property - this represents the default value if none is provided\n */\n default?: unknown | undefined;\n\n /**\n * Example value used for either initialization or tooling\n */\n example?: unknown | undefined;\n\n /**\n * Allowed enumeration values for the property\n */\n enumValues?: unknown[] = [];\n\n /**\n * Initializes a new instance of Property.\n */\n constructor(init?: Partial<Property>) {\n this.name = init?.name ?? \"\";\n\n this.kind = init?.kind ?? \"\";\n\n if (init?.description !== undefined) {\n this.description = init.description;\n }\n\n if (init?.required !== undefined) {\n this.required = init.required;\n }\n\n if (init?.default !== undefined) {\n this.default = init.default;\n }\n\n if (init?.example !== undefined) {\n this.example = init.example;\n }\n\n if (init?.enumValues !== undefined) {\n this.enumValues = init.enumValues;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a Property instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Property instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Property {\n if (context) {\n data = context.processInput(data);\n }\n\n // Handle alternate representations\n if (typeof data === \"string\") {\n data = { kind: \"string\", example: data };\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n data = { kind: \"integer\", example: data };\n } else {\n data = { kind: \"float\", example: data };\n }\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n data = { kind: \"integer\", example: data };\n } else {\n data = { kind: \"float\", example: data };\n }\n } else if (typeof data === \"boolean\") {\n data = { kind: \"boolean\", example: data };\n }\n\n // Load polymorphic Property instance\n const instance = Property.loadKind(data, context);\n\n if (data[\"name\"] !== undefined && data[\"name\"] !== null) {\n instance.name = String(data[\"name\"]);\n }\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"description\"] !== undefined && data[\"description\"] !== null) {\n instance.description = String(data[\"description\"]);\n }\n\n if (data[\"required\"] !== undefined && data[\"required\"] !== null) {\n instance.required = Boolean(data[\"required\"]);\n }\n\n if (data[\"default\"] !== undefined && data[\"default\"] !== null) {\n instance.default = data[\"default\"] as unknown;\n }\n\n if (data[\"example\"] !== undefined && data[\"example\"] !== null) {\n instance.example = data[\"example\"] as unknown;\n }\n\n if (data[\"enumValues\"] !== undefined && data[\"enumValues\"] !== null) {\n instance.enumValues = Array.isArray(data[\"enumValues\"])\n ? (data[\"enumValues\"] as unknown[]).map((v) => String(v))\n : [];\n }\n\n if (context) {\n return context.processOutput(instance) as Property;\n }\n return instance;\n }\n\n /**\n * Load polymorphic Property based on discriminator.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Property instance.\n */\n private static loadKind(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): Property {\n const discriminatorValue = data[\"kind\"];\n if (discriminatorValue !== undefined && discriminatorValue !== null) {\n const discriminator = String(discriminatorValue).toLowerCase();\n switch (discriminator) {\n case \"array\":\n return ArrayProperty.load(data, context);\n case \"object\":\n return ObjectProperty.load(data, context);\n default:\n return new Property();\n }\n }\n\n return new Property();\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Property instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Property) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.name !== undefined && obj.name !== null) {\n result[\"name\"] = obj.name;\n }\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.description !== undefined && obj.description !== null) {\n result[\"description\"] = obj.description;\n }\n\n if (obj.required !== undefined && obj.required !== null) {\n result[\"required\"] = obj.required;\n }\n\n if (obj.default !== undefined && obj.default !== null) {\n result[\"default\"] = obj.default;\n }\n\n if (obj.example !== undefined && obj.example !== null) {\n result[\"example\"] = obj.example;\n }\n\n if (obj.enumValues !== undefined && obj.enumValues !== null) {\n result[\"enumValues\"] = obj.enumValues;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the Property instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Property instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Property instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Property instance.\n */\n static fromJson(json: string, context?: LoadContext): Property {\n const data = JSON.parse(json);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Property.load({ kind: \"string\", example: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n return Property.load({ kind: \"integer\", example: data }, context);\n } else {\n return Property.load({ kind: \"float\", example: data }, context);\n }\n } else if (typeof data === \"boolean\") {\n return Property.load({ kind: \"boolean\", example: data }, context);\n }\n // Fallback - shouldn't reach here\n return Property.load({ kind: \"boolean\", example: data }, context);\n }\n\n return Property.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Property instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Property instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Property {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Property.load({ kind: \"string\", example: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n return Property.load({ kind: \"integer\", example: data }, context);\n } else {\n return Property.load({ kind: \"float\", example: data }, context);\n }\n } else if (typeof data === \"boolean\") {\n return Property.load({ kind: \"boolean\", example: data }, context);\n }\n // Fallback - shouldn't reach here\n return Property.load({ kind: \"boolean\", example: data }, context);\n }\n\n return Property.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Represents an array property.\n * This extends the base Property model to represent an array of items.\n *\n */\nexport class ArrayProperty extends Property {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n *\n */\n kind: string = \"array\";\n\n /**\n * The type of items contained in the array\n */\n items: Property;\n\n /**\n * Initializes a new instance of ArrayProperty.\n */\n constructor(init?: Partial<ArrayProperty>) {\n super(init);\n\n this.kind = init?.kind ?? \"array\";\n\n this.items = init?.items ?? undefined!;\n }\n\n //#region Load Methods\n\n /**\n * Load a ArrayProperty instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ArrayProperty instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): ArrayProperty {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new ArrayProperty();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"items\"] !== undefined && data[\"items\"] !== null) {\n instance.items = Property.load(\n data[\"items\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (context) {\n return context.processOutput(instance) as ArrayProperty;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the ArrayProperty instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as ArrayProperty) : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.items !== undefined && obj.items !== null) {\n result[\"items\"] = obj.items?.save(context);\n }\n\n return result;\n }\n\n /**\n * Convert the ArrayProperty instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the ArrayProperty instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a ArrayProperty instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ArrayProperty instance.\n */\n static fromJson(json: string, context?: LoadContext): ArrayProperty {\n const data = JSON.parse(json);\n\n return ArrayProperty.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a ArrayProperty instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ArrayProperty instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): ArrayProperty {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return ArrayProperty.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Represents an object property.\n * This extends the base Property model to represent a structured object.\n *\n */\nexport class ObjectProperty extends Property {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n *\n */\n kind: string = \"object\";\n\n /**\n * The properties contained in the object\n */\n properties: Property[] = [];\n\n /**\n * Initializes a new instance of ObjectProperty.\n */\n constructor(init?: Partial<ObjectProperty>) {\n super(init);\n\n this.kind = init?.kind ?? \"object\";\n\n this.properties = init?.properties ?? [];\n }\n\n //#region Load Methods\n\n /**\n * Load a ObjectProperty instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ObjectProperty instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): ObjectProperty {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new ObjectProperty();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"properties\"] !== undefined && data[\"properties\"] !== null) {\n instance.properties = ObjectProperty.loadProperties(\n data[\"properties\"],\n context,\n );\n }\n\n if (context) {\n return context.processOutput(instance) as ObjectProperty;\n }\n return instance;\n }\n\n /**\n * Load a collection of Property from a dictionary or array.\n * @param data - The data to load from.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded array of Property.\n */\n static loadProperties(data: unknown, context?: LoadContext): Property[] {\n const result: Property[] = [];\n\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n // Convert named dictionary to array\n for (const [key, value] of Object.entries(\n data as Record<string, unknown>,\n )) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Value is an object, add name to it\n (value as Record<string, unknown>)[\"name\"] = key;\n result.push(Property.load(value as Record<string, unknown>, context));\n } else {\n // Value is a scalar — let Property.load() infer kind from value\n const prop = Property.load(value as Record<string, unknown>, context);\n prop.name = key;\n result.push(prop);\n }\n }\n } else if (Array.isArray(data)) {\n for (const item of data) {\n if (item && typeof item === \"object\") {\n result.push(Property.load(item as Record<string, unknown>, context));\n }\n }\n }\n\n return result;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the ObjectProperty instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as ObjectProperty)\n : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.properties !== undefined && obj.properties !== null) {\n result[\"properties\"] = ObjectProperty.saveProperties(\n obj.properties,\n context,\n );\n }\n\n return result;\n }\n\n /**\n * Save a collection of Property to object or array format.\n * @param items - The items to save.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The saved collection in object or array format.\n */\n static saveProperties(\n items: Property[],\n context?: SaveContext,\n ): Record<string, unknown> | Record<string, unknown>[] {\n context = context ?? new SaveContext();\n\n // This type doesn't have a 'name' property, so always use array format\n return items.map((item) => item.save(context));\n }\n\n /**\n * Convert the ObjectProperty instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the ObjectProperty instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a ObjectProperty instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ObjectProperty instance.\n */\n static fromJson(json: string, context?: LoadContext): ObjectProperty {\n const data = JSON.parse(json);\n\n return ObjectProperty.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a ObjectProperty instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded ObjectProperty instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): ObjectProperty {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return ObjectProperty.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\n\n/**\n * Template format definition\n *\n */\nexport class Format {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = \"kind\";\n\n /**\n * Template rendering engine used for slot filling prompts (e.g., mustache, jinja2)\n */\n kind: string = \"*\";\n\n /**\n * Whether the template can emit structural text for parsing output\n */\n strict?: boolean | undefined;\n\n /**\n * Options for the template engine\n */\n options?: Record<string, unknown> | undefined = {};\n\n /**\n * Initializes a new instance of Format.\n */\n constructor(init?: Partial<Format>) {\n this.kind = init?.kind ?? \"*\";\n\n if (init?.strict !== undefined) {\n this.strict = init.strict;\n }\n\n if (init?.options !== undefined) {\n this.options = init.options;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a Format instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Format instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Format {\n if (context) {\n data = context.processInput(data);\n }\n\n // Handle alternate representations\n if (typeof data === \"string\") {\n data = { kind: data };\n } else if (typeof data === \"number\") {\n } else if (typeof data === \"boolean\") {\n }\n\n // Create new instance\n const instance = new Format();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"strict\"] !== undefined && data[\"strict\"] !== null) {\n instance.strict = Boolean(data[\"strict\"]);\n }\n\n if (data[\"options\"] !== undefined && data[\"options\"] !== null) {\n instance.options = data[\"options\"] as Record<string, unknown>;\n }\n\n if (context) {\n return context.processOutput(instance) as Format;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Format instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Format) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.strict !== undefined && obj.strict !== null) {\n result[\"strict\"] = obj.strict;\n }\n\n if (obj.options !== undefined && obj.options !== null) {\n result[\"options\"] = obj.options;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the Format instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Format instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Format instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Format instance.\n */\n static fromJson(json: string, context?: LoadContext): Format {\n const data = JSON.parse(json);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Format.load({ kind: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Format.load({ kind: data }, context);\n }\n\n return Format.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Format instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Format instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Format {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Format.load({ kind: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Format.load({ kind: data }, context);\n }\n\n return Format.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\n\n/**\n * Template parser definition\n *\n */\nexport class Parser {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = \"kind\";\n\n /**\n * Parser used to process the rendered template into API-compatible format\n */\n kind: string = \"*\";\n\n /**\n * Options for the parser\n */\n options?: Record<string, unknown> | undefined = {};\n\n /**\n * Initializes a new instance of Parser.\n */\n constructor(init?: Partial<Parser>) {\n this.kind = init?.kind ?? \"*\";\n\n if (init?.options !== undefined) {\n this.options = init.options;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a Parser instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Parser instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Parser {\n if (context) {\n data = context.processInput(data);\n }\n\n // Handle alternate representations\n if (typeof data === \"string\") {\n data = { kind: data };\n } else if (typeof data === \"number\") {\n } else if (typeof data === \"boolean\") {\n }\n\n // Create new instance\n const instance = new Parser();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"options\"] !== undefined && data[\"options\"] !== null) {\n instance.options = data[\"options\"] as Record<string, unknown>;\n }\n\n if (context) {\n return context.processOutput(instance) as Parser;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Parser instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Parser) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.options !== undefined && obj.options !== null) {\n result[\"options\"] = obj.options;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the Parser instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Parser instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Parser instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Parser instance.\n */\n static fromJson(json: string, context?: LoadContext): Parser {\n const data = JSON.parse(json);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Parser.load({ kind: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Parser.load({ kind: data }, context);\n }\n\n return Parser.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Parser instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Parser instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Parser {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Parser.load({ kind: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Parser.load({ kind: data }, context);\n }\n\n return Parser.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\nimport { Format } from \"./format\";\nimport { Parser } from \"./parser\";\n\n/**\n * Template model for defining prompt templates.\n *\n * This model specifies the rendering engine used for slot filling prompts,\n * the parser used to process the rendered template into API-compatible format,\n * and additional options for the template engine.\n *\n * It allows for the creation of reusable templates that can be filled with dynamic data\n * and processed to generate prompts for AI models.\n *\n */\nexport class Template {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * Template rendering engine used for slot filling prompts (e.g., mustache, jinja2)\n */\n format: Format;\n\n /**\n * Parser used to process the rendered template into API-compatible format\n */\n parser: Parser;\n\n /**\n * Initializes a new instance of Template.\n */\n constructor(init?: Partial<Template>) {\n this.format = init?.format ?? undefined!;\n\n this.parser = init?.parser ?? undefined!;\n }\n\n //#region Load Methods\n\n /**\n * Load a Template instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Template instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Template {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new Template();\n\n if (data[\"format\"] !== undefined && data[\"format\"] !== null) {\n instance.format = Format.load(\n data[\"format\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"parser\"] !== undefined && data[\"parser\"] !== null) {\n instance.parser = Parser.load(\n data[\"parser\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (context) {\n return context.processOutput(instance) as Template;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Template instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Template) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.format !== undefined && obj.format !== null) {\n result[\"format\"] = obj.format?.save(context);\n }\n\n if (obj.parser !== undefined && obj.parser !== null) {\n result[\"parser\"] = obj.parser?.save(context);\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the Template instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Template instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Template instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Template instance.\n */\n static fromJson(json: string, context?: LoadContext): Template {\n const data = JSON.parse(json);\n\n return Template.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Template instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Template instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Template {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return Template.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\n\n/**\n * Represents a binding between an input property and a tool parameter.\n *\n */\nexport class Binding {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = \"input\";\n\n /**\n * Name of the binding\n */\n name: string = \"\";\n\n /**\n * The input property that will be bound to the tool parameter argument\n */\n input: string = \"\";\n\n /**\n * Initializes a new instance of Binding.\n */\n constructor(init?: Partial<Binding>) {\n this.name = init?.name ?? \"\";\n\n this.input = init?.input ?? \"\";\n }\n\n //#region Load Methods\n\n /**\n * Load a Binding instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Binding instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Binding {\n if (context) {\n data = context.processInput(data);\n }\n\n // Handle alternate representations\n if (typeof data === \"string\") {\n data = { input: data };\n } else if (typeof data === \"number\") {\n } else if (typeof data === \"boolean\") {\n }\n\n // Create new instance\n const instance = new Binding();\n\n if (data[\"name\"] !== undefined && data[\"name\"] !== null) {\n instance.name = String(data[\"name\"]);\n }\n\n if (data[\"input\"] !== undefined && data[\"input\"] !== null) {\n instance.input = String(data[\"input\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as Binding;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Binding instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Binding) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.name !== undefined && obj.name !== null) {\n result[\"name\"] = obj.name;\n }\n\n if (obj.input !== undefined && obj.input !== null) {\n result[\"input\"] = obj.input;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the Binding instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Binding instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Binding instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Binding instance.\n */\n static fromJson(json: string, context?: LoadContext): Binding {\n const data = JSON.parse(json);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Binding.load({ input: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Binding.load({ input: data }, context);\n }\n\n return Binding.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Binding instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Binding instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Binding {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return Binding.load({ input: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return Binding.load({ input: data }, context);\n }\n\n return Binding.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\n\n/**\n * The approval mode for MCP server tools.\n * When kind is \"specify\", use alwaysRequireApprovalTools and neverRequireApprovalTools\n * to control per-tool approval. For \"always\" and \"never\", those fields are ignored.\n *\n */\nexport class McpApprovalMode {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = \"kind\";\n\n /**\n * The approval mode: 'always', 'never', or 'specify'\n */\n kind: string = \"\";\n\n /**\n * List of tools that always require approval (only used when kind is 'specify')\n */\n alwaysRequireApprovalTools?: string[] = [];\n\n /**\n * List of tools that never require approval (only used when kind is 'specify')\n */\n neverRequireApprovalTools?: string[] = [];\n\n /**\n * Initializes a new instance of McpApprovalMode.\n */\n constructor(init?: Partial<McpApprovalMode>) {\n this.kind = init?.kind ?? \"\";\n\n if (init?.alwaysRequireApprovalTools !== undefined) {\n this.alwaysRequireApprovalTools = init.alwaysRequireApprovalTools;\n }\n\n if (init?.neverRequireApprovalTools !== undefined) {\n this.neverRequireApprovalTools = init.neverRequireApprovalTools;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a McpApprovalMode instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded McpApprovalMode instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): McpApprovalMode {\n if (context) {\n data = context.processInput(data);\n }\n\n // Handle alternate representations\n if (typeof data === \"string\") {\n data = { kind: data };\n } else if (typeof data === \"number\") {\n } else if (typeof data === \"boolean\") {\n }\n\n // Create new instance\n const instance = new McpApprovalMode();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (\n data[\"alwaysRequireApprovalTools\"] !== undefined &&\n data[\"alwaysRequireApprovalTools\"] !== null\n ) {\n instance.alwaysRequireApprovalTools = Array.isArray(\n data[\"alwaysRequireApprovalTools\"],\n )\n ? (data[\"alwaysRequireApprovalTools\"] as unknown[]).map((v) =>\n String(v),\n )\n : [];\n }\n\n if (\n data[\"neverRequireApprovalTools\"] !== undefined &&\n data[\"neverRequireApprovalTools\"] !== null\n ) {\n instance.neverRequireApprovalTools = Array.isArray(\n data[\"neverRequireApprovalTools\"],\n )\n ? (data[\"neverRequireApprovalTools\"] as unknown[]).map((v) => String(v))\n : [];\n }\n\n if (context) {\n return context.processOutput(instance) as McpApprovalMode;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the McpApprovalMode instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context\n ? (context.processObject(this) as McpApprovalMode)\n : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (\n obj.alwaysRequireApprovalTools !== undefined &&\n obj.alwaysRequireApprovalTools !== null\n ) {\n result[\"alwaysRequireApprovalTools\"] = obj.alwaysRequireApprovalTools;\n }\n\n if (\n obj.neverRequireApprovalTools !== undefined &&\n obj.neverRequireApprovalTools !== null\n ) {\n result[\"neverRequireApprovalTools\"] = obj.neverRequireApprovalTools;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Convert the McpApprovalMode instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the McpApprovalMode instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a McpApprovalMode instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded McpApprovalMode instance.\n */\n static fromJson(json: string, context?: LoadContext): McpApprovalMode {\n const data = JSON.parse(json);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return McpApprovalMode.load({ kind: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return McpApprovalMode.load({ kind: data }, context);\n }\n\n return McpApprovalMode.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a McpApprovalMode instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded McpApprovalMode instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): McpApprovalMode {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n // Handle alternate representations\n if (typeof data !== \"object\" || data === null || Array.isArray(data)) {\n if (typeof data === \"string\") {\n return McpApprovalMode.load({ kind: data }, context);\n } else if (typeof data === \"number\") {\n // Check if it's an integer or float\n if (Number.isInteger(data)) {\n } else {\n }\n } else if (typeof data === \"boolean\") {\n }\n // Fallback - shouldn't reach here\n return McpApprovalMode.load({ kind: data }, context);\n }\n\n return McpApprovalMode.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\nimport { Binding } from \"./binding\";\nimport { Connection } from \"./connection\";\nimport { McpApprovalMode } from \"./mcp-approval-mode\";\nimport { Property } from \"./property\";\n\n/**\n * Represents a tool that can be used in prompts.\n *\n */\nexport abstract class Tool {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * Name of the tool. If a function tool, this is the function name, otherwise it is the type\n */\n name: string = \"\";\n\n /**\n * The kind identifier for the tool\n */\n kind: string = \"\";\n\n /**\n * A short description of the tool for metadata purposes\n */\n description?: string | undefined;\n\n /**\n * Tool argument bindings to input properties\n */\n bindings?: Binding[] = [];\n\n /**\n * Initializes a new instance of Tool.\n */\n constructor(init?: Partial<Tool>) {\n this.name = init?.name ?? \"\";\n\n this.kind = init?.kind ?? \"\";\n\n if (init?.description !== undefined) {\n this.description = init.description;\n }\n\n if (init?.bindings !== undefined) {\n this.bindings = init.bindings;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a Tool instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Tool instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Tool {\n if (context) {\n data = context.processInput(data);\n }\n\n // Load polymorphic Tool instance\n const instance = Tool.loadKind(data, context);\n\n if (data[\"name\"] !== undefined && data[\"name\"] !== null) {\n instance.name = String(data[\"name\"]);\n }\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"description\"] !== undefined && data[\"description\"] !== null) {\n instance.description = String(data[\"description\"]);\n }\n\n if (data[\"bindings\"] !== undefined && data[\"bindings\"] !== null) {\n instance.bindings = Tool.loadBindings(data[\"bindings\"], context);\n }\n\n if (context) {\n return context.processOutput(instance) as Tool;\n }\n return instance;\n }\n\n /**\n * Load a collection of Binding from a dictionary or array.\n * @param data - The data to load from.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded array of Binding.\n */\n static loadBindings(data: unknown, context?: LoadContext): Binding[] {\n const result: Binding[] = [];\n\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n // Convert named dictionary to array\n for (const [key, value] of Object.entries(\n data as Record<string, unknown>,\n )) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Value is an object, add name to it\n (value as Record<string, unknown>)[\"name\"] = key;\n result.push(Binding.load(value as Record<string, unknown>, context));\n } else {\n // Value is a scalar — let Binding.load() infer kind from value\n const prop = Binding.load(value as Record<string, unknown>, context);\n prop.name = key;\n result.push(prop);\n }\n }\n } else if (Array.isArray(data)) {\n for (const item of data) {\n if (item && typeof item === \"object\") {\n result.push(Binding.load(item as Record<string, unknown>, context));\n }\n }\n }\n\n return result;\n }\n\n /**\n * Load polymorphic Tool based on discriminator.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Tool instance.\n */\n private static loadKind(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): Tool {\n const discriminatorValue = data[\"kind\"];\n if (discriminatorValue !== undefined && discriminatorValue !== null) {\n const discriminator = String(discriminatorValue).toLowerCase();\n switch (discriminator) {\n case \"function\":\n return FunctionTool.load(data, context);\n case \"mcp\":\n return McpTool.load(data, context);\n case \"openapi\":\n return OpenApiTool.load(data, context);\n default:\n return CustomTool.load(data, context);\n }\n }\n\n throw new Error(\"Missing Tool discriminator property: 'kind'\");\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Tool instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Tool) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.name !== undefined && obj.name !== null) {\n result[\"name\"] = obj.name;\n }\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.description !== undefined && obj.description !== null) {\n result[\"description\"] = obj.description;\n }\n\n if (obj.bindings !== undefined && obj.bindings !== null) {\n result[\"bindings\"] = Tool.saveBindings(obj.bindings, context);\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Save a collection of Binding to object or array format.\n * @param items - The items to save.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The saved collection in object or array format.\n */\n static saveBindings(\n items: Binding[],\n context?: SaveContext,\n ): Record<string, unknown> | Record<string, unknown>[] {\n context = context ?? new SaveContext();\n\n if (context.collectionFormat === \"array\") {\n return items.map((item) => item.save(context));\n }\n\n // Object format: use name as key\n const result: Record<string, unknown> = {};\n for (const item of items) {\n const itemData = item.save(context);\n const name = itemData[\"name\"] as string | undefined;\n if (name) {\n delete itemData[\"name\"];\n\n // Check if we can use shorthand\n if (context.useShorthand && Binding.shorthandProperty) {\n const shorthandProp = Binding.shorthandProperty;\n const keys = Object.keys(itemData);\n if (keys.length === 1 && keys[0] === shorthandProp) {\n result[name] = itemData[shorthandProp];\n continue;\n }\n }\n result[name] = itemData;\n } else {\n throw new Error(\n \"Cannot save item in object format: missing 'name' property\",\n );\n }\n }\n return result;\n }\n\n /**\n * Convert the Tool instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Tool instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Tool instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Tool instance.\n */\n static fromJson(json: string, context?: LoadContext): Tool {\n const data = JSON.parse(json);\n\n return Tool.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Tool instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Tool instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Tool {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return Tool.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Represents a local function tool.\n *\n */\nexport class FunctionTool extends Tool {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The kind identifier for function tools\n */\n kind: string = \"function\";\n\n /**\n * Parameters accepted by the function tool\n */\n parameters: Property[] = [];\n\n /**\n * Indicates whether the function tool enforces strict validation on its parameters\n */\n strict?: boolean | undefined;\n\n /**\n * Initializes a new instance of FunctionTool.\n */\n constructor(init?: Partial<FunctionTool>) {\n super(init);\n\n this.kind = init?.kind ?? \"function\";\n\n this.parameters = init?.parameters ?? [];\n\n if (init?.strict !== undefined) {\n this.strict = init.strict;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a FunctionTool instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded FunctionTool instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): FunctionTool {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new FunctionTool();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"parameters\"] !== undefined && data[\"parameters\"] !== null) {\n instance.parameters = FunctionTool.loadParameters(\n data[\"parameters\"],\n context,\n );\n }\n\n if (data[\"strict\"] !== undefined && data[\"strict\"] !== null) {\n instance.strict = Boolean(data[\"strict\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as FunctionTool;\n }\n return instance;\n }\n\n /**\n * Load a collection of Property from a dictionary or array.\n * @param data - The data to load from.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded array of Property.\n */\n static loadParameters(data: unknown, context?: LoadContext): Property[] {\n const result: Property[] = [];\n\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n // Convert named dictionary to array\n for (const [key, value] of Object.entries(\n data as Record<string, unknown>,\n )) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Value is an object, add name to it\n (value as Record<string, unknown>)[\"name\"] = key;\n result.push(Property.load(value as Record<string, unknown>, context));\n } else {\n // Value is a scalar — let Property.load() infer kind from value\n const prop = Property.load(value as Record<string, unknown>, context);\n prop.name = key;\n result.push(prop);\n }\n }\n } else if (Array.isArray(data)) {\n for (const item of data) {\n if (item && typeof item === \"object\") {\n result.push(Property.load(item as Record<string, unknown>, context));\n }\n }\n }\n\n return result;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the FunctionTool instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as FunctionTool) : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.parameters !== undefined && obj.parameters !== null) {\n result[\"parameters\"] = FunctionTool.saveParameters(\n obj.parameters,\n context,\n );\n }\n\n if (obj.strict !== undefined && obj.strict !== null) {\n result[\"strict\"] = obj.strict;\n }\n\n return result;\n }\n\n /**\n * Save a collection of Property to object or array format.\n * @param items - The items to save.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The saved collection in object or array format.\n */\n static saveParameters(\n items: Property[],\n context?: SaveContext,\n ): Record<string, unknown> | Record<string, unknown>[] {\n context = context ?? new SaveContext();\n\n // This type doesn't have a 'name' property, so always use array format\n return items.map((item) => item.save(context));\n }\n\n /**\n * Convert the FunctionTool instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the FunctionTool instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a FunctionTool instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded FunctionTool instance.\n */\n static fromJson(json: string, context?: LoadContext): FunctionTool {\n const data = JSON.parse(json);\n\n return FunctionTool.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a FunctionTool instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded FunctionTool instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): FunctionTool {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return FunctionTool.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * Represents a generic server tool that runs on a server\n * This tool kind is designed for operations that require server-side execution\n * It may include features such as authentication, data storage, and long-running processes\n * This tool kind is ideal for tasks that involve complex computations or access to secure resources\n * Server tools can be used to offload heavy processing from client applications\n *\n */\nexport class CustomTool extends Tool {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The kind identifier for server tools. This is a wildcard and can represent any server tool type not explicitly defined.\n */\n kind: string = \"*\";\n\n /**\n * Connection configuration for the server tool\n */\n connection: Connection;\n\n /**\n * Configuration options for the server tool\n */\n options: Record<string, unknown> = {};\n\n /**\n * Initializes a new instance of CustomTool.\n */\n constructor(init?: Partial<CustomTool>) {\n super(init);\n\n this.kind = init?.kind ?? \"*\";\n\n this.connection = init?.connection ?? undefined!;\n\n this.options = init?.options ?? {};\n }\n\n //#region Load Methods\n\n /**\n * Load a CustomTool instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded CustomTool instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): CustomTool {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new CustomTool();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"connection\"] !== undefined && data[\"connection\"] !== null) {\n instance.connection = Connection.load(\n data[\"connection\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"options\"] !== undefined && data[\"options\"] !== null) {\n instance.options = data[\"options\"] as Record<string, unknown>;\n }\n\n if (context) {\n return context.processOutput(instance) as CustomTool;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the CustomTool instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as CustomTool) : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.connection !== undefined && obj.connection !== null) {\n result[\"connection\"] = obj.connection?.save(context);\n }\n\n if (obj.options !== undefined && obj.options !== null) {\n result[\"options\"] = obj.options;\n }\n\n return result;\n }\n\n /**\n * Convert the CustomTool instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the CustomTool instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a CustomTool instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded CustomTool instance.\n */\n static fromJson(json: string, context?: LoadContext): CustomTool {\n const data = JSON.parse(json);\n\n return CustomTool.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a CustomTool instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded CustomTool instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): CustomTool {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return CustomTool.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n * The MCP Server tool.\n *\n */\nexport class McpTool extends Tool {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The kind identifier for MCP tools\n */\n kind: string = \"mcp\";\n\n /**\n * The connection configuration for the MCP tool\n */\n connection: Connection;\n\n /**\n * The server name of the MCP tool\n */\n serverName: string = \"\";\n\n /**\n * The description of the MCP tool\n */\n serverDescription?: string | undefined;\n\n /**\n * The approval mode for the MCP tool\n */\n approvalMode: McpApprovalMode;\n\n /**\n * List of allowed operations or resources for the MCP tool\n */\n allowedTools?: string[] = [];\n\n /**\n * Initializes a new instance of McpTool.\n */\n constructor(init?: Partial<McpTool>) {\n super(init);\n\n this.kind = init?.kind ?? \"mcp\";\n\n this.connection = init?.connection ?? undefined!;\n\n this.serverName = init?.serverName ?? \"\";\n\n if (init?.serverDescription !== undefined) {\n this.serverDescription = init.serverDescription;\n }\n\n this.approvalMode = init?.approvalMode ?? undefined!;\n\n if (init?.allowedTools !== undefined) {\n this.allowedTools = init.allowedTools;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a McpTool instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded McpTool instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): McpTool {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new McpTool();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"connection\"] !== undefined && data[\"connection\"] !== null) {\n instance.connection = Connection.load(\n data[\"connection\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"serverName\"] !== undefined && data[\"serverName\"] !== null) {\n instance.serverName = String(data[\"serverName\"]);\n }\n\n if (\n data[\"serverDescription\"] !== undefined &&\n data[\"serverDescription\"] !== null\n ) {\n instance.serverDescription = String(data[\"serverDescription\"]);\n }\n\n if (data[\"approvalMode\"] !== undefined && data[\"approvalMode\"] !== null) {\n instance.approvalMode = McpApprovalMode.load(\n data[\"approvalMode\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"allowedTools\"] !== undefined && data[\"allowedTools\"] !== null) {\n instance.allowedTools = Array.isArray(data[\"allowedTools\"])\n ? (data[\"allowedTools\"] as unknown[]).map((v) => String(v))\n : [];\n }\n\n if (context) {\n return context.processOutput(instance) as McpTool;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the McpTool instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as McpTool) : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.connection !== undefined && obj.connection !== null) {\n result[\"connection\"] = obj.connection?.save(context);\n }\n\n if (obj.serverName !== undefined && obj.serverName !== null) {\n result[\"serverName\"] = obj.serverName;\n }\n\n if (obj.serverDescription !== undefined && obj.serverDescription !== null) {\n result[\"serverDescription\"] = obj.serverDescription;\n }\n\n if (obj.approvalMode !== undefined && obj.approvalMode !== null) {\n result[\"approvalMode\"] = obj.approvalMode?.save(context);\n }\n\n if (obj.allowedTools !== undefined && obj.allowedTools !== null) {\n result[\"allowedTools\"] = obj.allowedTools;\n }\n\n return result;\n }\n\n /**\n * Convert the McpTool instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the McpTool instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a McpTool instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded McpTool instance.\n */\n static fromJson(json: string, context?: LoadContext): McpTool {\n const data = JSON.parse(json);\n\n return McpTool.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a McpTool instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded McpTool instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): McpTool {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return McpTool.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n\n/**\n *\n *\n */\nexport class OpenApiTool extends Tool {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * The kind identifier for OpenAPI tools\n */\n kind: string = \"openapi\";\n\n /**\n * The connection configuration for the OpenAPI tool\n */\n connection: Connection;\n\n /**\n * The full OpenAPI specification\n */\n specification: string = \"\";\n\n /**\n * Initializes a new instance of OpenApiTool.\n */\n constructor(init?: Partial<OpenApiTool>) {\n super(init);\n\n this.kind = init?.kind ?? \"openapi\";\n\n this.connection = init?.connection ?? undefined!;\n\n this.specification = init?.specification ?? \"\";\n }\n\n //#region Load Methods\n\n /**\n * Load a OpenApiTool instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded OpenApiTool instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): OpenApiTool {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new OpenApiTool();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"connection\"] !== undefined && data[\"connection\"] !== null) {\n instance.connection = Connection.load(\n data[\"connection\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"specification\"] !== undefined && data[\"specification\"] !== null) {\n instance.specification = String(data[\"specification\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as OpenApiTool;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the OpenApiTool instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as OpenApiTool) : this;\n\n // Start with parent class properties\n const result = super.save(context);\n\n if (obj.kind !== undefined && obj.kind !== null) {\n result[\"kind\"] = obj.kind;\n }\n\n if (obj.connection !== undefined && obj.connection !== null) {\n result[\"connection\"] = obj.connection?.save(context);\n }\n\n if (obj.specification !== undefined && obj.specification !== null) {\n result[\"specification\"] = obj.specification;\n }\n\n return result;\n }\n\n /**\n * Convert the OpenApiTool instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the OpenApiTool instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a OpenApiTool instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded OpenApiTool instance.\n */\n static fromJson(json: string, context?: LoadContext): OpenApiTool {\n const data = JSON.parse(json);\n\n return OpenApiTool.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a OpenApiTool instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded OpenApiTool instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): OpenApiTool {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return OpenApiTool.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nimport { LoadContext, SaveContext } from \"./context\";\nimport { Model } from \"./model\";\nimport { Property } from \"./property\";\nimport { Template } from \"./template\";\nimport { Tool } from \"./tool\";\n\n/**\n * A Prompty is a markdown file format for LLM prompts. The frontmatter defines\n * structured metadata including model configuration, input/output schemas, tools,\n * and template settings. The markdown body becomes the instructions.\n *\n * This is the single root type for the Prompty schema — there is no abstract base\n * class or kind discriminator. A .prompty file always produces a Prompty instance.\n *\n */\nexport class Prompty {\n /**\n * The shorthand property name for this type, if any.\n */\n static readonly shorthandProperty: string | undefined = undefined;\n\n /**\n * Human-readable name of the prompt\n */\n name: string = \"\";\n\n /**\n * Display name for UI purposes\n */\n displayName?: string | undefined;\n\n /**\n * Description of the prompt's purpose\n */\n description?: string | undefined;\n\n /**\n * Additional metadata including authors, tags, and other arbitrary properties\n */\n metadata?: Record<string, unknown> | undefined = {};\n\n /**\n * Input parameters that participate in template rendering\n */\n inputs?: Property[] = [];\n\n /**\n * Expected output format and structure\n */\n outputs?: Property[] = [];\n\n /**\n * AI model configuration\n */\n model: Model;\n\n /**\n * Tools available for extended functionality\n */\n tools?: Tool[] = [];\n\n /**\n * Template configuration for prompt rendering\n */\n template?: Template | undefined;\n\n /**\n * Clear directions on what the prompt should do. In .prompty files, this comes from the markdown body.\n */\n instructions?: string | undefined;\n\n /**\n * Initializes a new instance of Prompty.\n */\n constructor(init?: Partial<Prompty>) {\n this.name = init?.name ?? \"\";\n\n if (init?.displayName !== undefined) {\n this.displayName = init.displayName;\n }\n\n if (init?.description !== undefined) {\n this.description = init.description;\n }\n\n if (init?.metadata !== undefined) {\n this.metadata = init.metadata;\n }\n\n if (init?.inputs !== undefined) {\n this.inputs = init.inputs;\n }\n\n if (init?.outputs !== undefined) {\n this.outputs = init.outputs;\n }\n\n this.model = init?.model ?? undefined!;\n\n if (init?.tools !== undefined) {\n this.tools = init.tools;\n }\n\n if (init?.template !== undefined) {\n this.template = init.template;\n }\n\n if (init?.instructions !== undefined) {\n this.instructions = init.instructions;\n }\n }\n\n //#region Load Methods\n\n /**\n * Load a Prompty instance from a dictionary.\n * @param data - The dictionary containing the data.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Prompty instance.\n */\n static load(data: Record<string, unknown>, context?: LoadContext): Prompty {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new Prompty();\n\n if (data[\"name\"] !== undefined && data[\"name\"] !== null) {\n instance.name = String(data[\"name\"]);\n }\n\n if (data[\"displayName\"] !== undefined && data[\"displayName\"] !== null) {\n instance.displayName = String(data[\"displayName\"]);\n }\n\n if (data[\"description\"] !== undefined && data[\"description\"] !== null) {\n instance.description = String(data[\"description\"]);\n }\n\n if (data[\"metadata\"] !== undefined && data[\"metadata\"] !== null) {\n instance.metadata = data[\"metadata\"] as Record<string, unknown>;\n }\n\n if (data[\"inputs\"] !== undefined && data[\"inputs\"] !== null) {\n instance.inputs = Prompty.loadInputs(data[\"inputs\"], context);\n }\n\n if (data[\"outputs\"] !== undefined && data[\"outputs\"] !== null) {\n instance.outputs = Prompty.loadOutputs(data[\"outputs\"], context);\n }\n\n if (data[\"model\"] !== undefined && data[\"model\"] !== null) {\n instance.model = Model.load(\n data[\"model\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"tools\"] !== undefined && data[\"tools\"] !== null) {\n instance.tools = Prompty.loadTools(data[\"tools\"], context);\n }\n\n if (data[\"template\"] !== undefined && data[\"template\"] !== null) {\n instance.template = Template.load(\n data[\"template\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"instructions\"] !== undefined && data[\"instructions\"] !== null) {\n instance.instructions = String(data[\"instructions\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as Prompty;\n }\n return instance;\n }\n\n /**\n * Load a collection of Property from a dictionary or array.\n * @param data - The data to load from.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded array of Property.\n */\n static loadInputs(data: unknown, context?: LoadContext): Property[] {\n const result: Property[] = [];\n\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n // Convert named dictionary to array\n for (const [key, value] of Object.entries(\n data as Record<string, unknown>,\n )) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Value is an object, add name to it\n (value as Record<string, unknown>)[\"name\"] = key;\n result.push(Property.load(value as Record<string, unknown>, context));\n } else {\n // Value is a scalar — let Property.load() infer kind from value\n const prop = Property.load(value as Record<string, unknown>, context);\n prop.name = key;\n result.push(prop);\n }\n }\n } else if (Array.isArray(data)) {\n for (const item of data) {\n if (item && typeof item === \"object\") {\n result.push(Property.load(item as Record<string, unknown>, context));\n }\n }\n }\n\n return result;\n }\n\n /**\n * Load a collection of Property from a dictionary or array.\n * @param data - The data to load from.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded array of Property.\n */\n static loadOutputs(data: unknown, context?: LoadContext): Property[] {\n const result: Property[] = [];\n\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n // Convert named dictionary to array\n for (const [key, value] of Object.entries(\n data as Record<string, unknown>,\n )) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Value is an object, add name to it\n (value as Record<string, unknown>)[\"name\"] = key;\n result.push(Property.load(value as Record<string, unknown>, context));\n } else {\n // Value is a scalar — let Property.load() infer kind from value\n const prop = Property.load(value as Record<string, unknown>, context);\n prop.name = key;\n result.push(prop);\n }\n }\n } else if (Array.isArray(data)) {\n for (const item of data) {\n if (item && typeof item === \"object\") {\n result.push(Property.load(item as Record<string, unknown>, context));\n }\n }\n }\n\n return result;\n }\n\n /**\n * Load a collection of Tool from a dictionary or array.\n * @param data - The data to load from.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded array of Tool.\n */\n static loadTools(data: unknown, context?: LoadContext): Tool[] {\n const result: Tool[] = [];\n\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n // Convert named dictionary to array\n for (const [key, value] of Object.entries(\n data as Record<string, unknown>,\n )) {\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n // Value is an object, add name to it\n (value as Record<string, unknown>)[\"name\"] = key;\n result.push(Tool.load(value as Record<string, unknown>, context));\n } else {\n // Value is a scalar — let Tool.load() infer kind from value\n const prop = Tool.load(value as Record<string, unknown>, context);\n prop.name = key;\n result.push(prop);\n }\n }\n } else if (Array.isArray(data)) {\n for (const item of data) {\n if (item && typeof item === \"object\") {\n result.push(Tool.load(item as Record<string, unknown>, context));\n }\n }\n }\n\n return result;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the Prompty instance to a dictionary.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The dictionary representation of this instance.\n */\n save(context?: SaveContext): Record<string, unknown> {\n const obj = context ? (context.processObject(this) as Prompty) : this;\n\n const result: Record<string, unknown> = {};\n\n if (obj.name !== undefined && obj.name !== null) {\n result[\"name\"] = obj.name;\n }\n\n if (obj.displayName !== undefined && obj.displayName !== null) {\n result[\"displayName\"] = obj.displayName;\n }\n\n if (obj.description !== undefined && obj.description !== null) {\n result[\"description\"] = obj.description;\n }\n\n if (obj.metadata !== undefined && obj.metadata !== null) {\n result[\"metadata\"] = obj.metadata;\n }\n\n if (obj.inputs !== undefined && obj.inputs !== null) {\n result[\"inputs\"] = Prompty.saveInputs(obj.inputs, context);\n }\n\n if (obj.outputs !== undefined && obj.outputs !== null) {\n result[\"outputs\"] = Prompty.saveOutputs(obj.outputs, context);\n }\n\n if (obj.model !== undefined && obj.model !== null) {\n result[\"model\"] = obj.model?.save(context);\n }\n\n if (obj.tools !== undefined && obj.tools !== null) {\n result[\"tools\"] = Prompty.saveTools(obj.tools, context);\n }\n\n if (obj.template !== undefined && obj.template !== null) {\n result[\"template\"] = obj.template?.save(context);\n }\n\n if (obj.instructions !== undefined && obj.instructions !== null) {\n result[\"instructions\"] = obj.instructions;\n }\n\n if (context) {\n return context.processDict(result);\n }\n\n return result;\n }\n\n /**\n * Save a collection of Property to object or array format.\n * @param items - The items to save.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The saved collection in object or array format.\n */\n static saveInputs(\n items: Property[],\n context?: SaveContext,\n ): Record<string, unknown> | Record<string, unknown>[] {\n context = context ?? new SaveContext();\n\n if (context.collectionFormat === \"array\") {\n return items.map((item) => item.save(context));\n }\n\n // Object format: use name as key\n const result: Record<string, unknown> = {};\n for (const item of items) {\n const itemData = item.save(context);\n const name = itemData[\"name\"] as string | undefined;\n if (name) {\n delete itemData[\"name\"];\n\n // Check if we can use shorthand\n if (context.useShorthand && Property.shorthandProperty) {\n const shorthandProp = Property.shorthandProperty;\n const keys = Object.keys(itemData);\n if (keys.length === 1 && keys[0] === shorthandProp) {\n result[name] = itemData[shorthandProp];\n continue;\n }\n }\n result[name] = itemData;\n } else {\n throw new Error(\n \"Cannot save item in object format: missing 'name' property\",\n );\n }\n }\n return result;\n }\n\n /**\n * Save a collection of Property to object or array format.\n * @param items - The items to save.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The saved collection in object or array format.\n */\n static saveOutputs(\n items: Property[],\n context?: SaveContext,\n ): Record<string, unknown> | Record<string, unknown>[] {\n context = context ?? new SaveContext();\n\n // This type doesn't have a 'name' property, so always use array format\n return items.map((item) => item.save(context));\n }\n\n /**\n * Save a collection of Tool to object or array format.\n * @param items - The items to save.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The saved collection in object or array format.\n */\n static saveTools(\n items: Tool[],\n context?: SaveContext,\n ): Record<string, unknown> | Record<string, unknown>[] {\n context = context ?? new SaveContext();\n\n if (context.collectionFormat === \"array\") {\n return items.map((item) => item.save(context));\n }\n\n // Object format: use name as key\n const result: Record<string, unknown> = {};\n for (const item of items) {\n const itemData = item.save(context);\n const name = itemData[\"name\"] as string | undefined;\n if (name) {\n delete itemData[\"name\"];\n\n // Check if we can use shorthand\n if (context.useShorthand && Tool.shorthandProperty) {\n const shorthandProp = Tool.shorthandProperty;\n const keys = Object.keys(itemData);\n if (keys.length === 1 && keys[0] === shorthandProp) {\n result[name] = itemData[shorthandProp];\n continue;\n }\n }\n result[name] = itemData;\n } else {\n throw new Error(\n \"Cannot save item in object format: missing 'name' property\",\n );\n }\n }\n return result;\n }\n\n /**\n * Convert the Prompty instance to a YAML string.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The YAML string representation of this instance.\n */\n toYaml(context?: SaveContext): string {\n context = context ?? new SaveContext();\n return context.toYaml(this.save(context));\n }\n\n /**\n * Convert the Prompty instance to a JSON string.\n * @param context - Optional context with pre/post processing callbacks.\n * @param indent - Number of spaces for indentation. Defaults to 2.\n * @returns The JSON string representation of this instance.\n */\n toJson(context?: SaveContext, indent: number = 2): string {\n context = context ?? new SaveContext();\n return context.toJson(this.save(context), indent);\n }\n\n /**\n * Load a Prompty instance from a JSON string.\n * @param json - The JSON string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Prompty instance.\n */\n static fromJson(json: string, context?: LoadContext): Prompty {\n const data = JSON.parse(json);\n\n return Prompty.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a Prompty instance from a YAML string.\n * @param yaml - The YAML string to parse.\n * @param context - Optional context with pre/post processing callbacks.\n * @returns The loaded Prompty instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): Prompty {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return Prompty.load(data as Record<string, unknown>, context);\n }\n\n //#endregion\n}\n","/**\n * Shared renderer utilities — nonce-based thread marker injection.\n *\n * When inputs contain thread-kind values (`kind: \"thread\"` in inputs),\n * the renderer substitutes a unique nonce string instead of the actual value.\n * After parsing, the pipeline replaces nonce strings with ThreadMarker objects.\n *\n * @module\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { Prompty } from \"../model/prompty.js\";\nimport { RICH_KINDS } from \"../core/types.js\";\n\n/** Map of input name → nonce string (set during rendering, read during prepare). */\nlet lastNonces: Map<string, string> = new Map();\n\n/**\n * Prepare render inputs: replace thread/image/file/audio values with nonces.\n *\n * @returns `[modifiedInputs, noncesMap]`\n */\nexport function prepareRenderInputs(\n agent: Prompty,\n inputs: Record<string, unknown>,\n): [Record<string, unknown>, Map<string, string>] {\n const nonces = new Map<string, string>();\n const richNames = getRichInputNames(agent);\n const modified = { ...inputs };\n\n for (const [name, kind] of Object.entries(richNames)) {\n if (kind === \"thread\" || RICH_KINDS.has(kind)) {\n const nonce = `__prompty_nonce_${randomUUID().replace(/-/g, \"\")}__`;\n nonces.set(name, nonce);\n modified[name] = nonce;\n }\n }\n\n // Stash for retrieval by prepare()\n lastNonces = nonces;\n return [modified, nonces];\n}\n\n/** Retrieve the last nonce mapping set by `prepareRenderInputs`. */\nexport function getLastNonces(): Map<string, string> {\n return lastNonces;\n}\n\n/** Clear the stashed nonces. */\nexport function clearLastNonces(): void {\n lastNonces = new Map();\n}\n\n/**\n * Get map of `{propertyName: kind}` for inputs with rich kinds\n * (thread, image, file, audio).\n */\nfunction getRichInputNames(agent: Prompty): Record<string, string> {\n const result: Record<string, string> = {};\n const props = agent.inputs;\n if (!props || props.length === 0) return result;\n\n for (const prop of props) {\n const kind = prop.kind?.toLowerCase() ?? \"\";\n if (RICH_KINDS.has(kind) && prop.name) {\n result[prop.name] = kind;\n }\n }\n return result;\n}\n","/**\n * Four-step execution pipeline.\n *\n * ```\n * execute(prompt, inputs) → top-level orchestrator\n * ├── prepare(agent, inputs) → template → wire format\n * │ ├── render(agent, inputs) → template + inputs → rendered string\n * │ └── parse(agent, rendered) → rendered string → Message[]\n * └── run(agent, messages) → LLM call → clean result\n * ├── Executor.execute(...) → messages → raw LLM response\n * └── process(agent, response) → raw response → clean result\n * ```\n *\n * Each leaf step is independently traced. Users can bring their own\n * Renderer, Parser, Executor, Processor via the registry.\n *\n * @module\n */\n\nimport { Prompty } from \"../model/prompty.js\";\nimport { Model } from \"../model/model.js\";\nimport { ModelOptions } from \"../model/model-options.js\";\nimport {\n type ContentPart,\n type ToolCall,\n type Role,\n Message,\n ThreadMarker,\n RICH_KINDS,\n dictToMessage,\n text,\n} from \"./types.js\";\nimport { getRenderer, getParser, getExecutor, getProcessor } from \"./registry.js\";\nimport { getLastNonces, clearLastNonces } from \"../renderers/common.js\";\nimport { traceSpan, sanitizeValue } from \"../tracing/tracer.js\";\nimport { load } from \"./loader.js\";\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_FORMAT = \"nunjucks\";\nconst DEFAULT_PARSER = \"prompty\";\nconst DEFAULT_PROVIDER = \"openai\";\nconst DEFAULT_MAX_ITERATIONS = 10;\n\n/** Replace raw nonce strings with readable `{{thread:name}}` in trace output. */\nfunction sanitizeNonces(value: unknown): unknown {\n const nonces = getLastNonces();\n if (nonces.size === 0) return value;\n\n // Build nonce → display name map\n const replacements = new Map<string, string>();\n for (const [name, nonce] of nonces) {\n replacements.set(nonce, `[thread: ${name}]`);\n }\n\n if (typeof value === \"string\") {\n let result = value;\n for (const [nonce, display] of replacements) {\n result = result.replaceAll(nonce, display);\n }\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map(v => sanitizeNonces(v));\n }\n\n if (typeof value === \"object\" && value !== null) {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = sanitizeNonces(v);\n }\n return result;\n }\n\n return value;\n}\n\n// ---------------------------------------------------------------------------\n// Input validation\n// ---------------------------------------------------------------------------\n\n/**\n * Validate and fill defaults for agent inputs.\n */\nexport function validateInputs(\n agent: Prompty,\n inputs: Record<string, unknown>,\n): Record<string, unknown> {\n const props = agent.inputs;\n if (!props || props.length === 0) return { ...inputs };\n\n const result = { ...inputs };\n\n for (const prop of props) {\n const name = prop.name;\n if (!name) continue;\n\n if (result[name] === undefined) {\n if (prop.default !== undefined) {\n result[name] = prop.default;\n } else if (prop.required) {\n throw new Error(`Missing required input: \"${name}\"`);\n }\n }\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Resolve config helpers\n// ---------------------------------------------------------------------------\n\nfunction resolveFormatKind(agent: Prompty): string {\n return agent.template?.format?.kind ?? DEFAULT_FORMAT;\n}\n\nfunction resolveParserKind(agent: Prompty): string {\n return agent.template?.parser?.kind ?? DEFAULT_PARSER;\n}\n\nfunction resolveProvider(agent: Prompty): string {\n return agent.model?.provider ?? DEFAULT_PROVIDER;\n}\n\nfunction isStrictMode(agent: Prompty): boolean {\n // Default to strict=true to prevent prompt injection via role markers.\n // When strict, preRender wraps real role markers with nonces so the parser\n // rejects any role marker injected through user inputs.\n return agent.template?.format?.strict !== false;\n}\n\n/** Serialize agent for trace output, matching Python's load result shape. */\nfunction serializeAgent(agent: Prompty): Record<string, unknown> {\n const model = agent.model;\n return sanitizeValue(\"agent\", {\n name: agent.name ?? \"\",\n description: agent.description ?? \"\",\n metadata: agent.metadata ?? {},\n model: {\n id: model?.id ?? \"\",\n api: (model as unknown as Record<string, unknown>)?.apiType ?? \"chat\",\n provider: model?.provider ?? \"\",\n connection: model?.connection ?? {},\n },\n inputs: agent.inputs?.map(p => ({\n name: p.name ?? \"\",\n kind: p.kind ?? \"\",\n description: p.description ?? \"\",\n required: p.required ?? false,\n default: p.default,\n example: p.example,\n })) ?? [],\n outputs: agent.outputs?.map(p => ({\n name: p.name ?? \"\",\n kind: p.kind ?? \"\",\n description: p.description ?? \"\",\n })) ?? [],\n tools: agent.tools?.map(t => ({\n name: t.name ?? \"\",\n kind: t.kind ?? \"\",\n })) ?? [],\n template: {\n format: agent.template?.format?.kind ?? DEFAULT_FORMAT,\n parser: agent.template?.parser?.kind ?? DEFAULT_PARSER,\n },\n instructions: agent.instructions ?? \"\",\n }) as Record<string, unknown>;\n}\n\n/** Serialize messages for trace output, matching Python's parser result. */\nfunction serializeMessages(messages: Message[]): unknown[] {\n return messages.map(m => ({\n role: m.role,\n content: m.text,\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Leaf steps\n// ---------------------------------------------------------------------------\n\n/**\n * Render the template with inputs.\n *\n * Discovered by: `agent.template.format.kind` (default: \"nunjucks\").\n */\nexport async function render(\n agent: Prompty,\n inputs: Record<string, unknown>,\n): Promise<string> {\n const formatKind = resolveFormatKind(agent);\n const renderer = getRenderer(formatKind);\n\n return traceSpan(renderer.constructor?.name ?? \"Renderer\", async (emit) => {\n const template = agent.instructions ?? \"\";\n\n emit(\"signature\", `prompty.renderers.${renderer.constructor?.name ?? \"Renderer\"}.render`);\n emit(\"inputs\", { data: inputs });\n const result = await renderer.render(agent, template, inputs);\n emit(\"result\", sanitizeNonces(result));\n return result;\n });\n}\n\n/**\n * Parse a rendered string into abstract messages.\n *\n * Discovered by: `agent.template.parser.kind` (default: \"prompty\").\n */\nexport async function parse(\n agent: Prompty,\n rendered: string,\n context?: Record<string, unknown>,\n): Promise<Message[]> {\n const parserKind = resolveParserKind(agent);\n const parser = getParser(parserKind);\n\n return traceSpan(parser.constructor?.name ?? \"Parser\", async (emit) => {\n emit(\"signature\", `prompty.parsers.${parser.constructor?.name ?? \"Parser\"}.parse`);\n emit(\"inputs\", sanitizeNonces(rendered));\n const messages = await parser.parse(agent, rendered, context);\n emit(\"result\", sanitizeNonces(serializeMessages(messages)));\n return messages;\n });\n}\n\n/**\n * Process a raw LLM response into a clean result.\n *\n * Discovered by: `agent.model.provider` (default: \"openai\").\n */\nexport async function process(\n agent: Prompty,\n response: unknown,\n): Promise<unknown> {\n // Delegates directly — the processor implementation creates its own trace span\n const provider = resolveProvider(agent);\n const processor = getProcessor(provider);\n return processor.process(agent, response);\n}\n\n// ---------------------------------------------------------------------------\n// Composite: prepare() = render + parse + thread expansion\n// ---------------------------------------------------------------------------\n\n/**\n * Render template + parse into messages + expand thread markers.\n */\nexport async function prepare(\n agent: Prompty,\n inputs?: Record<string, unknown>,\n): Promise<Message[]> {\n return traceSpan(\"prepare\", async (emit) => {\n emit(\"signature\", \"prompty.prepare\");\n emit(\"description\", \"Render and parse into messages\");\n\n const validatedInputs = validateInputs(agent, inputs ?? {});\n emit(\"inputs\", validatedInputs);\n\n // Check for strict mode pre-render\n const parserKind = resolveParserKind(agent);\n const parser = getParser(parserKind);\n let context: Record<string, unknown> | undefined;\n\n if (isStrictMode(agent) && parser.preRender) {\n const [sanitized, ctx] = parser.preRender(agent.instructions ?? \"\");\n // Temporarily override instructions for rendering\n const originalInstructions = agent.instructions;\n agent.instructions = sanitized;\n context = ctx;\n\n // Render\n clearLastNonces();\n const rendered = await render(agent, validatedInputs);\n agent.instructions = originalInstructions;\n\n // Parse\n const messages = await parse(agent, rendered, context);\n\n // Thread expansion\n const nonces = getLastNonces();\n const expanded = expandThreads(messages, nonces, validatedInputs);\n\n emit(\"result\", serializeMessages(expanded));\n return expanded;\n }\n\n // Non-strict path\n clearLastNonces();\n const rendered = await render(agent, validatedInputs);\n const messages = await parse(agent, rendered, context);\n\n // Thread expansion\n const nonces = getLastNonces();\n const expanded = expandThreads(messages, nonces, validatedInputs);\n\n emit(\"result\", serializeMessages(expanded));\n return expanded;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Composite: run() = executor + process\n// ---------------------------------------------------------------------------\n\n/**\n * Execute messages against the LLM and process the response.\n */\nexport async function run(\n agent: Prompty,\n messages: Message[],\n options?: { raw?: boolean },\n): Promise<unknown> {\n return traceSpan(\"run\", async (emit) => {\n const provider = resolveProvider(agent);\n const executor = getExecutor(provider);\n\n emit(\"signature\", \"prompty.run\");\n emit(\"description\", \"Execute LLM call and process response\");\n emit(\"inputs\", serializeMessages(messages));\n\n // executor.execute() creates its own trace span (e.g. \"FoundryExecutor\", \"OpenAIExecutor\")\n const response = await executor.execute(agent, messages);\n\n if (options?.raw) {\n emit(\"result\", response);\n return response;\n }\n // process() delegates to the provider's processor which creates its own trace span\n const result = await process(agent, response);\n emit(\"result\", result);\n return result;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Top-level: execute() = load + prepare + run\n// ---------------------------------------------------------------------------\n\n/**\n * Full pipeline: load → prepare → run.\n */\nexport async function execute(\n prompt: string | Prompty,\n inputs?: Record<string, unknown>,\n options?: { raw?: boolean },\n): Promise<unknown> {\n return traceSpan(\"execute\", async (emit) => {\n const agent = typeof prompt === \"string\"\n ? await traceSpan(\"load\", async (loadEmit) => {\n loadEmit(\"signature\", \"prompty.load\");\n loadEmit(\"description\", \"Load a prompty file.\");\n loadEmit(\"inputs\", { prompty_file: prompt });\n const loaded = load(prompt);\n loadEmit(\"result\", serializeAgent(loaded));\n return loaded;\n })\n : prompt;\n\n emit(\"signature\", \"prompty.execute\");\n emit(\"description\", \"Execute a prompty\");\n emit(\"inputs\", { prompt: serializeAgent(agent), inputs: inputs ?? {} });\n const messages = await prepare(agent, inputs);\n const result = await run(agent, messages, options);\n emit(\"result\", result);\n return result;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Agent loop: executeAgent()\n// ---------------------------------------------------------------------------\n\n/** Check if a value is an async iterable (i.e. a stream). */\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return value != null && typeof value === \"object\" && Symbol.asyncIterator in value;\n}\n\n/** Check if an item looks like a ToolCall from the processor. */\nfunction isToolCallLike(item: unknown): item is ToolCall {\n return (\n typeof item === \"object\" &&\n item !== null &&\n \"id\" in item &&\n \"name\" in item &&\n \"arguments\" in item\n );\n}\n\n/**\n * Consume a streaming response through the processor.\n * Returns accumulated text content and any ToolCall objects.\n */\nasync function consumeStream(\n agent: Prompty,\n response: unknown,\n): Promise<{ toolCalls: ToolCall[]; content: string }> {\n const processed = await process(agent, response);\n\n const toolCalls: ToolCall[] = [];\n const textParts: string[] = [];\n\n if (isAsyncIterable(processed)) {\n for await (const item of processed) {\n if (isToolCallLike(item)) {\n toolCalls.push(item);\n } else if (typeof item === \"string\") {\n textParts.push(item);\n }\n }\n } else if (typeof processed === \"string\") {\n textParts.push(processed);\n }\n\n return { toolCalls, content: textParts.join(\"\") };\n}\n\n/**\n * Build tool result messages from processed ToolCall objects (streaming path).\n * Dispatches to the correct wire format based on provider and apiType.\n */\nasync function buildToolMessagesFromCalls(\n toolCalls: ToolCall[],\n textContent: string,\n tools: Record<string, (...args: unknown[]) => unknown>,\n agent: Prompty,\n parentEmit?: (key: string, value: unknown) => void,\n): Promise<Message[]> {\n const provider = resolveProvider(agent);\n const apiType = agent.model?.apiType || \"chat\";\n const messages: Message[] = [];\n const toolInputs: Record<string, unknown>[] = [];\n\n // --- Assistant message with provider-appropriate metadata ---\n if (provider === \"anthropic\") {\n // Anthropic: raw content blocks (text + tool_use)\n const rawContent: Record<string, unknown>[] = [];\n if (textContent) rawContent.push({ type: \"text\", text: textContent });\n for (const tc of toolCalls) {\n rawContent.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: JSON.parse(tc.arguments),\n });\n }\n messages.push(\n new Message(\"assistant\", textContent ? [text(textContent)] : [], { content: rawContent }),\n );\n } else if (apiType === \"responses\") {\n // Responses API: individual function_call items\n for (const tc of toolCalls) {\n messages.push(\n new Message(\"assistant\", [], {\n responses_function_call: {\n type: \"function_call\",\n call_id: tc.id,\n name: tc.name,\n arguments: tc.arguments,\n },\n }),\n );\n }\n } else {\n // OpenAI Chat: tool_calls metadata\n const rawToolCalls = toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: { name: tc.name, arguments: tc.arguments },\n }));\n messages.push(\n new Message(\"assistant\", textContent ? [text(textContent)] : [], {\n tool_calls: rawToolCalls,\n }),\n );\n }\n\n // --- Execute tools and build result messages ---\n const toolResultBlocks: Record<string, unknown>[] = [];\n\n for (const tc of toolCalls) {\n let result: string;\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(tc.arguments);\n const toolFn = tools[tc.name];\n if (!toolFn) {\n result = `Error: tool \"${tc.name}\" not found`;\n } else {\n const toolResult = await traceSpan(tc.name, async (toolEmit) => {\n toolEmit(\"signature\", `prompty.tool.${tc.name}`);\n toolEmit(\"description\", `Execute tool: ${tc.name}`);\n toolEmit(\"inputs\", { arguments: parsedArgs, id: tc.id });\n const r = await toolFn(...(Array.isArray(parsedArgs) ? parsedArgs : [parsedArgs]));\n const str = typeof r === \"string\" ? r : JSON.stringify(r);\n toolEmit(\"result\", str);\n return str;\n });\n result = toolResult as string;\n }\n } catch (err) {\n result = `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n\n toolInputs.push({ name: tc.name, arguments: parsedArgs, id: tc.id, result });\n\n if (provider === \"anthropic\") {\n toolResultBlocks.push({ type: \"tool_result\", tool_use_id: tc.id, content: result });\n } else {\n messages.push(\n new Message(\"tool\", [text(result)], { tool_call_id: tc.id, name: tc.name }),\n );\n }\n }\n\n // Anthropic: batch all tool results in single user message\n if (provider === \"anthropic\" && toolResultBlocks.length > 0) {\n messages.push(new Message(\"user\", [], { tool_results: toolResultBlocks }));\n }\n\n if (parentEmit) {\n parentEmit(\"inputs\", { tool_calls: toolInputs });\n }\n\n return messages;\n}\n\n/**\n * Run a prompt with automatic tool-call execution loop.\n */\nexport async function executeAgent(\n prompt: string | Prompty,\n inputs?: Record<string, unknown>,\n options?: {\n tools?: Record<string, (...args: unknown[]) => unknown>;\n maxIterations?: number;\n raw?: boolean;\n },\n): Promise<unknown> {\n return traceSpan(\"executeAgent\", async (emit) => {\n const agent = typeof prompt === \"string\"\n ? await traceSpan(\"load\", async (loadEmit) => {\n loadEmit(\"signature\", \"prompty.load\");\n loadEmit(\"description\", \"Load a prompty file.\");\n loadEmit(\"inputs\", { prompty_file: prompt });\n const loaded = load(prompt);\n loadEmit(\"result\", serializeAgent(loaded));\n return loaded;\n })\n : prompt;\n const tools = options?.tools ?? {};\n const maxIterations = options?.maxIterations ?? DEFAULT_MAX_ITERATIONS;\n\n emit(\"signature\", \"prompty.executeAgent\");\n emit(\"description\", \"Execute a prompty with tool calling\");\n emit(\"inputs\", { prompt: serializeAgent(agent), tools: Object.keys(tools), inputs: inputs ?? {} });\n\n const messages = await prepare(agent, inputs);\n const provider = resolveProvider(agent);\n const executor = getExecutor(provider);\n\n let response = await executor.execute(agent, messages);\n let iteration = 0;\n\n while (true) {\n // Streaming: consume the stream, extract tool calls from buffered chunks\n if (isAsyncIterable(response)) {\n const { toolCalls, content } = await consumeStream(agent, response);\n\n if (toolCalls.length === 0) {\n // Final answer — return collected content\n emit(\"iterations\", iteration);\n emit(\"result\", content);\n return content;\n }\n\n iteration++;\n if (iteration > maxIterations) {\n throw new Error(\n `Agent loop exceeded maxIterations (${maxIterations}). ` +\n `The model kept requesting tool calls. Increase maxIterations or check your tools.`,\n );\n }\n\n const toolMessages = await traceSpan(\"toolCalls\", async (toolEmit) => {\n toolEmit(\"signature\", \"prompty.executeAgent.toolCalls\");\n toolEmit(\"description\", `Tool call round ${iteration}`);\n const result = await buildToolMessagesFromCalls(toolCalls, content, tools, agent, toolEmit);\n toolEmit(\"result\", result.map((m) => ({ role: m.role, content: m.parts.map((p) => (p as { value?: string }).value ?? \"\").join(\"\"), metadata: m.metadata })));\n return result;\n });\n\n messages.push(...toolMessages);\n response = await executor.execute(agent, messages);\n continue;\n }\n\n // Non-streaming: check raw response for tool calls\n if (!hasToolCalls(response)) break;\n\n iteration++;\n if (iteration > maxIterations) {\n throw new Error(\n `Agent loop exceeded maxIterations (${maxIterations}). ` +\n `The model kept requesting tool calls. Increase maxIterations or check your tools.`,\n );\n }\n\n const toolMessages = await traceSpan(\"toolCalls\", async (toolEmit) => {\n toolEmit(\"signature\", \"prompty.executeAgent.toolCalls\");\n toolEmit(\"description\", `Tool call round ${iteration}`);\n const result = await buildToolResultMessages(response, tools, toolEmit);\n toolEmit(\"result\", result.map((m) => ({ role: m.role, content: m.parts.map((p) => (p as { value?: string }).value ?? \"\").join(\"\"), metadata: m.metadata })));\n return result;\n });\n\n messages.push(...toolMessages);\n response = await executor.execute(agent, messages);\n }\n\n emit(\"iterations\", iteration);\n\n if (options?.raw) {\n emit(\"result\", response);\n return response;\n }\n const result = await process(agent, response);\n emit(\"result\", result);\n return result;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Thread marker helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Get map of `{propertyName: kind}` for inputs with rich kinds.\n */\nfunction getRichInputNames(agent: Prompty): Record<string, string> {\n const result: Record<string, string> = {};\n const props = agent.inputs;\n if (!props || props.length === 0) return result;\n\n for (const prop of props) {\n const kind = prop.kind?.toLowerCase() ?? \"\";\n if (RICH_KINDS.has(kind) && prop.name) {\n result[prop.name] = kind;\n }\n }\n return result;\n}\n\n/**\n * Expand thread markers: replace nonce strings in message text\n * with actual conversation messages from inputs.\n */\nfunction expandThreads(\n messages: Message[],\n nonces: Map<string, string>,\n inputs: Record<string, unknown>,\n): Message[] {\n if (nonces.size === 0) return messages;\n\n // Build nonce → input name lookup\n const nonceToName = new Map<string, string>();\n for (const [name, nonce] of nonces) {\n nonceToName.set(nonce, name);\n }\n\n const result: Message[] = [];\n\n for (const msg of messages) {\n // Check if any text part contains a nonce\n let expanded = false;\n for (const part of msg.parts) {\n if (part.kind !== \"text\") continue;\n\n for (const [nonce, name] of nonceToName) {\n if (part.value.includes(nonce)) {\n // Split text around the nonce\n const before = part.value.slice(0, part.value.indexOf(nonce)).trim();\n const after = part.value.slice(part.value.indexOf(nonce) + nonce.length).trim();\n\n if (before) {\n result.push(new Message(msg.role, [text(before)], { ...msg.metadata }));\n }\n\n // Insert thread messages from input\n const threadMessages = inputs[name];\n if (Array.isArray(threadMessages)) {\n for (const tm of threadMessages) {\n if (tm instanceof Message) {\n result.push(tm);\n } else if (typeof tm === \"object\" && tm !== null) {\n result.push(dictToMessage(tm as Record<string, unknown>));\n }\n }\n }\n\n if (after) {\n result.push(new Message(msg.role, [text(after)], { ...msg.metadata }));\n }\n\n expanded = true;\n break;\n }\n }\n\n if (expanded) break;\n }\n\n if (!expanded) {\n result.push(msg);\n }\n }\n\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Tool call helpers\n// ---------------------------------------------------------------------------\n\nfunction hasToolCalls(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) return false;\n const r = response as Record<string, unknown>;\n\n // OpenAI ChatCompletion shape: choices[0].message.tool_calls\n const choices = r.choices as unknown[] | undefined;\n if (Array.isArray(choices) && choices.length > 0) {\n const choice = choices[0] as Record<string, unknown>;\n const message = choice.message as Record<string, unknown> | undefined;\n if (message) {\n const toolCalls = message.tool_calls as unknown[] | undefined;\n if (Array.isArray(toolCalls) && toolCalls.length > 0) return true;\n }\n }\n\n // Anthropic Messages shape: content[].type === \"tool_use\"\n if (r.stop_reason === \"tool_use\" && Array.isArray(r.content)) {\n return (r.content as Record<string, unknown>[]).some(\n (block) => block.type === \"tool_use\",\n );\n }\n\n // OpenAI Responses API shape: output[].type === \"function_call\"\n if (r.object === \"response\" && Array.isArray(r.output)) {\n return (r.output as Record<string, unknown>[]).some(\n (item) => item.type === \"function_call\",\n );\n }\n\n return false;\n}\n\nasync function buildToolResultMessages(\n response: unknown,\n tools: Record<string, (...args: unknown[]) => unknown>,\n parentEmit?: (key: string, value: unknown) => void,\n): Promise<Message[]> {\n const r = response as Record<string, unknown>;\n\n // Detect response format and dispatch\n if (Array.isArray(r.content) && r.stop_reason === \"tool_use\") {\n return buildAnthropicToolResultMessages(r, tools, parentEmit);\n }\n\n // OpenAI Responses API: output[].type === \"function_call\"\n if (r.object === \"response\" && Array.isArray(r.output)) {\n return buildResponsesToolResultMessages(r, tools, parentEmit);\n }\n\n return buildOpenAIToolResultMessages(r, tools, parentEmit);\n}\n\n/** Handle OpenAI ChatCompletion tool calls: choices[0].message.tool_calls */\nasync function buildOpenAIToolResultMessages(\n r: Record<string, unknown>,\n tools: Record<string, (...args: unknown[]) => unknown>,\n parentEmit?: (key: string, value: unknown) => void,\n): Promise<Message[]> {\n const choices = r.choices as unknown[];\n const choice = choices[0] as Record<string, unknown>;\n const message = choice.message as Record<string, unknown>;\n const toolCalls = message.tool_calls as Record<string, unknown>[];\n\n const messages: Message[] = [];\n\n // First, add assistant message with tool_calls metadata\n const assistantContent = (message.content as string) ?? \"\";\n messages.push(\n new Message(\"assistant\", assistantContent ? [text(assistantContent)] : [], {\n tool_calls: toolCalls,\n }),\n );\n\n const toolInputs: Record<string, unknown>[] = [];\n\n // Then, execute each tool and build tool result messages\n for (const tc of toolCalls) {\n const fn = tc.function as Record<string, unknown>;\n const toolName = fn.name as string;\n const toolCallId = tc.id as string;\n\n let result: string;\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(fn.arguments as string);\n const toolFn = tools[toolName];\n if (!toolFn) {\n result = `Error: tool \"${toolName}\" not found`;\n } else {\n const toolResult = await traceSpan(toolName, async (toolEmit) => {\n toolEmit(\"signature\", `prompty.tool.${toolName}`);\n toolEmit(\"description\", `Execute tool: ${toolName}`);\n toolEmit(\"inputs\", { arguments: parsedArgs, tool_call_id: toolCallId });\n const r = await toolFn(...(Array.isArray(parsedArgs) ? parsedArgs : [parsedArgs]));\n const str = typeof r === \"string\" ? r : JSON.stringify(r);\n toolEmit(\"result\", str);\n return str;\n });\n result = toolResult as string;\n }\n } catch (err) {\n result = `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n\n toolInputs.push({ name: toolName, arguments: parsedArgs, tool_call_id: toolCallId, result });\n\n messages.push(\n new Message(\"tool\", [text(result)], {\n tool_call_id: toolCallId,\n name: toolName,\n }),\n );\n }\n\n if (parentEmit) {\n parentEmit(\"inputs\", { tool_calls: toolInputs });\n }\n\n return messages;\n}\n\n/** Handle Anthropic Messages tool calls: content[].type === \"tool_use\" */\nasync function buildAnthropicToolResultMessages(\n r: Record<string, unknown>,\n tools: Record<string, (...args: unknown[]) => unknown>,\n parentEmit?: (key: string, value: unknown) => void,\n): Promise<Message[]> {\n const content = r.content as Record<string, unknown>[];\n const toolUseBlocks = content.filter((block) => block.type === \"tool_use\");\n\n const messages: Message[] = [];\n\n // Add assistant message with the FULL content blocks (including tool_use).\n // Anthropic requires the assistant message to contain the original tool_use\n // blocks so the API can match tool_result blocks to their tool_use origins.\n const textParts = content\n .filter((block) => block.type === \"text\")\n .map((block) => text(block.text as string));\n messages.push(\n new Message(\"assistant\", textParts, { content }),\n );\n\n const toolInputs: Record<string, unknown>[] = [];\n const toolResultBlocks: Record<string, unknown>[] = [];\n\n for (const block of toolUseBlocks) {\n const toolName = block.name as string;\n const toolCallId = block.id as string;\n const toolArgs = block.input as Record<string, unknown>;\n\n let result: string;\n try {\n const toolFn = tools[toolName];\n if (!toolFn) {\n result = `Error: tool \"${toolName}\" not found`;\n } else {\n const toolResult = await traceSpan(toolName, async (toolEmit) => {\n toolEmit(\"signature\", `prompty.tool.${toolName}`);\n toolEmit(\"description\", `Execute tool: ${toolName}`);\n toolEmit(\"inputs\", { arguments: toolArgs, tool_use_id: toolCallId });\n const r = await toolFn(...(Array.isArray(toolArgs) ? toolArgs : [toolArgs]));\n const str = typeof r === \"string\" ? r : JSON.stringify(r);\n toolEmit(\"result\", str);\n return str;\n });\n result = toolResult as string;\n }\n } catch (err) {\n result = `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n\n toolInputs.push({ name: toolName, arguments: toolArgs, tool_use_id: toolCallId, result });\n\n // Collect tool_result blocks for batching into a single user message\n toolResultBlocks.push({\n type: \"tool_result\",\n tool_use_id: toolCallId,\n content: result,\n });\n }\n\n if (parentEmit) {\n parentEmit(\"inputs\", { tool_calls: toolInputs });\n }\n\n // Anthropic requires ALL tool results in a SINGLE user message\n // with the tool_result content blocks batched together.\n messages.push(\n new Message(\"user\", [], { tool_results: toolResultBlocks }),\n );\n\n return messages;\n}\n\n/** Handle OpenAI Responses API tool calls: output[].type === \"function_call\" */\nasync function buildResponsesToolResultMessages(\n r: Record<string, unknown>,\n tools: Record<string, (...args: unknown[]) => unknown>,\n parentEmit?: (key: string, value: unknown) => void,\n): Promise<Message[]> {\n const output = r.output as Record<string, unknown>[];\n const funcCalls = output.filter((item) => item.type === \"function_call\");\n\n const messages: Message[] = [];\n const toolInputs: Record<string, unknown>[] = [];\n\n for (const fc of funcCalls) {\n const toolName = fc.name as string;\n const callId = (fc.call_id ?? fc.id ?? \"\") as string;\n const argsStr = (fc.arguments as string) ?? \"{}\";\n\n // Include the original function_call item so the Responses API can match\n // function_call_output items to their origin function_call\n messages.push(\n new Message(\"assistant\", [], {\n responses_function_call: {\n type: \"function_call\",\n call_id: callId,\n name: toolName,\n arguments: argsStr,\n },\n }),\n );\n\n let result: string;\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(argsStr);\n const toolFn = tools[toolName];\n if (!toolFn) {\n result = `Error: tool \"${toolName}\" not found`;\n } else {\n const toolResult = await traceSpan(toolName, async (toolEmit) => {\n toolEmit(\"signature\", `prompty.tool.${toolName}`);\n toolEmit(\"description\", `Execute tool: ${toolName}`);\n toolEmit(\"inputs\", { arguments: parsedArgs, call_id: callId });\n const r = await toolFn(...(Array.isArray(parsedArgs) ? parsedArgs : [parsedArgs]));\n const str = typeof r === \"string\" ? r : JSON.stringify(r);\n toolEmit(\"result\", str);\n return str;\n });\n result = toolResult as string;\n }\n } catch (err) {\n result = `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n\n toolInputs.push({ name: toolName, arguments: parsedArgs, call_id: callId, result });\n\n // Responses API tool results use tool_call_id metadata so the wire format\n // (messageToResponsesInput) maps them to { type: \"function_call_output\", call_id, output }\n messages.push(\n new Message(\"tool\", [text(result)], {\n tool_call_id: callId,\n name: toolName,\n }),\n );\n }\n\n if (parentEmit) {\n parentEmit(\"inputs\", { tool_calls: toolInputs });\n }\n\n return messages;\n}\n\n// Backward-compatibility alias\nexport const runAgent = executeAgent;\n","/**\n * Nunjucks renderer — Jinja2-compatible template rendering for TypeScript.\n *\n * Nunjucks is the standard Jinja2-compatible engine for Node.js.\n * This renderer replaces thread-kind inputs with nonce markers\n * before rendering.\n *\n * @module\n */\n\nimport nunjucks from \"nunjucks\";\nimport type { Prompty } from \"../model/prompty.js\";\nimport type { Renderer } from \"../core/interfaces.js\";\nimport { prepareRenderInputs } from \"./common.js\";\n\nconst env = new nunjucks.Environment(null, {\n autoescape: false,\n throwOnUndefined: false,\n});\n\nexport class NunjucksRenderer implements Renderer {\n async render(\n agent: Prompty,\n template: string,\n inputs: Record<string, unknown>,\n ): Promise<string> {\n const [modified] = prepareRenderInputs(agent, inputs);\n return env.renderString(template, modified);\n }\n}\n","/**\n * Mustache renderer — logic-less template rendering.\n *\n * @module\n */\n\nimport Mustache from \"mustache\";\nimport type { Prompty } from \"../model/prompty.js\";\nimport type { Renderer } from \"../core/interfaces.js\";\nimport { prepareRenderInputs } from \"./common.js\";\n\nexport class MustacheRenderer implements Renderer {\n async render(\n agent: Prompty,\n template: string,\n inputs: Record<string, unknown>,\n ): Promise<string> {\n const [modified] = prepareRenderInputs(agent, inputs);\n return Mustache.render(template, modified);\n }\n}\n","/**\n * Prompty chat parser — splits rendered text into abstract messages.\n *\n * Recognizes role markers (`system:`, `user:`, `assistant:`, `developer:`)\n * and inline markdown images. Supports nonce-based sanitization when\n * `Format.strict` is enabled.\n *\n * @module\n */\n\nimport { readFileSync, existsSync } from \"node:fs\";\nimport { resolve, extname } from \"node:path\";\nimport { randomBytes } from \"node:crypto\";\nimport type { Prompty } from \"../model/prompty.js\";\nimport {\n type ContentPart,\n type ImagePart,\n type TextPart,\n Message,\n ROLES,\n} from \"../core/types.js\";\nimport type { Parser } from \"../core/interfaces.js\";\n\n// Role boundary regex — matches lines like `system:` or `user[name=\"Alice\"]:`\nconst ROLE_NAMES = [...ROLES].filter((r) => r !== \"tool\").sort().join(\"|\");\nconst BOUNDARY_RE = new RegExp(\n `^\\\\s*#?\\\\s*(${ROLE_NAMES})(\\\\[((\\\\w+\\\\s*=\\\\s*\"?[^\"]*\"?\\\\s*,?\\\\s*)+)\\\\])?\\\\s*:\\\\s*$`,\n \"i\",\n);\n\n// Markdown image regex — `![alt](url)`\nconst IMAGE_RE = /(?<alt>!\\[[^\\]]*\\])\\((?<filename>[^\\s)]+)(?:\\s+[^)]*)?\\)/g;\n\n// Attribute key=value regex\nconst ATTR_RE = /(\\w+)\\s*=\\s*\"?([^\",]*)\"?/g;\n\nexport class PromptyChatParser implements Parser {\n // ---- preRender (optional sanitization) ----\n\n preRender(template: string): [string, Record<string, unknown>] {\n const nonce = randomBytes(8).toString(\"hex\");\n const sanitized = template\n .split(\"\\n\")\n .map((line) => {\n const m = BOUNDARY_RE.exec(line.trim());\n if (m) {\n const role = m[1].trim().toLowerCase();\n return `${role}[nonce=\"${nonce}\"]:\\n`;\n }\n return line;\n })\n .join(\"\\n\");\n\n return [sanitized, { nonce }];\n }\n\n // ---- parse ----\n\n async parse(\n agent: Prompty,\n rendered: string,\n context?: Record<string, unknown>,\n ): Promise<Message[]> {\n const nonce = context?.nonce as string | undefined;\n const basePath = this.resolveBasePath(agent);\n return this.parseMessages(rendered, nonce, basePath);\n }\n\n // ---- internal parsing ----\n\n private resolveBasePath(agent: Prompty): string | undefined {\n const meta = agent.metadata as Record<string, unknown> | undefined;\n if (meta && typeof meta.source_path === \"string\") {\n return resolve(meta.source_path, \"..\");\n }\n return undefined;\n }\n\n private parseMessages(\n text: string,\n nonce: string | undefined,\n basePath: string | undefined,\n ): Message[] {\n const messages: Message[] = [];\n let contentBuffer: string[] = [];\n let role = \"system\"; // default role if none specified\n let attrs: Record<string, unknown> = {};\n let hasBoundary = false; // tracks if current segment started with a role marker\n\n for (const line of text.split(\"\\n\")) {\n const stripped = line.trim();\n const m = BOUNDARY_RE.exec(stripped);\n\n if (m) {\n if (contentBuffer.length > 0) {\n messages.push(this.buildMessage(role, contentBuffer, attrs, hasBoundary ? nonce : undefined, basePath));\n contentBuffer = [];\n }\n\n role = m[1].trim().toLowerCase();\n const rawAttrs = m[2]; // e.g. [name=\"Alice\",nonce=\"abc\"]\n attrs = rawAttrs ? this.parseAttrs(rawAttrs) : {};\n hasBoundary = true;\n continue;\n }\n\n contentBuffer.push(line);\n }\n\n // Flush remaining content\n if (contentBuffer.length > 0) {\n messages.push(this.buildMessage(role, contentBuffer, attrs, hasBoundary ? nonce : undefined, basePath));\n }\n\n return messages;\n }\n\n private buildMessage(\n role: string,\n lines: string[],\n attrs: Record<string, unknown>,\n nonce: string | undefined,\n basePath: string | undefined,\n ): Message {\n // Strip leading/trailing blank lines from content\n let content = lines.join(\"\\n\").replace(/^\\n+|\\n+$/g, \"\");\n\n // Validate nonce in strict mode\n if (nonce !== undefined) {\n const msgNonce = attrs.nonce as string | undefined;\n delete attrs.nonce;\n if (msgNonce !== nonce) {\n throw new Error(\n \"Nonce mismatch — possible prompt injection detected \" +\n \"(strict mode is enabled). A template variable may be \" +\n \"injecting role markers.\",\n );\n }\n }\n\n // Parse content for inline images\n const parts = this.parseContent(content, basePath);\n\n // Remaining attrs become metadata\n const metadata: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(attrs)) {\n if (k !== \"nonce\") metadata[k] = v;\n }\n\n return new Message(role as Message[\"role\"], parts, metadata);\n }\n\n private parseAttrs(raw: string): Record<string, unknown> {\n const inner = raw.replace(/^\\[|\\]$/g, \"\");\n const result: Record<string, unknown> = {};\n\n let m: RegExpExecArray | null;\n const re = new RegExp(ATTR_RE.source, ATTR_RE.flags);\n while ((m = re.exec(inner)) !== null) {\n const key = m[1];\n const val = m[2].trim();\n\n // Type coercion\n if (val.toLowerCase() === \"true\") {\n result[key] = true;\n } else if (val.toLowerCase() === \"false\") {\n result[key] = false;\n } else if (/^\\d+$/.test(val)) {\n result[key] = parseInt(val, 10);\n } else if (/^\\d+\\.\\d+$/.test(val)) {\n result[key] = parseFloat(val);\n } else {\n result[key] = val;\n }\n }\n\n return result;\n }\n\n private parseContent(content: string, basePath: string | undefined): ContentPart[] {\n const re = new RegExp(IMAGE_RE.source, IMAGE_RE.flags);\n const matches: RegExpExecArray[] = [];\n let m: RegExpExecArray | null;\n while ((m = re.exec(content)) !== null) {\n matches.push(m);\n }\n\n if (matches.length === 0) {\n return [{ kind: \"text\", value: content } as TextPart];\n }\n\n const parts: ContentPart[] = [];\n let lastEnd = 0;\n\n for (const match of matches) {\n const before = content.slice(lastEnd, match.index).trim();\n if (before) {\n parts.push({ kind: \"text\", value: before } as TextPart);\n }\n\n const filename = match.groups!.filename.split(\" \")[0].trim();\n const source = this.resolveImage(filename, basePath);\n parts.push({ kind: \"image\", source } as ImagePart);\n\n lastEnd = match.index + match[0].length;\n }\n\n const after = content.slice(lastEnd).trim();\n if (after) {\n parts.push({ kind: \"text\", value: after } as TextPart);\n }\n\n return parts;\n }\n\n private resolveImage(imageRef: string, basePath: string | undefined): string {\n if (imageRef.startsWith(\"http://\") || imageRef.startsWith(\"https://\") || imageRef.startsWith(\"data:\")) {\n return imageRef;\n }\n\n // Local file — resolve and base64 encode\n const imagePath = basePath ? resolve(basePath, imageRef) : imageRef;\n\n if (!existsSync(imagePath)) {\n return imageRef;\n }\n\n const data = readFileSync(imagePath);\n const b64 = data.toString(\"base64\");\n\n const ext = extname(imagePath).toLowerCase();\n const mimeMap: Record<string, string> = {\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".svg\": \"image/svg+xml\",\n };\n const mime = mimeMap[ext] ?? \"application/octet-stream\";\n return `data:${mime};base64,${b64}`;\n }\n}\n","export { Tracer, trace, traceMethod, traceSpan, sanitizeValue, toSerializable } from \"./tracer.js\";\nexport type { TracerBackend, TracerFactory, SpanEmitter } from \"./tracer.js\";\nexport { consoleTracer } from \"./console.js\";\nexport { PromptyTracer } from \"./promptyTracer.js\";\n","/**\n * Console tracer backend — prints trace events to stderr.\n *\n * @module\n */\n\nimport type { TracerFactory } from \"./tracer.js\";\n\n/**\n * A tracer factory that prints all span events to stderr.\n *\n * @example\n * ```ts\n * import { Tracer } from \"prompty\";\n * import { consoleTracer } from \"prompty/tracing\";\n * Tracer.add(\"console\", consoleTracer);\n * ```\n */\nexport const consoleTracer: TracerFactory = (signature: string) => {\n console.error(`[Tracer] ── ${signature}`);\n return (key: string, value: unknown) => {\n if (key === \"__end__\") return;\n const display = typeof value === \"object\" ? JSON.stringify(value, null, 2) : String(value);\n const truncated = display.length > 200 ? display.slice(0, 200) + \"...\" : display;\n console.error(`[Tracer] ${key}: ${truncated}`);\n };\n};\n","/**\n * File-writing tracer backend — writes hierarchical `.tracy` JSON files.\n *\n * Mirrors the Python `PromptyTracer`: captures timing, usage metrics,\n * and nested call frames, then writes a `.tracy` file on root span completion.\n *\n * @module\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { TracerFactory, TracerBackend } from \"./tracer.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface TraceFrame {\n name: string;\n __time: {\n start: Date;\n end?: Date;\n duration?: number;\n };\n [key: string]: unknown;\n __frames?: TraceFrame[];\n __usage?: Record<string, number>;\n}\n\ninterface TracyFile {\n runtime: string;\n version: string;\n trace: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// PromptyTracer\n// ---------------------------------------------------------------------------\n\n/**\n * JSON file trace backend that writes `.tracy` files to disk.\n *\n * Each completed root span is written as a `.tracy` file in the configured\n * output directory, using the format: `{spanName}.{YYYYMMDD.HHMMSS}.tracy`\n *\n * @example\n * ```ts\n * import { Tracer } from \"@prompty/core\";\n * import { PromptyTracer } from \"@prompty/core\";\n *\n * const pt = new PromptyTracer({ outputDir: \"./.runs\" });\n * Tracer.add(\"prompty\", pt.factory);\n * ```\n */\nexport class PromptyTracer {\n private outputDir: string;\n private version: string;\n private stack: TraceFrame[] = [];\n\n /** The path of the last written `.tracy` file, if any. */\n public lastTracePath: string | undefined;\n\n constructor(options?: { outputDir?: string; version?: string }) {\n this.outputDir = options?.outputDir\n ? path.resolve(options.outputDir)\n : path.resolve(process.cwd(), \".runs\");\n this.version = options?.version ?? \"2.0.0\";\n\n // Ensure output directory exists\n if (!fs.existsSync(this.outputDir)) {\n fs.mkdirSync(this.outputDir, { recursive: true });\n }\n }\n\n /**\n * The tracer factory — pass this to `Tracer.add()`.\n *\n * Arrow function so `this` is bound correctly.\n */\n factory: TracerFactory = (signature: string): TracerBackend => {\n // Push a new frame for this span\n const frame: TraceFrame = {\n name: signature,\n __time: { start: new Date() },\n };\n this.stack.push(frame);\n\n return (key: string, value: unknown): void => {\n if (key === \"__end__\") {\n this.endSpan(frame);\n return;\n }\n\n // Accumulate key/value pairs on the frame\n if (key in frame) {\n const existing = frame[key];\n if (Array.isArray(existing)) {\n existing.push(value);\n } else {\n frame[key] = [existing, value];\n }\n } else {\n frame[key] = value;\n }\n };\n };\n\n private endSpan(frame: TraceFrame): void {\n // Pop from stack (find and remove this specific frame)\n const idx = this.stack.lastIndexOf(frame);\n if (idx >= 0) {\n this.stack.splice(idx, 1);\n }\n\n // Compute timing\n const start = frame.__time.start;\n const end = new Date();\n const duration = end.getTime() - start.getTime();\n\n frame.__time = {\n start: start,\n end: end,\n duration,\n };\n\n // Hoist usage from result\n if (frame.result && typeof frame.result === \"object\" && !Array.isArray(frame.result)) {\n const result = frame.result as Record<string, unknown>;\n if (result.usage && typeof result.usage === \"object\") {\n frame.__usage = this.hoistUsage(result.usage as Record<string, unknown>, frame.__usage ?? {});\n }\n }\n\n // Hoist usage from array results (streaming)\n if (Array.isArray(frame.result)) {\n for (const item of frame.result) {\n if (item && typeof item === \"object\" && \"usage\" in item) {\n const r = item as Record<string, unknown>;\n if (r.usage && typeof r.usage === \"object\") {\n frame.__usage = this.hoistUsage(r.usage as Record<string, unknown>, frame.__usage ?? {});\n }\n }\n }\n }\n\n // Aggregate usage from child frames\n if (frame.__frames) {\n for (const child of frame.__frames) {\n if (child.__usage) {\n frame.__usage = this.hoistUsage(child.__usage, frame.__usage ?? {});\n }\n }\n }\n\n // Root frame — write to disk\n if (this.stack.length === 0) {\n this.writeTrace(frame);\n } else {\n // Nested — append to parent's __frames\n const parent = this.stack[this.stack.length - 1];\n if (!parent.__frames) {\n parent.__frames = [];\n }\n parent.__frames.push(frame);\n }\n }\n\n private hoistUsage(\n src: Record<string, unknown>,\n cur: Record<string, number>,\n ): Record<string, number> {\n for (const [key, value] of Object.entries(src)) {\n if (value === null || value === undefined || typeof value === \"object\") continue;\n if (typeof value === \"number\") {\n cur[key] = (cur[key] ?? 0) + value;\n }\n }\n return cur;\n }\n\n private writeTrace(frame: TraceFrame): void {\n const now = new Date();\n const dateStr = [\n now.getFullYear().toString(),\n (now.getMonth() + 1).toString().padStart(2, \"0\"),\n now.getDate().toString().padStart(2, \"0\"),\n ].join(\"\");\n const timeStr = [\n now.getHours().toString().padStart(2, \"0\"),\n now.getMinutes().toString().padStart(2, \"0\"),\n now.getSeconds().toString().padStart(2, \"0\"),\n ].join(\"\");\n\n const fileName = `${this.sanitizeName(frame.name)}.${dateStr}.${timeStr}.tracy`;\n const filePath = path.join(this.outputDir, fileName);\n\n // Serialize dates to ISO strings for the output\n const serializedFrame = this.serializeFrame(frame);\n\n const tracyFile: TracyFile = {\n runtime: \"typescript\",\n version: this.version,\n trace: serializedFrame,\n };\n\n fs.writeFileSync(filePath, JSON.stringify(tracyFile, null, 4), \"utf-8\");\n this.lastTracePath = filePath;\n }\n\n private serializeFrame(frame: TraceFrame): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(frame)) {\n if (key === \"__time\") {\n const t = value as TraceFrame[\"__time\"];\n result.__time = {\n start: this.formatDateTime(t.start),\n end: t.end ? this.formatDateTime(t.end) : undefined,\n duration: t.duration,\n };\n } else if (key === \"__frames\" && Array.isArray(value)) {\n result.__frames = value.map((f: TraceFrame) => this.serializeFrame(f));\n } else {\n result[key] = value;\n }\n }\n\n return result;\n }\n\n /** Format a Date to match the Python PromptyTracer format: `YYYY-MM-DDTHH:MM:SS.ffffff` */\n private formatDateTime(date: Date): string {\n const y = date.getFullYear();\n const mo = (date.getMonth() + 1).toString().padStart(2, \"0\");\n const d = date.getDate().toString().padStart(2, \"0\");\n const h = date.getHours().toString().padStart(2, \"0\");\n const mi = date.getMinutes().toString().padStart(2, \"0\");\n const s = date.getSeconds().toString().padStart(2, \"0\");\n const ms = date.getMilliseconds().toString().padStart(3, \"0\");\n return `${y}-${mo}-${d}T${h}:${mi}:${s}.${ms}000`;\n }\n\n private sanitizeName(name: string): string {\n // Replace anything not alphanumeric, dash, or underscore with underscore\n return name.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n }\n}\n"],"mappings":"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","names":["process","Tracer","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","path","matter","process","rendered","messages","nonces","expanded","toolMessages","result","r","nunjucks","Mustache","import_node_fs","import_node_path","import_node_crypto","text"]}