@prompty/core 2.0.0-alpha.4 → 2.0.0-alpha.6

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tracing/tracer.ts","../src/core/types.ts","../src/core/registry.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-config.ts","../src/model/parser-config.ts","../src/model/template.ts","../src/model/binding.ts","../src/model/mcp-approval-mode.ts","../src/model/tool.ts","../src/model/prompty.ts","../src/core/loader.ts","../src/renderers/common.ts","../src/core/tool-dispatch.ts","../src/core/pipeline.ts","../src/core/index.ts","../src/core/connections.ts","../src/renderers/nunjucks.ts","../src/renderers/mustache.ts","../src/renderers/index.ts","../src/parsers/prompty.ts","../src/tracing/index.ts","../src/tracing/console.ts","../src/tracing/promptyTracer.ts","../src/tracing/otel.ts","../src/model/index.ts","../src/index.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 * 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","// 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', 'foundry', '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 FormatConfig {\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 FormatConfig.\n */\n constructor(init?: Partial<FormatConfig>) {\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 FormatConfig 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 FormatConfig instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): FormatConfig {\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 FormatConfig();\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 FormatConfig;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the FormatConfig 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 FormatConfig) : 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 FormatConfig 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 FormatConfig 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 FormatConfig 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 FormatConfig instance.\n */\n static fromJson(json: string, context?: LoadContext): FormatConfig {\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 FormatConfig.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 FormatConfig.load({ kind: data }, context);\n }\n\n return FormatConfig.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a FormatConfig 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 FormatConfig instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): FormatConfig {\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 FormatConfig.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 FormatConfig.load({ kind: data }, context);\n }\n\n return FormatConfig.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 ParserConfig {\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 ParserConfig.\n */\n constructor(init?: Partial<ParserConfig>) {\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 ParserConfig 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 ParserConfig instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): ParserConfig {\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 ParserConfig();\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 ParserConfig;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the ParserConfig 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 ParserConfig) : 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 ParserConfig 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 ParserConfig 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 ParserConfig 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 ParserConfig instance.\n */\n static fromJson(json: string, context?: LoadContext): ParserConfig {\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 ParserConfig.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 ParserConfig.load({ kind: data }, context);\n }\n\n return ParserConfig.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a ParserConfig 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 ParserConfig instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): ParserConfig {\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 ParserConfig.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 ParserConfig.load({ kind: data }, context);\n }\n\n return ParserConfig.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 { FormatConfig } from \"./format-config\";\nimport { ParserConfig } from \"./parser-config\";\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: FormatConfig;\n\n /**\n * Parser used to process the rendered template into API-compatible format\n */\n parser: ParserConfig;\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 = FormatConfig.load(\n data[\"format\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"parser\"] !== undefined && data[\"parser\"] !== null) {\n instance.parser = ParserConfig.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 case \"prompty\":\n return PromptyTool.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\n/**\n * A tool that references another .prompty file to be invoked as a tool.\n *\n * In `single` mode, the child prompty is executed with a single LLM call.\n * In `agentic` mode, the child prompty runs a full agent loop with its own tools.\n *\n */\nexport class PromptyTool 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 prompty tools\n */\n kind: string = \"prompty\";\n\n /**\n * Path to the child .prompty file, relative to the parent\n */\n path: string = \"\";\n\n /**\n * Execution mode: 'single' for one LLM call, 'agentic' for full agent loop\n */\n mode: string = \"single\";\n\n /**\n * Initializes a new instance of PromptyTool.\n */\n constructor(init?: Partial<PromptyTool>) {\n super(init);\n\n this.kind = init?.kind ?? \"prompty\";\n\n this.path = init?.path ?? \"\";\n\n this.mode = init?.mode ?? \"single\";\n }\n\n //#region Load Methods\n\n /**\n * Load a PromptyTool 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 PromptyTool instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): PromptyTool {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new PromptyTool();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"path\"] !== undefined && data[\"path\"] !== null) {\n instance.path = String(data[\"path\"]);\n }\n\n if (data[\"mode\"] !== undefined && data[\"mode\"] !== null) {\n instance.mode = String(data[\"mode\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as PromptyTool;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the PromptyTool 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 PromptyTool) : 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.path !== undefined && obj.path !== null) {\n result[\"path\"] = obj.path;\n }\n\n if (obj.mode !== undefined && obj.mode !== null) {\n result[\"mode\"] = obj.mode;\n }\n\n return result;\n }\n\n /**\n * Convert the PromptyTool 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 PromptyTool 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 PromptyTool 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 PromptyTool instance.\n */\n static fromJson(json: string, context?: LoadContext): PromptyTool {\n const data = JSON.parse(json);\n\n return PromptyTool.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a PromptyTool 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 PromptyTool instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): PromptyTool {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return PromptyTool.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 * 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, SaveContext } from \"../model/context.js\";\nimport { Prompty } from \"../model/prompty.js\";\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 * Return a `SaveContext` that strips internal `__`-prefixed metadata keys.\n *\n * This is the save-side counterpart to the `LoadContext` used during\n * {@link load}. Pass it to `agent.save()`, `agent.toYaml()`, or\n * `agent.toJson()` to keep serialised output clean.\n */\nexport function defaultSaveContext(\n overrides?: Partial<Pick<SaveContext, \"collectionFormat\" | \"useShorthand\">>,\n): SaveContext {\n return new SaveContext({\n postSave: (data: Record<string, unknown>) => {\n const meta = data[\"metadata\"];\n if (meta && typeof meta === \"object\" && !Array.isArray(meta)) {\n const cleaned: Record<string, unknown> = {};\n let hasKeys = false;\n for (const [k, v] of Object.entries(meta as Record<string, unknown>)) {\n if (!k.startsWith(\"__\")) {\n cleaned[k] = v;\n hasKeys = true;\n }\n }\n if (hasKeys) {\n data[\"metadata\"] = cleaned;\n } else {\n delete data[\"metadata\"];\n }\n }\n return data;\n },\n ...overrides,\n });\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 const agent = Prompty.load(frontmatter, ctx);\n\n // Store source path for PromptyTool resolution (relative path lookups)\n if (!agent.metadata) {\n agent.metadata = {};\n }\n agent.metadata[\"__source_path\"] = filePath;\n\n return agent;\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","/**\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 * Two-layer tool dispatch for the agent loop (spec §11.2).\n *\n * **Layer 1 — Name registry**: per-tool handlers keyed by tool name.\n * Explicit overrides and user-provided function callables live here.\n * API: {@link registerTool}, {@link getTool}, {@link clearTools}.\n *\n * **Layer 2 — Kind handlers**: per-kind handlers keyed by tool kind\n * (`\"function\"`, `\"prompty\"`, `\"mcp\"`, `\"openapi\"`, `\"*\"`).\n * Extensible fallbacks that handle entire categories of tools.\n * API: {@link registerToolHandler}, {@link getToolHandler},\n * {@link clearToolHandlers}.\n *\n * Dispatch order (in {@link dispatchTool}):\n * 1. User-provided `tools` object (per-call override, highest priority)\n * 2. Global name registry ({@link getTool})\n * 3. Kind handler fallback ({@link getToolHandler})\n *\n * Built-in kind handlers are auto-registered at import time.\n *\n * @module\n */\n\nimport { dirname, resolve } from \"node:path\";\nimport type { Prompty } from \"../model/prompty.js\";\n\n// ---------------------------------------------------------------------------\n// ToolHandler interface\n// ---------------------------------------------------------------------------\n\n/**\n * A handler that knows how to execute a specific kind of tool.\n *\n * Implementations are registered with {@link registerToolHandler} and\n * looked up by `tool.kind` at dispatch time.\n */\nexport interface ToolHandler {\n executeTool(\n tool: Record<string, unknown>,\n args: Record<string, unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n ): Promise<string>;\n}\n\n// ---------------------------------------------------------------------------\n// Error class\n// ---------------------------------------------------------------------------\n\n/**\n * Thrown when {@link getToolHandler} cannot find a handler for the\n * requested tool kind.\n */\nexport class ToolHandlerError extends Error {\n constructor(public readonly kind: string) {\n super(\n `No tool handler registered for kind '${kind}'. ` +\n `Register one with registerToolHandler().`,\n );\n this.name = \"ToolHandlerError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Layer 1: Name Registry (spec §11.2 — per-tool handlers by name)\n// ---------------------------------------------------------------------------\n\nconst nameRegistry = new Map<string, (...args: unknown[]) => unknown>();\n\n/**\n * Register a per-name tool handler (spec §11.2 Layer 1).\n * Name-registered tools take priority over kind handlers.\n */\nexport function registerTool(\n name: string,\n handler: (...args: unknown[]) => unknown,\n): void {\n nameRegistry.set(name, handler);\n}\n\n/**\n * Look up a per-name handler; return `undefined` if absent.\n */\nexport function getTool(\n name: string,\n): ((...args: unknown[]) => unknown) | undefined {\n return nameRegistry.get(name);\n}\n\n/**\n * Remove all per-name registrations (for testing).\n */\nexport function clearTools(): void {\n nameRegistry.clear();\n}\n\n// ---------------------------------------------------------------------------\n// Layer 2: Kind Handler Registry (spec §11.2 — per-kind handlers)\n// ---------------------------------------------------------------------------\n\nconst toolHandlers = new Map<string, ToolHandler>();\n\n// ---------------------------------------------------------------------------\n// Registration\n// ---------------------------------------------------------------------------\n\n/**\n * Register a {@link ToolHandler} for a given tool `kind`.\n *\n * @param kind - The tool kind string (e.g., \"prompty\", \"mcp\").\n * @param handler - The handler implementation.\n */\nexport function registerToolHandler(kind: string, handler: ToolHandler): void {\n toolHandlers.set(kind, handler);\n}\n\n/**\n * Look up a registered {@link ToolHandler} by kind.\n *\n * @param kind - The tool kind to look up.\n * @returns The registered handler.\n * @throws {ToolHandlerError} If no handler is registered for the kind.\n */\nexport function getToolHandler(kind: string): ToolHandler {\n const h = toolHandlers.get(kind);\n if (!h) throw new ToolHandlerError(kind);\n return h;\n}\n\n/**\n * Clear all registered tool handlers. Useful in tests.\n */\nexport function clearToolHandlers(): void {\n toolHandlers.clear();\n}\n\n// ---------------------------------------------------------------------------\n// Built-in handlers\n// ---------------------------------------------------------------------------\n\n/**\n * Handles `kind: \"function\"` tools. Function tools need a user-provided\n * callable in userTools or the name registry. If dispatch reaches this\n * handler, it means no callable was found — emit a helpful error.\n */\nclass FunctionToolHandler implements ToolHandler {\n async executeTool(\n tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n const name = (tool.name as string) ?? \"unknown\";\n throw new Error(\n `Function tool '${name}' declared but no callable provided. ` +\n `Pass it via tools: { '${name}': fn } in executeAgent().`,\n );\n }\n}\n\n/**\n * Handles `kind: \"prompty\"` tools by loading a child `.prompty` file\n * relative to the parent agent and executing it.\n *\n * - `mode === \"single\"` (default): `prepare()` → `run()`\n * - `mode === \"agentic\"`: `executeAgent()`\n */\nclass PromptyToolHandler implements ToolHandler {\n async executeTool(\n tool: Record<string, unknown>,\n args: Record<string, unknown>,\n agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n // Dynamic imports to break circular dependency with pipeline.ts\n const { load } = await import(\"./loader.js\");\n const { prepare, run, executeAgent } = await import(\"./pipeline.js\");\n\n const parentPath = (agent.metadata ?? {}).__source_path as string | undefined;\n if (!parentPath) {\n return `Error: cannot resolve PromptyTool '${tool.name}': parent has no __source_path`;\n }\n\n const childPath = resolve(dirname(parentPath), tool.path as string);\n\n // Circular reference detection\n const stack = ((agent.metadata ?? {}).__prompty_tool_stack as string[] | undefined) ?? [];\n const normalizedChild = resolve(childPath);\n const visited = new Set([...stack.map((p) => resolve(p)), resolve(parentPath)]);\n if (visited.has(normalizedChild)) {\n const chain = [...stack, parentPath, childPath].join(\" → \");\n return `Error executing PromptyTool '${tool.name}': circular reference detected: ${chain}`;\n }\n\n try {\n const child = load(childPath);\n // Propagate visited-path stack to the child\n if (!child.metadata) child.metadata = {};\n child.metadata.__prompty_tool_stack = [...stack, parentPath];\n\n const mode = (tool.mode as string) ?? \"single\";\n\n if (mode === \"agentic\") {\n const result = await executeAgent(child, args);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n } else {\n const messages = await prepare(child, args);\n const result = await run(child, messages);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n } catch (err) {\n return `Error executing PromptyTool '${tool.name}': ${err instanceof Error ? err.message : String(err)}`;\n }\n }\n}\n\n/**\n * Placeholder handler for `kind: \"mcp\"` tools.\n * MCP tool dispatch is not yet implemented.\n */\nclass McpToolHandler implements ToolHandler {\n async executeTool(\n _tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n throw new Error(\"MCP tool dispatch is not yet implemented\");\n }\n}\n\n/**\n * Placeholder handler for `kind: \"openapi\"` tools.\n * OpenAPI tool dispatch is not yet implemented.\n */\nclass OpenApiToolHandler implements ToolHandler {\n async executeTool(\n _tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n throw new Error(\"OpenAPI tool dispatch is not yet implemented\");\n }\n}\n\n/**\n * Placeholder handler for `kind: \"*\"` (custom) tools.\n * Custom tool dispatch is not yet implemented.\n */\nclass CustomToolHandler implements ToolHandler {\n async executeTool(\n _tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n throw new Error(\"Custom tool dispatch is not yet implemented\");\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main dispatch function\n// ---------------------------------------------------------------------------\n\n/**\n * Dispatch a tool call to the appropriate handler.\n *\n * Resolution order:\n * 1. User-supplied tool functions (`userTools[toolName]`)\n * 2. Declarative tools on `agent.tools` looked up by name, dispatched\n * to the registered {@link ToolHandler} for the tool's `kind`\n *\n * Errors are caught and returned as strings — this function never throws,\n * so the agent loop can continue processing.\n *\n * @param toolName - The name of the tool to execute.\n * @param args - Parsed arguments for the tool.\n * @param userTools - User-supplied tool function map.\n * @param agent - The parent Prompty agent.\n * @param parentInputs - The original inputs passed to the parent agent.\n * @returns The tool result as a string.\n */\nexport async function dispatchTool(\n toolName: string,\n args: Record<string, unknown>,\n userTools: Record<string, (...args: unknown[]) => unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n): Promise<string> {\n try {\n // 1. Check user-supplied tool functions first (per-call override)\n const userFn = userTools[toolName];\n if (userFn) {\n const result = await userFn(args);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n // 2. Check global name registry (spec §11.2 Layer 1)\n const registeredFn = getTool(toolName);\n if (registeredFn) {\n const result = await registeredFn(args);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n // 3. Look up declarative tool on agent.tools by name → kind handler (Layer 2)\n const tool = agent.tools?.find((t) => t.name === toolName);\n if (!tool) {\n const available = Object.keys(userTools).sort().join(\", \") || \"(none)\";\n return `Error: tool \"${toolName}\" not found in userTools or agent.tools. Available user tools: ${available}`;\n }\n\n const kind = tool.kind || \"*\";\n let handler: ToolHandler;\n try {\n handler = getToolHandler(kind);\n } catch {\n // Fall back to wildcard handler\n try {\n handler = getToolHandler(\"*\");\n } catch {\n return `Error: no handler registered for tool kind '${kind}' (tool '${toolName}')`;\n }\n }\n return await handler.executeTool(\n tool as unknown as Record<string, unknown>,\n args,\n agent,\n parentInputs,\n );\n } catch (err) {\n return `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Auto-register built-in handlers\n// ---------------------------------------------------------------------------\n\nregisterToolHandler(\"function\", new FunctionToolHandler());\nregisterToolHandler(\"prompty\", new PromptyToolHandler());\nregisterToolHandler(\"mcp\", new McpToolHandler());\nregisterToolHandler(\"openapi\", new OpenApiToolHandler());\nregisterToolHandler(\"*\", new CustomToolHandler());\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\";\nimport { dispatchTool } from \"./tool-dispatch.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// Binding resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve tool bindings: inject values from parentInputs into tool arguments.\n *\n * For each binding on the matched tool, looks up `binding.input` in parentInputs\n * and sets `args[binding.name]` to that value. Returns a new args object.\n */\nexport function resolveBindings(\n agent: Prompty,\n toolName: string,\n args: Record<string, unknown>,\n parentInputs?: Record<string, unknown>,\n): Record<string, unknown> {\n if (!parentInputs || !agent.tools || agent.tools.length === 0) return args;\n\n const toolDef = agent.tools.find((t) => t.name === toolName);\n if (!toolDef || !toolDef.bindings || toolDef.bindings.length === 0) return args;\n\n const merged = { ...args };\n for (const binding of toolDef.bindings) {\n if (binding.input in parentInputs) {\n merged[binding.name] = parentInputs[binding.input];\n }\n }\n return merged;\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 parentInputs?: Record<string, unknown>,\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 // Resolve bindings: inject values from parentInputs\n if (parentInputs && typeof parsedArgs === \"object\" && parsedArgs !== null && !Array.isArray(parsedArgs)) {\n parsedArgs = resolveBindings(agent, tc.name, parsedArgs as Record<string, unknown>, parentInputs);\n }\n result = 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 dispatchTool(tc.name, parsedArgs as Record<string, unknown>, tools, agent, parentInputs ?? {});\n toolEmit(\"result\", r);\n return r;\n }) as string;\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 parentInputs = 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, parentInputs, 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, agent, parentInputs, 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 agent?: Prompty,\n parentInputs?: Record<string, 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, agent, parentInputs, 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, agent, parentInputs, parentEmit);\n }\n\n return buildOpenAIToolResultMessages(r, tools, agent, parentInputs, 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 agent?: Prompty,\n parentInputs?: Record<string, 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 // Resolve bindings: inject values from parentInputs\n if (agent && parentInputs && typeof parsedArgs === \"object\" && parsedArgs !== null && !Array.isArray(parsedArgs)) {\n parsedArgs = resolveBindings(agent, toolName, parsedArgs as Record<string, unknown>, parentInputs);\n }\n result = 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 dispatchTool(toolName, parsedArgs as Record<string, unknown>, tools, agent ?? ({} as Prompty), parentInputs ?? {});\n toolEmit(\"result\", r);\n return r;\n }) as string;\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 agent?: Prompty,\n parentInputs?: Record<string, 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 let toolArgs = block.input as Record<string, unknown>;\n\n // Resolve bindings: inject values from parentInputs\n if (agent && parentInputs && typeof toolArgs === \"object\" && toolArgs !== null && !Array.isArray(toolArgs)) {\n toolArgs = resolveBindings(agent, toolName, toolArgs, parentInputs);\n }\n\n let result: string;\n try {\n result = 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 dispatchTool(toolName, toolArgs, tools, agent ?? ({} as Prompty), parentInputs ?? {});\n toolEmit(\"result\", r);\n return r;\n }) as string;\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 agent?: Prompty,\n parentInputs?: Record<string, 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 // Resolve bindings: inject values from parentInputs\n if (agent && parentInputs && typeof parsedArgs === \"object\" && parsedArgs !== null && !Array.isArray(parsedArgs)) {\n parsedArgs = resolveBindings(agent, toolName, parsedArgs as Record<string, unknown>, parentInputs);\n }\n result = 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 dispatchTool(toolName, parsedArgs as Record<string, unknown>, tools, agent ?? ({} as Prompty), parentInputs ?? {});\n toolEmit(\"result\", r);\n return r;\n }) as string;\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","export * from \"./types.js\";\nexport * from \"./interfaces.js\";\nexport * from \"./registry.js\";\nexport * from \"./connections.js\";\nexport { load, defaultSaveContext } from \"./loader.js\";\nexport {\n validateInputs,\n render,\n parse,\n process,\n prepare,\n run,\n execute,\n executeAgent,\n resolveBindings,\n runAgent,\n} from \"./pipeline.js\";\nexport {\n type ToolHandler,\n ToolHandlerError,\n registerTool,\n getTool,\n clearTools,\n registerToolHandler,\n getToolHandler,\n clearToolHandlers,\n dispatchTool,\n} from \"./tool-dispatch.js\";\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 * 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","export { NunjucksRenderer } from \"./nunjucks.js\";\nexport { MustacheRenderer } from \"./mustache.js\";\nexport { prepareRenderInputs, getLastNonces, clearLastNonces } from \"./common.js\";\n","/**\n * Prompty chat parser — splits rendered text into abstract messages.\n *\n * Recognizes role markers (`system:`, `user:`, `assistant:`, `developer:`).\n * Supports nonce-based sanitization when `FormatConfig.strict` is enabled.\n *\n * Images should be passed via `kind: image` input properties rather than\n * inline markdown syntax. Inline `![alt](url)` is preserved as literal text.\n *\n * @module\n */\n\nimport { resolve } from \"node:path\";\nimport { randomBytes } from \"node:crypto\";\nimport type { Prompty } from \"../model/prompty.js\";\nimport {\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// 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 const parts: TextPart[] = [{ kind: \"text\", value: content }];\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}\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\";\nexport { otelTracer } from \"./otel.js\";\nexport type { OtelTracerOptions, OtelApi } from \"./otel.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","/**\n * OpenTelemetry trace backend for Prompty.\n *\n * Plugs into the Tracer registry and emits OTel spans with structured\n * attributes. Requires `@opentelemetry/api` — install as a peer dependency.\n *\n * Usage:\n * ```typescript\n * import { Tracer } from \"@prompty/core\";\n * import { otelTracer } from \"@prompty/core/tracing/otel\";\n * import * as otelApi from \"@opentelemetry/api\";\n *\n * Tracer.add(\"otel\", otelTracer(otelApi));\n * // or with custom tracer name:\n * Tracer.add(\"otel\", otelTracer(otelApi, { tracerName: \"my.service\" }));\n * ```\n *\n * @module\n */\n\nimport type { TracerFactory, TracerBackend } from \"./tracer.js\";\nimport { toSerializable } from \"./tracer.js\";\n\n/** The subset of `@opentelemetry/api` needed by this module. */\nexport interface OtelApi {\n trace: {\n getTracer(name: string): {\n startSpan(name: string): OtelSpan;\n };\n setSpan(context: unknown, span: OtelSpan): unknown;\n };\n context: {\n active(): unknown;\n with<T>(context: unknown, fn: () => T): T;\n };\n SpanStatusCode: {\n OK: number;\n ERROR: number;\n };\n}\n\ninterface OtelSpan {\n setAttribute(key: string, value: string | number | boolean): void;\n setStatus(status: { code: number; message?: string }): void;\n recordException(exception: Error): void;\n end(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Configuration\n// ---------------------------------------------------------------------------\n\n/** Options for {@link otelTracer}. */\nexport interface OtelTracerOptions {\n /** OTel tracer name. Defaults to `\"prompty\"`. */\n tracerName?: string;\n}\n\nconst DEFAULT_TRACER_NAME = \"prompty\";\n\n// ---------------------------------------------------------------------------\n// Attribute helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively flatten a nested object into dotted-key span attributes.\n *\n * ```\n * { model: { id: \"gpt-4\" } } → span.setAttribute(\"model.id\", \"gpt-4\")\n * ```\n */\nfunction setAttributes(\n span: { setAttribute(key: string, value: string | number | boolean): void },\n prefix: string,\n value: unknown,\n): void {\n if (value === null || value === undefined) return;\n\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n span.setAttribute(prefix, value);\n return;\n }\n\n if (Array.isArray(value)) {\n try {\n span.setAttribute(prefix, JSON.stringify(value));\n } catch {\n span.setAttribute(prefix, String(value));\n }\n return;\n }\n\n if (typeof value === \"object\") {\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n setAttributes(span, `${prefix}.${k}`, v);\n }\n return;\n }\n\n span.setAttribute(prefix, String(value));\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Create an OTel trace backend compatible with `Tracer.add()`.\n *\n * Each call to the returned factory starts a new OTel span named after the\n * Prompty pipeline step. The backend receives `(key, value)` events and\n * sets them as span attributes. On `__end__`, the span is ended.\n *\n * Special handling:\n * - `error` key sets `StatusCode.ERROR` and records the exception.\n * - `__end__` key ends the span.\n * - All other values are serialized and expanded into dotted attributes.\n *\n * @param api - The `@opentelemetry/api` module. Pass `require(\"@opentelemetry/api\")`\n * or the result of `await import(\"@opentelemetry/api\")`.\n * @param options - Optional configuration.\n * @returns A `TracerFactory` suitable for `Tracer.add()`.\n */\nexport function otelTracer(api: OtelApi, options?: OtelTracerOptions): TracerFactory {\n const tracerName = options?.tracerName ?? DEFAULT_TRACER_NAME;\n const tracer = api.trace.getTracer(tracerName);\n\n return function otelFactory(signature: string): TracerBackend | null {\n const span = tracer.startSpan(signature);\n const ctx = api.trace.setSpan(api.context.active(), span);\n\n // Make this span the active context so nested spans are parented.\n api.context.with(ctx, () => {});\n\n const backend: TracerBackend = (key: string, value: unknown) => {\n if (key === \"__end__\") {\n span.end();\n return;\n }\n\n if (key === \"error\") {\n span.setStatus({ code: api.SpanStatusCode.ERROR, message: String(value) });\n if (value instanceof Error) {\n span.recordException(value);\n if (value.stack) {\n span.setAttribute(\"exception.stacktrace\", value.stack);\n }\n } else {\n span.setAttribute(\"exception.message\", String(value));\n }\n return;\n }\n\n // Serialize and flatten into span attributes\n try {\n const serialized = toSerializable(value);\n setAttributes(span, key, serialized);\n } catch {\n // Tracer errors should never crash the pipeline\n }\n };\n\n return backend;\n };\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nexport { LoadContext, SaveContext } from \"./context\";\n\nexport { Property, ArrayProperty, ObjectProperty } from \"./property\";\n\nexport {\n Connection,\n ReferenceConnection,\n RemoteConnection,\n ApiKeyConnection,\n AnonymousConnection,\n FoundryConnection,\n OAuthConnection,\n} from \"./connection\";\n\nexport { ModelOptions } from \"./model-options\";\n\nexport { Model } from \"./model\";\n\nexport { Binding } from \"./binding\";\n\nexport {\n Tool,\n FunctionTool,\n CustomTool,\n McpTool,\n OpenApiTool,\n PromptyTool,\n} from \"./tool\";\n\nexport { McpApprovalMode } from \"./mcp-approval-mode\";\n\nexport { FormatConfig } from \"./format-config\";\n\nexport { ParserConfig } from \"./parser-config\";\n\nexport { Template } from \"./template\";\n\nexport { Prompty } from \"./prompty\";\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 resolveBindings,\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 otelTracer,\n type TracerBackend,\n type TracerFactory,\n type SpanEmitter,\n type OtelTracerOptions,\n type OtelApi,\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 FormatConfig,\n ParserConfig,\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 PromptyTool,\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"],"mappings":"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","names":["Tracer","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","path","dirname","resolve","load","prepare","run","executeAgent","process","rendered","messages","nonces","expanded","toolMessages","result","r","resolve","text"]}
1
+ {"version":3,"sources":["../src/tracing/tracer.ts","../src/core/types.ts","../src/core/registry.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-config.ts","../src/model/parser-config.ts","../src/model/template.ts","../src/model/binding.ts","../src/model/mcp-approval-mode.ts","../src/model/tool.ts","../src/model/prompty.ts","../src/core/loader.ts","../src/renderers/common.ts","../src/core/tool-dispatch.ts","../src/core/agent-events.ts","../src/core/cancellation.ts","../src/core/context.ts","../src/core/guardrails.ts","../src/core/structured.ts","../src/core/pipeline.ts","../src/core/index.ts","../src/core/connections.ts","../src/core/steering.ts","../src/core/tool-decorator.ts","../src/renderers/nunjucks.ts","../src/renderers/mustache.ts","../src/renderers/index.ts","../src/parsers/prompty.ts","../src/tracing/index.ts","../src/tracing/console.ts","../src/tracing/promptyTracer.ts","../src/tracing/otel.ts","../src/model/index.ts","../src/index.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 * 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","// 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', 'foundry', '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 FormatConfig {\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 FormatConfig.\n */\n constructor(init?: Partial<FormatConfig>) {\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 FormatConfig 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 FormatConfig instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): FormatConfig {\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 FormatConfig();\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 FormatConfig;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the FormatConfig 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 FormatConfig) : 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 FormatConfig 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 FormatConfig 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 FormatConfig 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 FormatConfig instance.\n */\n static fromJson(json: string, context?: LoadContext): FormatConfig {\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 FormatConfig.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 FormatConfig.load({ kind: data }, context);\n }\n\n return FormatConfig.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a FormatConfig 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 FormatConfig instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): FormatConfig {\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 FormatConfig.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 FormatConfig.load({ kind: data }, context);\n }\n\n return FormatConfig.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 ParserConfig {\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 ParserConfig.\n */\n constructor(init?: Partial<ParserConfig>) {\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 ParserConfig 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 ParserConfig instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): ParserConfig {\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 ParserConfig();\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 ParserConfig;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the ParserConfig 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 ParserConfig) : 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 ParserConfig 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 ParserConfig 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 ParserConfig 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 ParserConfig instance.\n */\n static fromJson(json: string, context?: LoadContext): ParserConfig {\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 ParserConfig.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 ParserConfig.load({ kind: data }, context);\n }\n\n return ParserConfig.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a ParserConfig 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 ParserConfig instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): ParserConfig {\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 ParserConfig.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 ParserConfig.load({ kind: data }, context);\n }\n\n return ParserConfig.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 { FormatConfig } from \"./format-config\";\nimport { ParserConfig } from \"./parser-config\";\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: FormatConfig;\n\n /**\n * Parser used to process the rendered template into API-compatible format\n */\n parser: ParserConfig;\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 = FormatConfig.load(\n data[\"format\"] as Record<string, unknown>,\n context,\n );\n }\n\n if (data[\"parser\"] !== undefined && data[\"parser\"] !== null) {\n instance.parser = ParserConfig.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 case \"prompty\":\n return PromptyTool.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\n/**\n * A tool that references another .prompty file to be invoked as a tool.\n *\n * In `single` mode, the child prompty is executed with a single LLM call.\n * In `agentic` mode, the child prompty runs a full agent loop with its own tools.\n *\n */\nexport class PromptyTool 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 prompty tools\n */\n kind: string = \"prompty\";\n\n /**\n * Path to the child .prompty file, relative to the parent\n */\n path: string = \"\";\n\n /**\n * Execution mode: 'single' for one LLM call, 'agentic' for full agent loop\n */\n mode: string = \"single\";\n\n /**\n * Initializes a new instance of PromptyTool.\n */\n constructor(init?: Partial<PromptyTool>) {\n super(init);\n\n this.kind = init?.kind ?? \"prompty\";\n\n this.path = init?.path ?? \"\";\n\n this.mode = init?.mode ?? \"single\";\n }\n\n //#region Load Methods\n\n /**\n * Load a PromptyTool 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 PromptyTool instance.\n */\n static load(\n data: Record<string, unknown>,\n context?: LoadContext,\n ): PromptyTool {\n if (context) {\n data = context.processInput(data);\n }\n\n // Create new instance\n const instance = new PromptyTool();\n\n if (data[\"kind\"] !== undefined && data[\"kind\"] !== null) {\n instance.kind = String(data[\"kind\"]);\n }\n\n if (data[\"path\"] !== undefined && data[\"path\"] !== null) {\n instance.path = String(data[\"path\"]);\n }\n\n if (data[\"mode\"] !== undefined && data[\"mode\"] !== null) {\n instance.mode = String(data[\"mode\"]);\n }\n\n if (context) {\n return context.processOutput(instance) as PromptyTool;\n }\n return instance;\n }\n\n //#endregion\n\n //#region Save Methods\n\n /**\n * Save the PromptyTool 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 PromptyTool) : 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.path !== undefined && obj.path !== null) {\n result[\"path\"] = obj.path;\n }\n\n if (obj.mode !== undefined && obj.mode !== null) {\n result[\"mode\"] = obj.mode;\n }\n\n return result;\n }\n\n /**\n * Convert the PromptyTool 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 PromptyTool 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 PromptyTool 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 PromptyTool instance.\n */\n static fromJson(json: string, context?: LoadContext): PromptyTool {\n const data = JSON.parse(json);\n\n return PromptyTool.load(data as Record<string, unknown>, context);\n }\n\n /**\n * Load a PromptyTool 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 PromptyTool instance.\n */\n static fromYaml(yaml: string, context?: LoadContext): PromptyTool {\n const { parse } = require(\"yaml\");\n const data = parse(yaml);\n\n return PromptyTool.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 * 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, SaveContext } from \"../model/context.js\";\nimport { Prompty } from \"../model/prompty.js\";\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 * Return a `SaveContext` that strips internal `__`-prefixed metadata keys.\n *\n * This is the save-side counterpart to the `LoadContext` used during\n * {@link load}. Pass it to `agent.save()`, `agent.toYaml()`, or\n * `agent.toJson()` to keep serialised output clean.\n */\nexport function defaultSaveContext(\n overrides?: Partial<Pick<SaveContext, \"collectionFormat\" | \"useShorthand\">>,\n): SaveContext {\n return new SaveContext({\n postSave: (data: Record<string, unknown>) => {\n const meta = data[\"metadata\"];\n if (meta && typeof meta === \"object\" && !Array.isArray(meta)) {\n const cleaned: Record<string, unknown> = {};\n let hasKeys = false;\n for (const [k, v] of Object.entries(meta as Record<string, unknown>)) {\n if (!k.startsWith(\"__\")) {\n cleaned[k] = v;\n hasKeys = true;\n }\n }\n if (hasKeys) {\n data[\"metadata\"] = cleaned;\n } else {\n delete data[\"metadata\"];\n }\n }\n return data;\n },\n ...overrides,\n });\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 const agent = Prompty.load(frontmatter, ctx);\n\n // Store source path for PromptyTool resolution (relative path lookups)\n if (!agent.metadata) {\n agent.metadata = {};\n }\n agent.metadata[\"__source_path\"] = filePath;\n\n return agent;\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","/**\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 * Two-layer tool dispatch for the agent loop (spec §11.2).\n *\n * **Layer 1 — Name registry**: per-tool handlers keyed by tool name.\n * Explicit overrides and user-provided function callables live here.\n * API: {@link registerTool}, {@link getTool}, {@link clearTools}.\n *\n * **Layer 2 — Kind handlers**: per-kind handlers keyed by tool kind\n * (`\"function\"`, `\"prompty\"`, `\"mcp\"`, `\"openapi\"`, `\"*\"`).\n * Extensible fallbacks that handle entire categories of tools.\n * API: {@link registerToolHandler}, {@link getToolHandler},\n * {@link clearToolHandlers}.\n *\n * Dispatch order (in {@link dispatchTool}):\n * 1. User-provided `tools` object (per-call override, highest priority)\n * 2. Global name registry ({@link getTool})\n * 3. Kind handler fallback ({@link getToolHandler})\n *\n * Built-in kind handlers are auto-registered at import time.\n *\n * @module\n */\n\nimport { dirname, resolve } from \"node:path\";\nimport type { Prompty } from \"../model/prompty.js\";\n\n// ---------------------------------------------------------------------------\n// ToolHandler interface\n// ---------------------------------------------------------------------------\n\n/**\n * A handler that knows how to execute a specific kind of tool.\n *\n * Implementations are registered with {@link registerToolHandler} and\n * looked up by `tool.kind` at dispatch time.\n */\nexport interface ToolHandler {\n executeTool(\n tool: Record<string, unknown>,\n args: Record<string, unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n ): Promise<string>;\n}\n\n// ---------------------------------------------------------------------------\n// Error class\n// ---------------------------------------------------------------------------\n\n/**\n * Thrown when {@link getToolHandler} cannot find a handler for the\n * requested tool kind.\n */\nexport class ToolHandlerError extends Error {\n constructor(public readonly kind: string) {\n super(\n `No tool handler registered for kind '${kind}'. ` +\n `Register one with registerToolHandler().`,\n );\n this.name = \"ToolHandlerError\";\n }\n}\n\n// ---------------------------------------------------------------------------\n// Layer 1: Name Registry (spec §11.2 — per-tool handlers by name)\n// ---------------------------------------------------------------------------\n\nconst nameRegistry = new Map<string, (...args: unknown[]) => unknown>();\n\n/**\n * Register a per-name tool handler (spec §11.2 Layer 1).\n * Name-registered tools take priority over kind handlers.\n */\nexport function registerTool(\n name: string,\n handler: (...args: unknown[]) => unknown,\n): void {\n nameRegistry.set(name, handler);\n}\n\n/**\n * Look up a per-name handler; return `undefined` if absent.\n */\nexport function getTool(\n name: string,\n): ((...args: unknown[]) => unknown) | undefined {\n return nameRegistry.get(name);\n}\n\n/**\n * Remove all per-name registrations (for testing).\n */\nexport function clearTools(): void {\n nameRegistry.clear();\n}\n\n// ---------------------------------------------------------------------------\n// Layer 2: Kind Handler Registry (spec §11.2 — per-kind handlers)\n// ---------------------------------------------------------------------------\n\nconst toolHandlers = new Map<string, ToolHandler>();\n\n// ---------------------------------------------------------------------------\n// Registration\n// ---------------------------------------------------------------------------\n\n/**\n * Register a {@link ToolHandler} for a given tool `kind`.\n *\n * @param kind - The tool kind string (e.g., \"prompty\", \"mcp\").\n * @param handler - The handler implementation.\n */\nexport function registerToolHandler(kind: string, handler: ToolHandler): void {\n toolHandlers.set(kind, handler);\n}\n\n/**\n * Look up a registered {@link ToolHandler} by kind.\n *\n * @param kind - The tool kind to look up.\n * @returns The registered handler.\n * @throws {ToolHandlerError} If no handler is registered for the kind.\n */\nexport function getToolHandler(kind: string): ToolHandler {\n const h = toolHandlers.get(kind);\n if (!h) throw new ToolHandlerError(kind);\n return h;\n}\n\n/**\n * Clear all registered tool handlers. Useful in tests.\n */\nexport function clearToolHandlers(): void {\n toolHandlers.clear();\n}\n\n// ---------------------------------------------------------------------------\n// Built-in handlers\n// ---------------------------------------------------------------------------\n\n/**\n * Handles `kind: \"function\"` tools. Function tools need a user-provided\n * callable in userTools or the name registry. If dispatch reaches this\n * handler, it means no callable was found — emit a helpful error.\n */\nclass FunctionToolHandler implements ToolHandler {\n async executeTool(\n tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n const name = (tool.name as string) ?? \"unknown\";\n throw new Error(\n `Function tool '${name}' declared but no callable provided. ` +\n `Pass it via tools: { '${name}': fn } in invokeAgent().`,\n );\n }\n}\n\n/**\n * Handles `kind: \"prompty\"` tools by loading a child `.prompty` file\n * relative to the parent agent and executing it.\n *\n * - `mode === \"single\"` (default): `prepare()` → `run()`\n * - `mode === \"agentic\"`: `invokeAgent()`\n */\nclass PromptyToolHandler implements ToolHandler {\n async executeTool(\n tool: Record<string, unknown>,\n args: Record<string, unknown>,\n agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n // Dynamic imports to break circular dependency with pipeline.ts\n const { load } = await import(\"./loader.js\");\n const { prepare, run, invokeAgent } = await import(\"./pipeline.js\");\n\n const parentPath = (agent.metadata ?? {}).__source_path as string | undefined;\n if (!parentPath) {\n return `Error: cannot resolve PromptyTool '${tool.name}': parent has no __source_path`;\n }\n\n const childPath = resolve(dirname(parentPath), tool.path as string);\n\n // Circular reference detection\n const stack = ((agent.metadata ?? {}).__prompty_tool_stack as string[] | undefined) ?? [];\n const normalizedChild = resolve(childPath);\n const visited = new Set([...stack.map((p) => resolve(p)), resolve(parentPath)]);\n if (visited.has(normalizedChild)) {\n const chain = [...stack, parentPath, childPath].join(\" → \");\n return `Error executing PromptyTool '${tool.name}': circular reference detected: ${chain}`;\n }\n\n try {\n const child = load(childPath);\n // Propagate visited-path stack to the child\n if (!child.metadata) child.metadata = {};\n child.metadata.__prompty_tool_stack = [...stack, parentPath];\n\n const mode = (tool.mode as string) ?? \"single\";\n\n if (mode === \"agentic\") {\n const result = await invokeAgent(child, args);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n } else {\n const messages = await prepare(child, args);\n const result = await run(child, messages);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n } catch (err) {\n return `Error executing PromptyTool '${tool.name}': ${err instanceof Error ? err.message : String(err)}`;\n }\n }\n}\n\n/**\n * Placeholder handler for `kind: \"mcp\"` tools.\n * MCP tool dispatch is not yet implemented.\n */\nclass McpToolHandler implements ToolHandler {\n async executeTool(\n _tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n throw new Error(\"MCP tool dispatch is not yet implemented\");\n }\n}\n\n/**\n * Placeholder handler for `kind: \"openapi\"` tools.\n * OpenAPI tool dispatch is not yet implemented.\n */\nclass OpenApiToolHandler implements ToolHandler {\n async executeTool(\n _tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n throw new Error(\"OpenAPI tool dispatch is not yet implemented\");\n }\n}\n\n/**\n * Placeholder handler for `kind: \"*\"` (custom) tools.\n * Custom tool dispatch is not yet implemented.\n */\nclass CustomToolHandler implements ToolHandler {\n async executeTool(\n _tool: Record<string, unknown>,\n _args: Record<string, unknown>,\n _agent: Prompty,\n _parentInputs: Record<string, unknown>,\n ): Promise<string> {\n throw new Error(\"Custom tool dispatch is not yet implemented\");\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main dispatch function\n// ---------------------------------------------------------------------------\n\n/**\n * Dispatch a tool call to the appropriate handler.\n *\n * Resolution order:\n * 1. User-supplied tool functions (`userTools[toolName]`)\n * 2. Declarative tools on `agent.tools` looked up by name, dispatched\n * to the registered {@link ToolHandler} for the tool's `kind`\n *\n * Errors are caught and returned as strings — this function never throws,\n * so the agent loop can continue processing.\n *\n * @param toolName - The name of the tool to execute.\n * @param args - Parsed arguments for the tool.\n * @param userTools - User-supplied tool function map.\n * @param agent - The parent Prompty agent.\n * @param parentInputs - The original inputs passed to the parent agent.\n * @returns The tool result as a string.\n */\nexport async function dispatchTool(\n toolName: string,\n args: Record<string, unknown>,\n userTools: Record<string, (...args: unknown[]) => unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n): Promise<string> {\n try {\n // 1. Check user-supplied tool functions first (per-call override)\n const userFn = userTools[toolName];\n if (userFn) {\n const result = await userFn(args);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n // 2. Check global name registry (spec §11.2 Layer 1)\n const registeredFn = getTool(toolName);\n if (registeredFn) {\n const result = await registeredFn(args);\n return typeof result === \"string\" ? result : JSON.stringify(result);\n }\n\n // 3. Look up declarative tool on agent.tools by name → kind handler (Layer 2)\n const tool = agent.tools?.find((t) => t.name === toolName);\n if (!tool) {\n const available = Object.keys(userTools).sort().join(\", \") || \"(none)\";\n return `Error: tool \"${toolName}\" not found in userTools or agent.tools. Available user tools: ${available}`;\n }\n\n const kind = tool.kind || \"*\";\n let handler: ToolHandler;\n try {\n handler = getToolHandler(kind);\n } catch {\n // Fall back to wildcard handler\n try {\n handler = getToolHandler(\"*\");\n } catch {\n return `Error: no handler registered for tool kind '${kind}' (tool '${toolName}')`;\n }\n }\n return await handler.executeTool(\n tool as unknown as Record<string, unknown>,\n args,\n agent,\n parentInputs,\n );\n } catch (err) {\n return `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Auto-register built-in handlers\n// ---------------------------------------------------------------------------\n\nregisterToolHandler(\"function\", new FunctionToolHandler());\nregisterToolHandler(\"prompty\", new PromptyToolHandler());\nregisterToolHandler(\"mcp\", new McpToolHandler());\nregisterToolHandler(\"openapi\", new OpenApiToolHandler());\nregisterToolHandler(\"*\", new CustomToolHandler());\n","/**\n * §13.1 Agent Loop Events — structured event callbacks.\n * @module\n */\n\n/** Event types emitted during the agent loop. */\nexport type AgentEventType =\n | \"token\"\n | \"thinking\"\n | \"tool_call_start\"\n | \"tool_result\"\n | \"status\"\n | \"messages_updated\"\n | \"done\"\n | \"error\"\n | \"cancelled\";\n\n/** Callback signature for agent loop events. */\nexport type EventCallback = (eventType: AgentEventType, data: Record<string, unknown>) => void;\n\n/**\n * Safely emit an event. Swallows errors from callback (spec §13.1:\n * event callbacks MUST NOT block the loop).\n */\nexport function emitEvent(\n callback: EventCallback | undefined,\n eventType: AgentEventType,\n data: Record<string, unknown>,\n): void {\n if (!callback) return;\n try {\n callback(eventType, data);\n } catch (err) {\n // Swallow — event callbacks must not break the loop (§13.1)\n if (typeof globalThis.console?.debug === \"function\") {\n globalThis.console.debug(`Event callback error for ${eventType}:`, err);\n }\n }\n}\n","/**\n * §13.2 Cancellation — cooperative cancellation via AbortSignal.\n * @module\n */\n\n/**\n * Error thrown when the agent loop is cancelled.\n */\nexport class CancelledError extends Error {\n constructor(message = \"Agent loop cancelled\") {\n super(message);\n this.name = \"CancelledError\";\n }\n}\n\n/**\n * Check if the signal is aborted, and throw CancelledError if so.\n */\nexport function checkCancellation(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw new CancelledError();\n }\n}\n","/**\n * §13.3 Context Window Management — trimming and summarization.\n * @module\n */\n\nimport { Message } from \"./types.js\";\n\n/**\n * Estimate the character cost of a message list.\n * Per spec §13.3: role + 4 overhead per message, text parts by length,\n * non-text parts at 200-char estimate.\n */\nexport function estimateChars(messages: Message[]): number {\n let total = 0;\n for (const msg of messages) {\n total += msg.role.length + 4;\n for (const part of msg.parts) {\n if (part.kind === \"text\") {\n total += (part as { value: string }).value.length;\n } else {\n total += 200;\n }\n }\n const toolCalls = msg.metadata?.tool_calls;\n if (toolCalls) {\n total += JSON.stringify(toolCalls).length;\n }\n }\n return total;\n}\n\nfunction truncate(text: string, maxLen = 200): string {\n return text.length <= maxLen ? text : text.slice(0, maxLen) + \"…\";\n}\n\n/**\n * Build a compact string summary from dropped messages.\n */\nexport function summarizeDropped(messages: Message[]): string {\n const lines: string[] = [];\n for (const msg of messages) {\n const msgText = msg.text.trim();\n if (msg.role === \"user\" && msgText) {\n lines.push(`User asked: ${truncate(msgText)}`);\n } else if (msg.role === \"assistant\") {\n if (msgText) lines.push(`Assistant: ${truncate(msgText)}`);\n const toolCalls = msg.metadata?.tool_calls;\n if (Array.isArray(toolCalls)) {\n const names = toolCalls.map(\n (tc: Record<string, unknown>) =>\n (tc.name as string) ?? ((tc.function as Record<string, string>)?.name ?? \"?\"),\n );\n lines.push(` Called tools: ${names.join(\", \")}`);\n }\n }\n }\n if (lines.length === 0) return \"\";\n\n let result = \"[Context summary: \";\n for (const line of lines) {\n if (result.length + line.length > 4000) {\n result += \"\\n... (older messages omitted)\";\n break;\n }\n result += line + \"\\n\";\n }\n return result.trimEnd() + \"]\";\n}\n\n/**\n * Trim messages in-place to fit within a character budget.\n * Returns [droppedCount, droppedMessages].\n */\nexport function trimToContextWindow(\n messages: Message[],\n budgetChars: number,\n): [number, Message[]] {\n if (estimateChars(messages) <= budgetChars) {\n return [0, []];\n }\n\n // Partition: leading system messages vs rest\n let systemEnd = 0;\n for (let i = 0; i < messages.length; i++) {\n if (messages[i].role !== \"system\") {\n systemEnd = i;\n break;\n }\n if (i === messages.length - 1) systemEnd = messages.length;\n }\n\n const systemMsgs = messages.slice(0, systemEnd);\n const rest = messages.slice(systemEnd);\n const summaryBudget = Math.min(5000, Math.floor(budgetChars * 0.05));\n const dropped: Message[] = [];\n\n while (estimateChars([...systemMsgs, ...rest]) > budgetChars - summaryBudget && rest.length > 2) {\n dropped.push(rest.shift()!);\n }\n\n const droppedCount = dropped.length;\n\n // Rebuild messages array in-place\n messages.length = 0;\n messages.push(...systemMsgs);\n\n if (droppedCount > 0) {\n const summaryText = summarizeDropped(dropped);\n if (summaryText) {\n messages.push(new Message(\"user\", [{ kind: \"text\", value: summaryText }]));\n }\n }\n\n messages.push(...rest);\n return [droppedCount, dropped];\n}\n","/**\n * §13.4 Guardrails — optional validation hooks for the agent loop.\n * @module\n */\n\nimport { Message } from \"./types.js\";\n\n/** Result of a guardrail check. */\nexport interface GuardrailResult {\n allowed: boolean;\n reason?: string;\n rewrite?: any;\n}\n\n/** Error thrown when a guardrail denies the operation. */\nexport class GuardrailError extends Error {\n reason: string;\n constructor(reason: string) {\n super(`Guardrail denied: ${reason}`);\n this.name = \"GuardrailError\";\n this.reason = reason;\n }\n}\n\n/** Input guardrail hook signature. */\nexport type InputGuardrail = (messages: Message[]) => GuardrailResult;\n/** Output guardrail hook signature. */\nexport type OutputGuardrail = (message: Message) => GuardrailResult;\n/** Tool guardrail hook signature. */\nexport type ToolGuardrail = (name: string, args: Record<string, unknown>) => GuardrailResult;\n\n/** Configuration for guardrail hooks. */\nexport interface GuardrailsOptions {\n input?: InputGuardrail;\n output?: OutputGuardrail;\n tool?: ToolGuardrail;\n}\n\n/**\n * Guardrails with input, output, and tool hooks.\n * All hooks are optional — when not set, execution proceeds normally.\n */\nexport class Guardrails {\n private inputHook?: InputGuardrail;\n private outputHook?: OutputGuardrail;\n private toolHook?: ToolGuardrail;\n\n constructor(options?: GuardrailsOptions) {\n this.inputHook = options?.input;\n this.outputHook = options?.output;\n this.toolHook = options?.tool;\n }\n\n checkInput(messages: Message[]): GuardrailResult {\n if (!this.inputHook) return { allowed: true };\n return this.inputHook(messages);\n }\n\n checkOutput(message: Message): GuardrailResult {\n if (!this.outputHook) return { allowed: true };\n return this.outputHook(message);\n }\n\n checkTool(name: string, args: Record<string, unknown>): GuardrailResult {\n if (!this.toolHook) return { allowed: true };\n return this.toolHook(name, args);\n }\n}\n","/**\n * Structured result casting for typed LLM output.\n *\n * When a processor parses structured JSON from an LLM response, it wraps\n * the result in a `StructuredResult` that carries both the parsed data\n * (accessible as normal properties) and the raw JSON string (hidden behind\n * a Symbol). The `cast()` function lets callers deserialize directly from\n * the raw JSON, optionally running a validator (e.g., Zod `.parse`).\n *\n * @module\n */\n\n// ---------------------------------------------------------------------------\n// Symbol & interface\n// ---------------------------------------------------------------------------\n\n/**\n * Symbol used to store the raw JSON string on a StructuredResult.\n * Using a Symbol keeps the raw JSON invisible to normal property iteration.\n */\nexport const StructuredResultSymbol: unique symbol = Symbol(\"prompty.rawJson\");\n\n/**\n * A plain object carrying structured output from an LLM.\n * Behaves like a normal Record<string, unknown> but also stores the raw JSON\n * string so that cast() can deserialize directly to typed objects.\n */\nexport interface StructuredResult extends Record<string, unknown> {\n readonly [StructuredResultSymbol]: string;\n}\n\n// ---------------------------------------------------------------------------\n// Factory & type guard\n// ---------------------------------------------------------------------------\n\n/**\n * Create a StructuredResult wrapping parsed data + raw JSON.\n */\nexport function createStructuredResult(\n data: Record<string, unknown>,\n rawJson: string,\n): StructuredResult {\n const result = { ...data } as StructuredResult;\n Object.defineProperty(result, StructuredResultSymbol, {\n value: rawJson,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n return result;\n}\n\n/**\n * Type guard: is this value a StructuredResult?\n */\nexport function isStructuredResult(value: unknown): value is StructuredResult {\n return (\n typeof value === \"object\" &&\n value !== null &&\n StructuredResultSymbol in value\n );\n}\n\n// ---------------------------------------------------------------------------\n// cast()\n// ---------------------------------------------------------------------------\n\n/**\n * Cast a result to a typed object. When the result is a StructuredResult,\n * deserializes directly from the raw JSON (no intermediate round-trip).\n *\n * @param result - The result to cast (StructuredResult, string, or object)\n * @param validator - Optional runtime validator (e.g., Zod .parse)\n * @returns The typed result\n */\nexport function cast<T = Record<string, unknown>>(\n result: unknown,\n validator?: (data: unknown) => T,\n): T {\n let jsonStr: string;\n\n if (isStructuredResult(result)) {\n jsonStr = result[StructuredResultSymbol];\n } else if (typeof result === \"string\") {\n jsonStr = result;\n } else {\n jsonStr = JSON.stringify(result);\n }\n\n const parsed: unknown = JSON.parse(jsonStr);\n if (validator) {\n return validator(parsed);\n }\n return parsed as T;\n}\n","/**\n * Four-step execution pipeline.\n *\n * ```\n * invoke(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 {\n type ToolCall,\n Message,\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\";\nimport { dispatchTool } from \"./tool-dispatch.js\";\nimport { type EventCallback, emitEvent } from \"./agent-events.js\";\nimport { CancelledError, checkCancellation } from \"./cancellation.js\";\nimport { trimToContextWindow } from \"./context.js\";\nimport { GuardrailError, Guardrails } from \"./guardrails.js\";\nimport { Steering } from \"./steering.js\";\nimport { cast } from \"./structured.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: invoke() = load + prepare + run\n// ---------------------------------------------------------------------------\n\n/**\n * Full pipeline: load → prepare → run.\n *\n * @overload Untyped — returns `unknown`.\n */\nexport async function invoke(\n prompt: string | Prompty,\n inputs?: Record<string, unknown>,\n options?: { raw?: boolean },\n): Promise<unknown>;\n/**\n * Full pipeline with typed result: load → prepare → run → cast.\n *\n * When a `validator` is provided the raw result is deserialized from JSON\n * and passed through the validator (e.g. a Zod `.parse` function), giving\n * you a fully typed return value.\n *\n * @overload Typed — returns `Promise<T>`.\n */\nexport async function invoke<T>(\n prompt: string | Prompty,\n inputs: Record<string, unknown> | undefined,\n options: { raw?: boolean; validator: (data: unknown) => T },\n): Promise<T>;\n// Implementation\nexport async function invoke<T = unknown>(\n prompt: string | Prompty,\n inputs?: Record<string, unknown>,\n options?: { raw?: boolean; validator?: (data: unknown) => T },\n): Promise<T> {\n return traceSpan(\"invoke\", 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.invoke\");\n emit(\"description\", \"Invoke 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 if (options?.validator) {\n return cast<T>(result, options.validator);\n }\n return result as T;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Binding resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve tool bindings: inject values from parentInputs into tool arguments.\n *\n * For each binding on the matched tool, looks up `binding.input` in parentInputs\n * and sets `args[binding.name]` to that value. Returns a new args object.\n */\nexport function resolveBindings(\n agent: Prompty,\n toolName: string,\n args: Record<string, unknown>,\n parentInputs?: Record<string, unknown>,\n): Record<string, unknown> {\n if (!parentInputs || !agent.tools || agent.tools.length === 0) return args;\n\n const toolDef = agent.tools.find((t) => t.name === toolName);\n if (!toolDef || !toolDef.bindings || toolDef.bindings.length === 0) return args;\n\n const merged = { ...args };\n for (const binding of toolDef.bindings) {\n if (binding.input in parentInputs) {\n merged[binding.name] = parentInputs[binding.input];\n }\n }\n return merged;\n}\n\n// ---------------------------------------------------------------------------\n// Agent loop: invokeAgent()\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 onEvent?: EventCallback,\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 emitEvent(onEvent, \"token\", { token: item });\n }\n }\n } else if (typeof processed === \"string\") {\n textParts.push(processed);\n emitEvent(onEvent, \"token\", { token: processed });\n }\n\n return { toolCalls, content: textParts.join(\"\") };\n}\n\n/** Options for {@link invokeAgent}. */\nexport interface InvokeAgentOptions {\n tools?: Record<string, (...args: unknown[]) => unknown>;\n maxIterations?: number;\n raw?: boolean;\n onEvent?: EventCallback;\n signal?: AbortSignal;\n contextBudget?: number;\n guardrails?: Guardrails;\n steering?: Steering;\n parallelToolCalls?: boolean;\n}\n\n/**\n * Run a prompt with automatic tool-call execution loop.\n *\n * Supports §13 extensions: events, cancellation, context window\n * management, guardrails, steering, and parallel tool calls.\n *\n * @overload Untyped — returns `unknown`.\n */\nexport async function invokeAgent(\n prompt: string | Prompty,\n inputs?: Record<string, unknown>,\n options?: InvokeAgentOptions,\n): Promise<unknown>;\n/**\n * Run a prompt with automatic tool-call execution loop, returning a typed result.\n *\n * When a `validator` is provided in the options the final result is\n * deserialized from JSON and passed through the validator.\n *\n * @overload Typed — returns `Promise<T>`.\n */\nexport async function invokeAgent<T>(\n prompt: string | Prompty,\n inputs: Record<string, unknown> | undefined,\n options: InvokeAgentOptions & { validator: (data: unknown) => T },\n): Promise<T>;\n// Implementation\nexport async function invokeAgent<T = unknown>(\n prompt: string | Prompty,\n inputs?: Record<string, unknown>,\n options?: InvokeAgentOptions & { validator?: (data: unknown) => T },\n): Promise<T> {\n const rawResult = await traceSpan(\"invokeAgent\", 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 const onEvent = options?.onEvent;\n const signal = options?.signal;\n const contextBudget = options?.contextBudget;\n const guardrails = options?.guardrails;\n const steering = options?.steering;\n const parallelToolCalls = options?.parallelToolCalls ?? false;\n\n emit(\"signature\", \"prompty.invokeAgent\");\n emit(\"description\", \"Invoke a prompty with tool calling\");\n emit(\"inputs\", { prompt: serializeAgent(agent), tools: Object.keys(tools), inputs: inputs ?? {} });\n\n let messages = await prepare(agent, inputs);\n const parentInputs = inputs ?? {};\n const provider = resolveProvider(agent);\n const executor = getExecutor(provider);\n\n let response: unknown = null;\n let iteration = 0;\n\n while (true) {\n // §13.2 — Check cancellation at top of iteration\n try {\n checkCancellation(signal);\n } catch (err) {\n emitEvent(onEvent, \"cancelled\", {});\n throw err;\n }\n\n // §13.5 — Drain steering messages\n if (steering) {\n const pending = steering.drain();\n if (pending.length > 0) {\n messages.push(...pending);\n emitEvent(onEvent, \"messages_updated\", { messages });\n emitEvent(onEvent, \"status\", { message: `Injected ${pending.length} steering message(s)` });\n }\n }\n\n // §13.3 — Trim context window\n if (contextBudget !== undefined) {\n const [droppedCount] = trimToContextWindow(messages, contextBudget);\n if (droppedCount > 0) {\n emitEvent(onEvent, \"messages_updated\", { messages });\n emitEvent(onEvent, \"status\", { message: `Trimmed ${droppedCount} messages for context budget` });\n }\n }\n\n // §13.4 — Input guardrail\n if (guardrails) {\n const result = guardrails.checkInput(messages);\n if (!result.allowed) {\n emitEvent(onEvent, \"error\", { message: `Input guardrail denied: ${result.reason}` });\n throw new GuardrailError(result.reason ?? \"Input guardrail denied\");\n }\n if (result.rewrite) messages = result.rewrite;\n }\n\n // §13.2 — Check cancellation before LLM call\n try {\n checkCancellation(signal);\n } catch (err) {\n emitEvent(onEvent, \"cancelled\", {});\n throw err;\n }\n\n // Call LLM\n response = await executor.execute(agent, messages);\n\n // Streaming: consume the stream, extract tool calls from buffered chunks\n if (isAsyncIterable(response)) {\n const { toolCalls, content } = await consumeStream(agent, response, onEvent);\n\n // §13.4 — Output guardrail (on assistant content, both final and tool-call responses)\n if (guardrails && content) {\n const assistantMsg = new Message(\"assistant\", [text(content)]);\n const gr = guardrails.checkOutput(assistantMsg);\n if (!gr.allowed) {\n emitEvent(onEvent, \"error\", { message: `Output guardrail denied: ${gr.reason}` });\n throw new GuardrailError(gr.reason ?? \"Output guardrail denied\");\n }\n }\n\n if (toolCalls.length === 0) {\n // Final answer — return collected content\n emit(\"iterations\", iteration);\n emit(\"result\", content);\n emitEvent(onEvent, \"done\", { response: content, messages });\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.invokeAgent.toolCalls\");\n toolEmit(\"description\", `Tool call round ${iteration}`);\n const result = await buildToolMessagesFromCallsWithExtensions(\n toolCalls, content, tools, agent, parentInputs, toolEmit,\n { onEvent, signal, guardrails, parallel: parallelToolCalls },\n );\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 emitEvent(onEvent, \"messages_updated\", { messages });\n continue;\n }\n\n // Non-streaming: check raw response for tool calls\n if (!hasToolCalls(response)) {\n // §13.4 — Output guardrail on final response\n const finalResult = options?.raw ? response : await process(agent, response);\n if (guardrails) {\n const contentStr = typeof finalResult === \"string\" ? finalResult : JSON.stringify(finalResult);\n const assistantMsg = new Message(\"assistant\", [text(contentStr)]);\n const gr = guardrails.checkOutput(assistantMsg);\n if (!gr.allowed) {\n emitEvent(onEvent, \"error\", { message: `Output guardrail denied: ${gr.reason}` });\n throw new GuardrailError(gr.reason ?? \"Output guardrail denied\");\n }\n if (gr.rewrite !== undefined) {\n emit(\"iterations\", iteration);\n emit(\"result\", gr.rewrite);\n emitEvent(onEvent, \"done\", { response: gr.rewrite, messages });\n return gr.rewrite;\n }\n }\n emit(\"iterations\", iteration);\n emit(\"result\", finalResult);\n emitEvent(onEvent, \"done\", { response: finalResult, messages });\n return finalResult;\n }\n\n // §13.4 — Output guardrail (on tool-call response with text content)\n if (guardrails) {\n const { textContent } = extractToolInfo(response);\n if (textContent) {\n const assistantMsg = new Message(\"assistant\", [text(textContent)]);\n const gr = guardrails.checkOutput(assistantMsg);\n if (!gr.allowed) {\n emitEvent(onEvent, \"error\", { message: `Output guardrail denied: ${gr.reason}` });\n throw new GuardrailError(gr.reason ?? \"Output guardrail denied\");\n }\n }\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.invokeAgent.toolCalls\");\n toolEmit(\"description\", `Tool call round ${iteration}`);\n const result = await buildToolResultMessagesWithExtensions(\n response, tools, agent, parentInputs, toolEmit,\n { onEvent, signal, guardrails, parallel: parallelToolCalls },\n );\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 emitEvent(onEvent, \"messages_updated\", { messages });\n }\n\n emit(\"iterations\", iteration);\n\n if (options?.raw) {\n emit(\"result\", response);\n emitEvent(onEvent, \"done\", { response, messages });\n return response;\n }\n const result = await process(agent, response);\n emit(\"result\", result);\n emitEvent(onEvent, \"done\", { response: result, messages });\n return result;\n });\n if (options?.validator) {\n return cast<T>(rawResult, options.validator);\n }\n return rawResult as T;\n}\n\n// ---------------------------------------------------------------------------\n// Thread marker helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Get map of `{propertyName: kind}` for inputs with rich kinds.\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\n/**\n * Extract normalized tool call info from any provider's raw response.\n * Returns a uniform array of `{id, name, arguments}` and any text content.\n */\nfunction extractToolInfo(response: unknown): {\n toolCalls: { id: string; name: string; arguments: string; [key: string]: string }[];\n textContent: string;\n} {\n if (typeof response !== \"object\" || response === null) {\n return { toolCalls: [], textContent: \"\" };\n }\n const r = response as Record<string, unknown>;\n\n // Anthropic: content[].type === \"tool_use\"\n if (Array.isArray(r.content) && r.stop_reason === \"tool_use\") {\n const content = r.content as Record<string, unknown>[];\n const toolCalls = content\n .filter((b) => b.type === \"tool_use\")\n .map((b) => ({\n id: b.id as string,\n name: b.name as string,\n arguments: JSON.stringify(b.input),\n }));\n const textContent = content\n .filter((b) => b.type === \"text\")\n .map((b) => b.text as string)\n .join(\"\");\n return { toolCalls, textContent };\n }\n\n // OpenAI Responses API: output[].type === \"function_call\"\n if (r.object === \"response\" && Array.isArray(r.output)) {\n const funcCalls = (r.output as Record<string, unknown>[]).filter(\n (item) => item.type === \"function_call\",\n );\n const toolCalls = funcCalls.map((fc) => ({\n id: ((fc.call_id ?? fc.id ?? \"\") as string),\n call_id: ((fc.call_id ?? fc.id ?? \"\") as string),\n name: fc.name as string,\n arguments: (fc.arguments as string) ?? \"{}\",\n }));\n return { toolCalls, textContent: \"\" };\n }\n\n // OpenAI Chat: 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 && Array.isArray(message.tool_calls)) {\n const toolCalls = (message.tool_calls as Record<string, unknown>[]).map((tc) => {\n const fn = tc.function as Record<string, unknown>;\n return {\n id: tc.id as string,\n name: fn.name as string,\n arguments: fn.arguments as string,\n };\n });\n return { toolCalls, textContent: (message.content as string) ?? \"\" };\n }\n }\n\n return { toolCalls: [], textContent: \"\" };\n}\n\n// ---------------------------------------------------------------------------\n// Extension-aware tool dispatch helpers (§13)\n// ---------------------------------------------------------------------------\n\n/** Options for extension-aware tool dispatch. */\ninterface ToolExtensionOptions {\n onEvent?: EventCallback;\n signal?: AbortSignal;\n guardrails?: Guardrails;\n parallel?: boolean;\n}\n\n/**\n * Dispatch a single tool call with §13 extensions (events, cancellation, guardrails).\n */\nasync function dispatchOneToolWithExtensions(\n tc: { id: string; name: string; arguments: string; [key: string]: string },\n tools: Record<string, (...args: unknown[]) => unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n ext: ToolExtensionOptions,\n): Promise<string> {\n const { onEvent, signal, guardrails } = ext;\n\n // §13.2 — Check cancellation before each tool\n try {\n checkCancellation(signal);\n } catch (err) {\n emitEvent(onEvent, \"cancelled\", {});\n throw err;\n }\n\n // §13.1 — Emit tool_call_start\n emitEvent(onEvent, \"tool_call_start\", { name: tc.name, arguments: tc.arguments });\n\n // §13.4 — Tool guardrail\n if (guardrails) {\n let parsedArgs: Record<string, unknown> = {};\n try {\n const parsed = JSON.parse(tc.arguments);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n parsedArgs = parsed as Record<string, unknown>;\n }\n } catch {\n // ignore parse errors for guardrail check\n }\n const gr = guardrails.checkTool(tc.name, parsedArgs);\n if (!gr.allowed) {\n const deniedMsg = `Tool denied by guardrail: ${gr.reason}`;\n emitEvent(onEvent, \"tool_result\", { name: tc.name, result: deniedMsg });\n return deniedMsg;\n }\n if (gr.rewrite !== undefined) {\n tc = { ...tc, arguments: typeof gr.rewrite === \"string\" ? gr.rewrite : JSON.stringify(gr.rewrite) };\n }\n }\n\n // Execute tool\n let result: string;\n let parsedArgs: unknown;\n try {\n parsedArgs = JSON.parse(tc.arguments);\n if (agent && parentInputs && typeof parsedArgs === \"object\" && parsedArgs !== null && !Array.isArray(parsedArgs)) {\n parsedArgs = resolveBindings(agent, tc.name, parsedArgs as Record<string, unknown>, parentInputs);\n }\n result = 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 dispatchTool(tc.name, parsedArgs as Record<string, unknown>, tools, agent, parentInputs);\n toolEmit(\"result\", r);\n return r;\n }) as string;\n } catch (err) {\n // Re-throw cancellation errors\n if (err instanceof CancelledError) throw err;\n result = `Error: ${err instanceof Error ? err.message : String(err)}`;\n }\n\n // §13.1 — Emit tool_result\n emitEvent(onEvent, \"tool_result\", { name: tc.name, result });\n return result;\n}\n\n/**\n * Dispatch tool calls with §13 extensions, supporting parallel execution.\n */\nasync function dispatchToolsWithExtensions(\n toolCalls: { id: string; name: string; arguments: string; [key: string]: string }[],\n tools: Record<string, (...args: unknown[]) => unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n ext: ToolExtensionOptions,\n): Promise<string[]> {\n if (ext.parallel && toolCalls.length > 1) {\n // §13.6 — Parallel tool execution via Promise.all\n return Promise.all(\n toolCalls.map((tc) => dispatchOneToolWithExtensions(tc, tools, agent, parentInputs, ext)),\n );\n }\n\n // Sequential execution\n const results: string[] = [];\n for (const tc of toolCalls) {\n results.push(await dispatchOneToolWithExtensions(tc, tools, agent, parentInputs, ext));\n }\n return results;\n}\n\n/**\n * Build tool result messages from a raw LLM response with §13 extensions.\n */\nasync function buildToolResultMessagesWithExtensions(\n response: unknown,\n tools: Record<string, (...args: unknown[]) => unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n parentEmit: ((key: string, value: unknown) => void) | undefined,\n ext: ToolExtensionOptions,\n): Promise<Message[]> {\n const { toolCalls, textContent } = extractToolInfo(response);\n\n const toolResults = await dispatchToolsWithExtensions(toolCalls, tools, agent, parentInputs, ext);\n\n if (parentEmit) {\n parentEmit(\"inputs\", {\n tool_calls: toolCalls.map((tc, i) => ({ name: tc.name, arguments: tc.arguments, id: tc.id, result: toolResults[i] })),\n });\n }\n\n const provider = resolveProvider(agent);\n const executor = getExecutor(provider);\n return executor.formatToolMessages(response, toolCalls, toolResults, textContent);\n}\n\n/**\n * Build tool result messages from streaming-extracted ToolCall objects with §13 extensions.\n */\nasync function buildToolMessagesFromCallsWithExtensions(\n toolCalls: ToolCall[],\n textContent: string,\n tools: Record<string, (...args: unknown[]) => unknown>,\n agent: Prompty,\n parentInputs: Record<string, unknown>,\n parentEmit: ((key: string, value: unknown) => void) | undefined,\n ext: ToolExtensionOptions,\n): Promise<Message[]> {\n const normalizedCalls = toolCalls.map((tc) => ({ id: tc.id, name: tc.name, arguments: tc.arguments }));\n\n const toolResults = await dispatchToolsWithExtensions(normalizedCalls, tools, agent, parentInputs, ext);\n\n if (parentEmit) {\n parentEmit(\"inputs\", {\n tool_calls: normalizedCalls.map((tc, i) => ({ name: tc.name, arguments: tc.arguments, id: tc.id, result: toolResults[i] })),\n });\n }\n\n const provider = resolveProvider(agent);\n const executor = getExecutor(provider);\n return executor.formatToolMessages(null, normalizedCalls, toolResults, textContent);\n}\n","export * from \"./types.js\";\nexport * from \"./interfaces.js\";\nexport * from \"./registry.js\";\nexport * from \"./connections.js\";\nexport { load, defaultSaveContext } from \"./loader.js\";\nexport {\n validateInputs,\n render,\n parse,\n process,\n prepare,\n run,\n invoke,\n invokeAgent,\n resolveBindings,\n type InvokeAgentOptions,\n} from \"./pipeline.js\";\nexport {\n type ToolHandler,\n ToolHandlerError,\n registerTool,\n getTool,\n clearTools,\n registerToolHandler,\n getToolHandler,\n clearToolHandlers,\n dispatchTool,\n} from \"./tool-dispatch.js\";\nexport { type AgentEventType, type EventCallback, emitEvent } from \"./agent-events.js\";\nexport { CancelledError, checkCancellation } from \"./cancellation.js\";\nexport { estimateChars, summarizeDropped, trimToContextWindow } from \"./context.js\";\nexport {\n type GuardrailResult,\n GuardrailError,\n type InputGuardrail,\n type OutputGuardrail,\n type ToolGuardrail,\n type GuardrailsOptions,\n Guardrails,\n} from \"./guardrails.js\";\nexport { Steering } from \"./steering.js\";\nexport { tool, bindTools, type ToolOptions, type ToolParameter, type ToolFunction } from \"./tool-decorator.js\";\nexport {\n type StructuredResult,\n StructuredResultSymbol,\n createStructuredResult,\n isStructuredResult,\n cast,\n} from \"./structured.js\";\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 * §13.5 Steering — inject user messages into a running agent loop.\n * @module\n */\n\nimport { Message } from \"./types.js\";\n\n/**\n * A handle for injecting user messages into a running agent loop.\n * Thread-safe in the JS single-threaded model (no locking needed).\n */\nexport class Steering {\n private queue: string[] = [];\n\n /** Enqueue a message to be injected at the next iteration. */\n send(message: string): void {\n this.queue.push(message);\n }\n\n /** Remove and return all queued messages as Message objects. */\n drain(): Message[] {\n const items = this.queue.splice(0);\n return items.map((text) => new Message(\"user\", [{ kind: \"text\", value: text }]));\n }\n\n /** Whether there are pending messages without consuming them. */\n get hasPending(): boolean {\n return this.queue.length > 0;\n }\n}\n","/**\n * `tool()` wrapper for typed tool functions (spec §11.2).\n *\n * Creates a FunctionTool definition from a function's metadata and\n * auto-registers it in the global tool name registry.\n *\n * @module\n */\n\nimport { FunctionTool } from \"../model/tool.js\";\nimport { Property } from \"../model/property.js\";\nimport { registerTool } from \"./tool-dispatch.js\";\n\n/** Options for the tool() wrapper. */\nexport interface ToolOptions {\n /** Override the tool name (defaults to fn.name). */\n name?: string;\n /** Override the description. */\n description?: string;\n /** Parameter definitions (since JS can't introspect type hints). */\n parameters?: ToolParameter[];\n /** If false, skip global registration. Default: true. */\n register?: boolean;\n}\n\n/** A parameter definition for a tool function. */\nexport interface ToolParameter {\n name: string;\n kind?: string;\n description?: string;\n required?: boolean;\n default?: unknown;\n}\n\n/** Extended function with __tool__ metadata. */\nexport interface ToolFunction<T extends (...args: unknown[]) => unknown = (...args: unknown[]) => unknown> {\n (...args: Parameters<T>): ReturnType<T>;\n __tool__: FunctionTool;\n}\n\n/**\n * Wrap a function as a typed tool.\n *\n * Unlike Python's @tool which can introspect type hints, the JS version\n * requires explicit parameter definitions. The function itself is returned\n * unchanged but with a `__tool__` property containing the FunctionTool.\n *\n * @example\n * ```ts\n * const getWeather = tool(\n * (city: string, units?: string) => `72°F in ${city}`,\n * {\n * name: \"get_weather\",\n * description: \"Get the current weather\",\n * parameters: [\n * { name: \"city\", kind: \"string\", required: true },\n * { name: \"units\", kind: \"string\", default: \"celsius\" },\n * ],\n * },\n * );\n *\n * getWeather.__tool__; // FunctionTool instance\n * getWeather(\"NYC\"); // \"72°F in NYC\"\n * ```\n */\nexport function tool<T extends (...args: unknown[]) => unknown>(\n fn: T,\n options?: ToolOptions,\n): ToolFunction<T> {\n const toolName = options?.name ?? fn.name;\n const toolDesc = options?.description ?? \"\";\n const shouldRegister = options?.register !== false;\n\n const properties: Property[] = (options?.parameters ?? []).map((p) =>\n new Property({\n name: p.name,\n kind: p.kind ?? \"string\",\n required: p.required ?? (p.default === undefined),\n description: p.description,\n default: p.default,\n }),\n );\n\n const toolDef = new FunctionTool({\n name: toolName,\n kind: \"function\",\n description: toolDesc,\n parameters: properties,\n });\n\n // Attach __tool__ to the function\n const wrapped = fn as unknown as ToolFunction<T>;\n (wrapped as unknown as Record<string, unknown>).__tool__ = toolDef;\n\n if (shouldRegister) {\n registerTool(toolName, fn as (...args: unknown[]) => unknown);\n }\n\n return wrapped;\n}\n\n/**\n * Validate tool handlers against an agent's tool declarations and return a handler record.\n *\n * Each function must have a `__tool__` property (set by `tool()`). `bindTools` matches\n * each handler's name against `kind: \"function\"` tools declared in `agent.tools`,\n * raising on mismatches and warning on missing handlers.\n *\n * @param agent - A loaded Prompty agent (has `.tools` property)\n * @param tools - Array of `tool()`-wrapped functions\n * @returns Handler record suitable for `invokeAgent(..., { tools: result })`\n * @throws Error if a handler has no `__tool__` property or no matching declaration\n */\nexport function bindTools(\n agent: { tools?: Array<{ name: string; kind?: string }> },\n tools: Array<ToolFunction>,\n): Record<string, (...args: unknown[]) => unknown> {\n const handlers: Record<string, (...args: unknown[]) => unknown> = {};\n\n for (const fn of tools) {\n const toolDef = fn.__tool__;\n if (!toolDef) {\n throw new Error(\n `Function '${fn.name || \"(anonymous)\"}' is not a tool()-wrapped function (missing __tool__ property)`,\n );\n }\n const name = toolDef.name;\n if (name in handlers) {\n throw new Error(`Duplicate tool handler: '${name}'`);\n }\n handlers[name] = fn as (...args: unknown[]) => unknown;\n }\n\n // Get declared function tool names from agent.tools\n const declaredFunctionTools = new Set<string>();\n for (const toolDef of agent.tools ?? []) {\n if (toolDef.kind === \"function\") {\n declaredFunctionTools.add(toolDef.name);\n }\n }\n\n // Validate: every handler must match a declaration\n for (const name of Object.keys(handlers)) {\n if (!declaredFunctionTools.has(name)) {\n const declared = [...declaredFunctionTools].sort().join(\", \") || \"(none)\";\n throw new Error(\n `Tool handler '${name}' has no matching 'kind: function' declaration in agent.tools. ` +\n `Declared function tools: ${declared}`,\n );\n }\n }\n\n // Warn: every function declaration should have a handler\n for (const name of declaredFunctionTools) {\n if (!(name in handlers)) {\n console.warn(\n `Tool '${name}' is declared in agent.tools but no handler was provided to bindTools()`,\n );\n }\n }\n\n return handlers;\n}\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","export { NunjucksRenderer } from \"./nunjucks.js\";\nexport { MustacheRenderer } from \"./mustache.js\";\nexport { prepareRenderInputs, getLastNonces, clearLastNonces } from \"./common.js\";\n","/**\n * Prompty chat parser — splits rendered text into abstract messages.\n *\n * Recognizes role markers (`system:`, `user:`, `assistant:`, `developer:`).\n * Supports nonce-based sanitization when `FormatConfig.strict` is enabled.\n *\n * Images should be passed via `kind: image` input properties rather than\n * inline markdown syntax. Inline `![alt](url)` is preserved as literal text.\n *\n * @module\n */\n\nimport { resolve } from \"node:path\";\nimport { randomBytes } from \"node:crypto\";\nimport type { Prompty } from \"../model/prompty.js\";\nimport {\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// 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 const parts: TextPart[] = [{ kind: \"text\", value: content }];\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}\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\";\nexport { otelTracer } from \"./otel.js\";\nexport type { OtelTracerOptions, OtelApi } from \"./otel.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","/**\n * OpenTelemetry trace backend for Prompty.\n *\n * Plugs into the Tracer registry and emits OTel spans with structured\n * attributes. Requires `@opentelemetry/api` — install as a peer dependency.\n *\n * Usage:\n * ```typescript\n * import { Tracer } from \"@prompty/core\";\n * import { otelTracer } from \"@prompty/core/tracing/otel\";\n * import * as otelApi from \"@opentelemetry/api\";\n *\n * Tracer.add(\"otel\", otelTracer(otelApi));\n * // or with custom tracer name:\n * Tracer.add(\"otel\", otelTracer(otelApi, { tracerName: \"my.service\" }));\n * ```\n *\n * @module\n */\n\nimport type { TracerFactory, TracerBackend } from \"./tracer.js\";\nimport { toSerializable } from \"./tracer.js\";\n\n/** The subset of `@opentelemetry/api` needed by this module. */\nexport interface OtelApi {\n trace: {\n getTracer(name: string): {\n startSpan(name: string): OtelSpan;\n };\n setSpan(context: unknown, span: OtelSpan): unknown;\n };\n context: {\n active(): unknown;\n with<T>(context: unknown, fn: () => T): T;\n };\n SpanStatusCode: {\n OK: number;\n ERROR: number;\n };\n}\n\ninterface OtelSpan {\n setAttribute(key: string, value: string | number | boolean): void;\n setStatus(status: { code: number; message?: string }): void;\n recordException(exception: Error): void;\n end(): void;\n}\n\n// ---------------------------------------------------------------------------\n// Configuration\n// ---------------------------------------------------------------------------\n\n/** Options for {@link otelTracer}. */\nexport interface OtelTracerOptions {\n /** OTel tracer name. Defaults to `\"prompty\"`. */\n tracerName?: string;\n}\n\nconst DEFAULT_TRACER_NAME = \"prompty\";\n\n// ---------------------------------------------------------------------------\n// Attribute helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively flatten a nested object into dotted-key span attributes.\n *\n * ```\n * { model: { id: \"gpt-4\" } } → span.setAttribute(\"model.id\", \"gpt-4\")\n * ```\n */\nfunction setAttributes(\n span: { setAttribute(key: string, value: string | number | boolean): void },\n prefix: string,\n value: unknown,\n): void {\n if (value === null || value === undefined) return;\n\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n span.setAttribute(prefix, value);\n return;\n }\n\n if (Array.isArray(value)) {\n try {\n span.setAttribute(prefix, JSON.stringify(value));\n } catch {\n span.setAttribute(prefix, String(value));\n }\n return;\n }\n\n if (typeof value === \"object\") {\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n setAttributes(span, `${prefix}.${k}`, v);\n }\n return;\n }\n\n span.setAttribute(prefix, String(value));\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Create an OTel trace backend compatible with `Tracer.add()`.\n *\n * Each call to the returned factory starts a new OTel span named after the\n * Prompty pipeline step. The backend receives `(key, value)` events and\n * sets them as span attributes. On `__end__`, the span is ended.\n *\n * Special handling:\n * - `error` key sets `StatusCode.ERROR` and records the exception.\n * - `__end__` key ends the span.\n * - All other values are serialized and expanded into dotted attributes.\n *\n * @param api - The `@opentelemetry/api` module. Pass `require(\"@opentelemetry/api\")`\n * or the result of `await import(\"@opentelemetry/api\")`.\n * @param options - Optional configuration.\n * @returns A `TracerFactory` suitable for `Tracer.add()`.\n */\nexport function otelTracer(api: OtelApi, options?: OtelTracerOptions): TracerFactory {\n const tracerName = options?.tracerName ?? DEFAULT_TRACER_NAME;\n const tracer = api.trace.getTracer(tracerName);\n\n return function otelFactory(signature: string): TracerBackend | null {\n const span = tracer.startSpan(signature);\n const ctx = api.trace.setSpan(api.context.active(), span);\n\n // Make this span the active context so nested spans are parented.\n api.context.with(ctx, () => {});\n\n const backend: TracerBackend = (key: string, value: unknown) => {\n if (key === \"__end__\") {\n span.end();\n return;\n }\n\n if (key === \"error\") {\n span.setStatus({ code: api.SpanStatusCode.ERROR, message: String(value) });\n if (value instanceof Error) {\n span.recordException(value);\n if (value.stack) {\n span.setAttribute(\"exception.stacktrace\", value.stack);\n }\n } else {\n span.setAttribute(\"exception.message\", String(value));\n }\n return;\n }\n\n // Serialize and flatten into span attributes\n try {\n const serialized = toSerializable(value);\n setAttributes(span, key, serialized);\n } catch {\n // Tracer errors should never crash the pipeline\n }\n };\n\n return backend;\n };\n}\n","// Copyright (c) Microsoft. All rights reserved.\n// WARNING: This is an auto-generated file. DO NOT EDIT THIS FILE DIRECTLY.\n\nexport { LoadContext, SaveContext } from \"./context\";\n\nexport { Property, ArrayProperty, ObjectProperty } from \"./property\";\n\nexport {\n Connection,\n ReferenceConnection,\n RemoteConnection,\n ApiKeyConnection,\n AnonymousConnection,\n FoundryConnection,\n OAuthConnection,\n} from \"./connection\";\n\nexport { ModelOptions } from \"./model-options\";\n\nexport { Model } from \"./model\";\n\nexport { Binding } from \"./binding\";\n\nexport {\n Tool,\n FunctionTool,\n CustomTool,\n McpTool,\n OpenApiTool,\n PromptyTool,\n} from \"./tool\";\n\nexport { McpApprovalMode } from \"./mcp-approval-mode\";\n\nexport { FormatConfig } from \"./format-config\";\n\nexport { ParserConfig } from \"./parser-config\";\n\nexport { Template } from \"./template\";\n\nexport { Prompty } from \"./prompty\";\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 invoke,\n invokeAgent,\n resolveBindings,\n type InvokeAgentOptions,\n\n // Agent loop extensions (§13)\n type AgentEventType,\n type EventCallback,\n emitEvent,\n CancelledError,\n checkCancellation,\n estimateChars,\n summarizeDropped,\n trimToContextWindow,\n type GuardrailResult,\n GuardrailError,\n type InputGuardrail,\n type OutputGuardrail,\n type ToolGuardrail,\n type GuardrailsOptions,\n Guardrails,\n Steering,\n\n // Tool decorator (§11.2)\n tool,\n bindTools,\n type ToolOptions,\n type ToolParameter,\n type ToolFunction,\n\n // Structured result casting (§8.8)\n type StructuredResult,\n StructuredResultSymbol,\n createStructuredResult,\n isStructuredResult,\n cast,\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 otelTracer,\n type TracerBackend,\n type TracerFactory,\n type SpanEmitter,\n type OtelTracerOptions,\n type OtelApi,\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 FormatConfig,\n ParserConfig,\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 PromptyTool,\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"],"mappings":"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","names":["Tracer","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","yaml","parse","path","dirname","resolve","tool","load","prepare","run","invokeAgent","text","init_context","process","rendered","messages","nonces","expanded","result","toolMessages","parsedArgs","init_context","init_context","text","resolve","text"]}