@cognipeer/agent-sdk 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +447 -163
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +58 -4
- package/dist/index.d.ts +58 -4
- package/dist/index.mjs +447 -163
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/langchain.ts","../src/model.ts","../src/tool.ts","../src/prompts.ts","../src/types.ts","../src/nodes/resolver.ts","../src/utils/usage.ts","../src/utils/tracing.ts","../src/nodes/agentCore.ts","../src/nodes/tools.ts","../src/nodes/toolLimitFinalize.ts","../src/guardrails/engine.ts","../src/utils/stateSnapshot.ts","../src/utils/toolApprovals.ts","../src/utils/utilTokens.ts","../src/agent.ts","../src/nodes/agent.ts","../src/nodes/contextSummarize.ts","../src/utils/tokenManager.ts","../src/contextTools.ts","../src/graph/decisions.ts","../src/smart/index.ts","../src/utils/content.ts","../src/guardrails/checks.ts","../src/guardrails/index.ts"],"names":["createRequire","z","wrapped","GuardrailPhase","path","fs","nanoid","status","Buffer","durationMs","executionId","entry","systemMessage","AjvModule"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from \"zod\";\nimport { createRequire } from \"module\";\n\nimport type { ToolInterface } from \"../types.js\";\n\ntype ToolExecutor = (input: any) => Promise<any> | any;\n\nconst moduleName = \"@langchain/core/tools\";\nlet cachedToolFactory: ((impl: ToolExecutor, config: Record<string, any>) => any) | null | undefined;\nlet cachedHasAttemptedFactory = false;\n\nlet requireFn: ((specifier: string) => any) | null = null;\ntry {\n requireFn = createRequire(import.meta.url);\n} catch {\n requireFn = null;\n}\n\nfunction getExecutor(tool: ToolInterface): ToolExecutor {\n if (typeof tool.invoke === \"function\") return (input: any) => tool.invoke!(input);\n if (typeof tool.call === \"function\") return (input: any) => tool.call!(input);\n if (typeof (tool as any).func === \"function\") return (input: any) => (tool as any).func(input);\n if (typeof (tool as any).run === \"function\") return (input: any) => (tool as any).run(input);\n if (typeof (tool as unknown as ToolExecutor) === \"function\") {\n return tool as unknown as ToolExecutor;\n }\n throw new Error(`Tool ${tool?.name ?? \"<unnamed>\"} is not invokable`);\n}\n\nfunction loadLangchainToolFactory(): ((impl: ToolExecutor, config: Record<string, any>) => any) | null {\n if (cachedHasAttemptedFactory) return cachedToolFactory ?? null;\n cachedHasAttemptedFactory = true;\n cachedToolFactory = null;\n if (!requireFn) return null;\n try {\n const mod = requireFn(moduleName) as any;\n const factory = typeof mod?.tool === \"function\" ? mod.tool : undefined;\n if (typeof factory === \"function\") {\n cachedToolFactory = factory;\n }\n } catch {\n cachedToolFactory = null;\n }\n return cachedToolFactory ?? null;\n}\n\nfunction ensureSchema(candidate: any) {\n if (!candidate) return z.any();\n if (candidate instanceof z.ZodType) return candidate;\n return candidate;\n}\n\nexport function toLangchainTools(tools: ToolInterface[]): any[] {\n const factory = loadLangchainToolFactory();\n if (!factory) return tools;\n\n return tools.map((tool) => {\n if (!tool) return tool;\n if ((tool as any).__lcTool) return (tool as any).__lcTool;\n\n const executor = getExecutor(tool);\n try {\n const lcTool = factory(async (input: any) => executor(input), {\n name: tool.name,\n description: tool.description,\n schema: ensureSchema((tool as any).schema),\n });\n (tool as any).__lcTool = lcTool;\n return lcTool;\n } catch {\n return tool;\n }\n });\n}\n\nexport function fromLangchainTools<T extends ToolInterface = ToolInterface>(tools: any[]): T[] {\n return tools.map((tool: any) => {\n if (!tool) return tool;\n if ((tool as any).__source === \"smart\") return tool as T;\n if (typeof tool === \"function\" && !tool.name) {\n const wrapped = createSimpleTool({\n name: \"anonymous_tool\",\n description: undefined,\n schema: z.any(),\n executor: tool as ToolExecutor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n }\n\n const name = tool.name || (tool?.lc_kwargs?.name as string) || (tool?.config?.name as string) || \"tool\";\n const description = tool.description || tool?.lc_kwargs?.description;\n const schema = tool.schema || tool?.lc_kwargs?.schema || z.any();\n const executor: ToolExecutor = (input: any) => {\n if (typeof tool.invoke === \"function\") return tool.invoke(input);\n if (typeof tool.call === \"function\") return tool.call(input);\n if (typeof tool._call === \"function\") return tool._call(input);\n if (typeof tool.run === \"function\") return tool.run(input);\n if (typeof tool.func === \"function\") return tool.func(input);\n if (typeof tool === \"function\") return tool(input);\n throw new Error(`LangChain tool ${name} is not invokable`);\n };\n\n const wrapped = createSimpleTool({\n name,\n description,\n schema,\n executor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n });\n}\n\nfunction createSimpleTool({\n name,\n description,\n schema,\n executor,\n}: {\n name: string;\n description?: string;\n schema: any;\n executor: ToolExecutor;\n}): ToolInterface {\n const invoke = async (input: any) => executor(input);\n return {\n name,\n description,\n schema,\n invoke,\n call: invoke,\n run: invoke,\n func: invoke,\n };\n}\n","// Generic base chat model contract used internally by agent-sdk.\n// We intentionally keep this minimal and implementation-agnostic so that\n// different framework specific models (LangChain, OpenAI SDK, Anthropic, etc.)\n// can be adapted without adding hard dependencies.\n\nimport { toLangchainTools } from \"./adapters/langchain.js\";\n\nexport interface BaseChatMessagePart {\n type?: string; // e.g. 'text'\n text?: string;\n content?: string; // provider specific\n [key: string]: any;\n}\n\nexport interface BaseChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | string;\n name?: string;\n content: string | BaseChatMessagePart[];\n // Tool call metadata (OpenAI style)\n tool_calls?: Array<{ id: string; type?: string; function?: { name: string; arguments: string } }>;\n tool_call_id?: string; // for tool response messages\n usage?: any; // optional provider usage shape\n response_metadata?: any; // optional provider wrapper metadata\n [key: string]: any; // allow extensions\n}\n\nexport interface BaseChatModel {\n // Invoke should accept an array of BaseChatMessage (system/user/assistant/tool)\n invoke(messages: BaseChatMessage[]): Promise<BaseChatMessage>;\n // Optional tool binding hook. If not present the agent will emulate simple pass-through.\n bindTools? (tools: any[]): BaseChatModel;\n // Optional metadata helpers\n modelName?: string;\n [key: string]: any; // allow arbitrary extensions\n}\n\nexport type SmartModel = BaseChatModel;\n\nexport function isSmartModel(m: any): m is SmartModel {\n return !!m && typeof m === 'object' && typeof m.invoke === 'function';\n}\n\nexport function withTools(model: SmartModel, tools: any[]) {\n if (model?.bindTools) return model.bindTools(tools);\n return model;\n}\n\n// --- Adapters ----------------------------------------------------------------\n\n// Duck-type adapter for LangChain ChatModel / Runnable style objects.\n// We DO NOT import LangChain here; instead we just check for common methods.\n// Usage: fromLangchainModel(new ChatOpenAI(...)) returns a BaseChatModel.\nexport function fromLangchainModel(lcModel: any): BaseChatModel {\n if (!lcModel) throw new Error('fromLangchainModel: model is undefined/null');\n\n const adapted: BaseChatModel = {\n invoke: async (messages: BaseChatMessage[]): Promise<BaseChatMessage> => {\n // LangChain expects an array of LC message objects. If user passed LC messages already\n // they can skip adaptation; but here we accept our generic format and map to minimal LC shape.\n const normalizeContent = (content: any): any => {\n // Allow string passthrough\n if (content == null) return content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((part: any) => {\n if (!part || typeof part !== 'object') return part;\n if (part.type === 'text') return { type: 'text', text: String(part.text ?? '') };\n if (part.type === 'image_url') {\n const img = (part as any).image_url;\n // Support { url }, { base64, media_type }, or string\n if (typeof img === 'string') return { type: 'image_url', image_url: { url: img } };\n if (img && typeof img === 'object') {\n if ('url' in img) return { type: 'image_url', image_url: img };\n if ('base64' in img) {\n const media = (img as any).media_type || 'image/jpeg';\n const dataUrl = `data:${media};base64,${(img as any).base64}`;\n const detail = (img as any).detail;\n return { type: 'image_url', image_url: { url: dataUrl, detail } };\n }\n }\n // Fallback\n return part;\n }\n return part;\n });\n }\n return content;\n };\n const toLC = (m: BaseChatMessage): any => {\n // If it already looks like an LC BaseMessage (has _getType or id or lc_serializable), pass through.\n if ((m as any)._getType || (m as any).lc_serializable) return m as any;\n const role = m.role;\n // Map role to LC classes via dynamic constructors if available on lcModel or global scope.\n // We avoid importing, so fallback to generic object with role/content; many LC models accept that.\n return { role, content: normalizeContent(m.content), name: m.name, tool_calls: (m as any).tool_calls, tool_call_id: (m as any).tool_call_id };\n };\n const lcMessages = messages.map(toLC);\n const response = await lcModel.invoke(lcMessages);\n // Convert back to BaseChatMessage (attempt best-effort extraction)\n if (response && typeof response === 'object') {\n const content = (response as any).content ?? (response as any).text ?? '';\n return {\n role: (response as any).role || 'assistant',\n content,\n tool_calls: (response as any).tool_calls,\n usage: (response as any).usage,\n response_metadata: (response as any).response_metadata,\n ...response,\n } as BaseChatMessage;\n }\n return { role: 'assistant', content: String(response ?? '') };\n },\n bindTools: (tools: any[]) => {\n const lcReady = toLangchainTools(tools);\n if (typeof lcModel.bindTools === 'function') {\n const bound = lcModel.bindTools(lcReady);\n return fromLangchainModel(bound);\n }\n if (typeof lcModel.bind === 'function') {\n const bound = lcModel.bind({ tools: lcReady });\n return fromLangchainModel(bound);\n }\n return adapted;\n },\n modelName: lcModel.modelName || lcModel._modelId || lcModel._llmType || lcModel.name,\n _lc: lcModel,\n };\n\n return adapted;\n}\n\n// Placeholder for future adapters (OpenAI SDK, Anthropic, etc.) can follow a similar pattern.\n\n","import type { ZodSchema } from \"zod\";\n\nimport type { ToolInterface } from \"./types.js\";\n\nexport type SmartToolFn = (args: any) => Promise<any> | any;\n\nexport function createTool({\n name,\n description,\n schema,\n func,\n needsApproval,\n approvalPrompt,\n approvalDefaults,\n}: {\n name: string;\n description?: string;\n schema: ZodSchema;\n func: SmartToolFn;\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n}): ToolInterface {\n const execute: SmartToolFn = async (input: any) => func(input);\n\n const toolRecord: ToolInterface = {\n name,\n description,\n schema,\n // Our runtime prefers invoke but fallback helpers keep compatibility with LC-style tools.\n invoke: execute,\n call: execute,\n run: execute,\n func: execute,\n } as ToolInterface;\n\n if (typeof needsApproval === \"boolean\") {\n (toolRecord as any).needsApproval = needsApproval;\n }\n if (approvalPrompt !== undefined) {\n (toolRecord as any).approvalPrompt = approvalPrompt;\n }\n if (approvalDefaults !== undefined) {\n (toolRecord as any).approvalDefaults = approvalDefaults;\n }\n\n (toolRecord as any).__source = (toolRecord as any).__source || \"smart\";\n (toolRecord as any).__impl = func;\n\n return toolRecord;\n}\n","export function buildSystemPrompt(extra?: string, planning?: boolean, name: string = \"Agent\") {\n const extraTrimmed = extra?.trim();\n const agentHeader = `Agent Name: ${name}`;\n const planningBlock = planning\n ? `<planning>\nPLANNING IS MANDATORY.\n\nRules:\n1) Your FIRST action in every task is a single call to the tool \"manage_todo_list\" with operation=\"write\" and a full, ordered plan (1+ items). Even for trivial tasks, write a one-item plan.\n2) After every non-planning tool call, you MUST immediately call \"manage_todo_list\" with operation=\"write\" (or re-write) to update statuses and append one-line evidence on the affected item only.\n3) Keep exactly ONE item \"in-progress\" at any time; all others are \"not-started\" or \"completed\".\n4) Never reveal the plan text. Never summarize the plan in the assistant messages.\n5) If you ever produce an assistant message without having written a plan in this session, STOP and first write the plan via \"manage_todo_list\".\n</planning>`\n : \"\";\n return [\n agentHeader,\n \"You are an advanced AI agent that is concise, accurate, and helpful.\",\n \"Follow these rules:\",\n \"- Use tools only when they add value; avoid redundant calls.\",\n \"- Never fabricate tool results; if unavailable, say so briefly.\",\n \"- Prefer short, structured answers; use bullet points when helpful.\",\n \"- Keep privacy and safety: do not reveal secrets or sensitive data.\",\n \"- If inputs are ambiguous or missing, ask one concise clarifying question.\",\n \"- Reuse prior tool results already present in the conversation when sufficient.\",\n planningBlock,\n extraTrimmed ? `Extra instructions: ${extraTrimmed}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n","// LangChain specific types are removed from core; we define lightweight internal shapes.\n// If the user uses LangChain, they can still pass LC message objects; we treat them opaquely.\nimport type { ZodSchema } from \"zod\";\n\n// Image and content part types for multimodal messages\nexport type ImageURL =\n | { url: string; detail?: 'auto' | 'low' | 'high' }\n | { base64: string; media_type?: string; detail?: 'auto' | 'low' | 'high' }\n | string;\n\nexport type ContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: ImageURL }\n | { type: string; [key: string]: any };\n\n// Generic tool interface minimal contract (duck-typed). If user passes a LangChain Tool it will satisfy this.\nexport interface ToolInterface<TInput = any, TOutput = any, TCallOptions = any> {\n name: string;\n description?: string;\n // Either invoke(arg) or call(arg)\n invoke?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n call?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n schema?: any; // optional JSON schema / zod inference\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n [key: string]: any;\n}\n\nexport type RunnableConfig = { [key: string]: any };\n\n// Base message (internal) – we accept either string content or array parts.\nexport type BaseMessage = {\n role: string; // 'user' | 'assistant' | 'system' | 'tool' | etc.\n name?: string;\n content: string | ContentPart[];\n tool_calls?: any;\n tool_call_id?: string;\n [key: string]: any;\n};\n\n// AI message is any message with role=assistant; keep alias for usageConverter generics\nexport type AIMessage = BaseMessage & { role: 'assistant' };\n\nexport type Message = BaseMessage; // maintain alias used elsewhere\n\nexport enum GuardrailPhase {\n Request = \"request\",\n Response = \"response\",\n}\n\nexport type GuardrailDisposition = \"block\" | \"warn\" | \"allow\";\n\nexport type GuardrailContext = {\n phase: GuardrailPhase;\n messages: Message[];\n latestMessage?: Message;\n state: SmartState;\n runtime?: AgentRuntimeConfig;\n options: SmartAgentOptions;\n};\n\nexport type GuardrailRuleResult = {\n passed: boolean;\n reason?: string;\n details?: Record<string, any>;\n disposition?: GuardrailDisposition;\n};\n\nexport type GuardrailRule = {\n id?: string;\n title?: string;\n description?: string;\n evaluate: (\n context: GuardrailContext\n ) => Promise<GuardrailRuleResult> | GuardrailRuleResult;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailIncident = {\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n phase: GuardrailPhase;\n reason?: string;\n details?: Record<string, any>;\n disposition: GuardrailDisposition;\n};\n\nexport type ConversationGuardrail = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo: GuardrailPhase[];\n rules: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: (\n incident: GuardrailIncident,\n context: GuardrailContext\n ) => Promise<GuardrailDisposition | void> | GuardrailDisposition | void;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailOutcome = {\n ok: boolean;\n incidents: GuardrailIncident[];\n};\n\n// Common limits for both Agent and SmartAgent\nexport type AgentLimits = {\n maxToolCalls?: number;\n // Maximum number of tools to execute in parallel per turn\n maxParallelTools?: number;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentLimits = AgentLimits;\n\nexport type TraceSinkFileConfig = {\n type: \"file\";\n path?: string;\n};\n\nexport type TraceSinkCustomConfig = {\n type: \"custom\";\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n};\n\nexport type TraceSinkCognipeerConfig = {\n type: \"cognipeer\";\n apiKey: string;\n url?: string;\n};\n\nexport type TraceSinkHttpConfig = {\n type: \"http\";\n url: string;\n headers?: Record<string, string>;\n};\n\nexport type TraceSinkConfig =\n | TraceSinkFileConfig\n | TraceSinkCustomConfig\n | TraceSinkCognipeerConfig\n | TraceSinkHttpConfig;\n\nexport type TracingConfig = {\n enabled: boolean;\n logData?: boolean;\n sink?: TraceSinkConfig;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentTracingConfig = TracingConfig;\n\n// --- Base Agent (simple, minimal) ---\nexport type AgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\n// --- Smart Agent (batteries-included with planning & summarization) ---\nexport type SmartAgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Toggle token-aware context summarization. Default: true. Set to false to disable.\n summarization?: boolean | {\n enable: boolean;\n maxTokens: number;\n };\n // System prompt configuration\n systemPrompt?: string; // Plain string system prompt to append to defaults\n // Enable internal planning workflow (todo list tool + prompt hints)\n useTodoList?: boolean;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\n// Runtime representation of an agent (used inside state.agent)\nexport type AgentRuntimeConfig = {\n name?: string;\n version?: string;\n model: any;\n tools: Array<ToolInterface<any, any, any>>;\n guardrails?: ConversationGuardrail[];\n systemPrompt?: string;\n limits?: AgentLimits;\n useTodoList?: boolean;\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\nexport type TraceMessageSection = {\n id?: string;\n kind: \"message\";\n label: string;\n role: string;\n content: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolCallSection = {\n id?: string;\n kind: \"tool_call\";\n label: string;\n tool: string;\n arguments?: any;\n};\n\nexport type TraceToolResultItem = {\n title?: string;\n url?: string;\n snippet?: string;\n [key: string]: any;\n};\n\nexport type TraceToolResultSection = {\n id?: string;\n kind: \"tool_result\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n};\n\nexport type TraceToolResponseSection = {\n id?: string;\n kind: \"tool_response\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n};\n\nexport type TraceSummarySection = {\n id?: string;\n kind: \"summary\";\n label: string;\n content: string;\n};\n\nexport type TraceMetadataSection = {\n id?: string;\n kind: \"metadata\";\n label: string;\n data: Record<string, any>;\n};\n\nexport type TraceDataSection =\n | TraceMessageSection\n | TraceToolCallSection\n | TraceToolResultSection\n | TraceToolResponseSection\n | TraceSummarySection\n | TraceMetadataSection;\n\nexport type TraceEventRecord = {\n sessionId: string;\n id: string;\n type: string;\n label: string;\n sequence: number;\n timestamp: string;\n actor?: { scope?: string; name?: string; role?: string; version?: string };\n status: \"success\" | \"error\" | \"skipped\" | \"retry\";\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n data?: { sections: TraceDataSection[] };\n debug?: Record<string, any>;\n};\n\nexport type TraceErrorRecord = {\n eventId: string;\n message: string;\n stack?: string;\n type?: string;\n timestamp?: string;\n};\n\nexport type TraceSessionSummary = {\n totalDurationMs: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n totalCachedInputTokens: number;\n totalBytesIn: number;\n totalBytesOut: number;\n eventCounts: Record<string, number>;\n};\n\nexport type TraceSessionStatus = \"in_progress\" | \"success\" | \"error\" | \"partial\";\n\nexport type TraceSinkSnapshot =\n | { type: \"file\"; path: string }\n | { type: \"custom\" }\n | { type: \"cognipeer\"; url: string }\n | { type: \"http\"; url: string };\n\nexport type TraceSessionConfigSnapshot = {\n enabled: boolean;\n logData: boolean;\n sink: TraceSinkSnapshot;\n};\n\nexport type TraceSessionFile = {\n sessionId: string;\n startedAt: string;\n endedAt?: string;\n durationMs?: number;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config: TraceSessionConfigSnapshot;\n summary: TraceSessionSummary;\n events: TraceEventRecord[];\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n};\n\nexport type ResolvedTraceSink =\n | { type: \"file\"; baseDir: string }\n | { type: \"custom\"; onEvent?: (event: TraceEventRecord) => void | Promise<void>; onSession?: (session: TraceSessionFile) => void | Promise<void> }\n | { type: \"cognipeer\"; url: string; apiKey: string }\n | { type: \"http\"; url: string; headers?: Record<string, string> };\n\nexport type ResolvedTraceConfig = {\n enabled: boolean;\n mode: \"batched\";\n logData: boolean;\n sink: ResolvedTraceSink;\n};\n\nexport type TraceSessionRuntime = {\n sessionId: string;\n startedAt: number;\n resolvedConfig: ResolvedTraceConfig;\n events: TraceEventRecord[];\n summary: TraceSessionSummary;\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n fileBaseDir?: string;\n fileSessionDir?: string;\n};\n\n// Handoff descriptor returned from childAgent.asHandoff(...)\nexport type HandoffDescriptor<TParsed = any> = {\n type: \"handoff\";\n toolName: string;\n description: string;\n // Optional zod schema for handoff arguments; fallback is { reason: string }\n schema?: ZodSchema<any>;\n target: SmartAgentInstance<TParsed> & { __runtime: AgentRuntimeConfig };\n};\n\n// Base Agent State (minimal)\nexport type AgentState = {\n messages: Message[];\n // Active agent runtime parameters (dynamically swapped on handoff)\n agent?: AgentRuntimeConfig;\n toolHistory?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n }>;\n toolCache?: Record<string, any>;\n toolCallCount?: number;\n metadata?: Record<string, any>;\n ctx?: Record<string, any>;\n pendingApprovals?: PendingToolApproval[];\n // Usage tracking (per agent model call). Each agent turn that produces an AI response\n // appends an entry to usage.perRequest. totals aggregates by modelName.\n usage?: {\n perRequest: Array<{\n id: string; // unique id per request\n modelName: string; // resolved provider/model identifier\n usage: any; // raw provider usage object (unmodified)\n timestamp: string; // ISO time of capture\n turn: number; // 1-based index of agent turn producing this response\n cachedInput?: number; // cached / reused prompt tokens (provider specific)\n }>;\n totals: Record<string, { input: number; output: number; total: number; cachedInput: number }>;\n };\n guardrailResult?: GuardrailOutcome;\n};\n\n// Smart Agent State (extends base with planning & summarization)\nexport type SmartState = AgentState & {\n summaries?: string[];\n toolHistoryArchived?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n }>;\n plan?: { version: number; steps: Array<{ index: number; title: string; status: string }>; lastUpdated?: string } | null;\n planVersion?: number;\n};\n\n// Event types for observability and future streaming support\nexport type ToolCallEvent = {\n type: \"tool_call\";\n phase: \"start\" | \"success\" | \"error\" | \"skipped\";\n name: string;\n id?: string;\n args?: any;\n result?: any;\n error?: { message: string } | undefined;\n durationMs?: number;\n};\n\nexport type PlanEvent = {\n type: \"plan\";\n source: \"manage_todo_list\" | \"system\";\n operation?: \"write\" | \"read\";\n todoList?: Array<{ id: number; title: string; description: string; status: string; evidence?: string }>;\n version?: number;\n};\n\nexport type SummarizationEvent = {\n type: \"summarization\";\n summary: string;\n archivedCount?: number;\n};\n\nexport type FinalAnswerEvent = {\n type: \"finalAnswer\";\n content: string;\n};\n\nexport type MetadataEvent = {\n type: \"metadata\";\n usage?: any;\n modelName?: string;\n limits?: SmartAgentLimits;\n [key: string]: any;\n};\n\nexport type HandoffEvent = {\n type: \"handoff\";\n from?: string;\n to?: string;\n toolName: string;\n};\n\nexport type ToolApprovalStatus = \"pending\" | \"approved\" | \"rejected\" | \"executed\";\n\nexport type PendingToolApproval = {\n id: string;\n toolCallId: string;\n toolName: string;\n args: any;\n status: ToolApprovalStatus;\n requestedAt: string;\n decidedAt?: string;\n decidedBy?: string;\n comment?: string;\n approvedArgs?: any;\n resolvedAt?: string;\n executionId?: string;\n metadata?: Record<string, any>;\n};\n\nexport type ToolApprovalResolution = {\n id: string;\n approved: boolean;\n approvedArgs?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type ToolApprovalEvent = {\n type: \"tool_approval\";\n status: \"pending\" | \"approved\" | \"rejected\";\n id: string;\n toolName: string;\n toolCallId?: string;\n args?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type GuardrailEvent = {\n type: \"guardrail\";\n phase: GuardrailPhase;\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n disposition: GuardrailDisposition;\n reason?: string;\n details?: Record<string, any>;\n};\n\nexport type SmartAgentEvent =\n | ToolCallEvent\n | ToolApprovalEvent\n | PlanEvent\n | SummarizationEvent\n | FinalAnswerEvent\n | MetadataEvent\n | HandoffEvent\n | GuardrailEvent;\n\nexport type InvokeConfig = RunnableConfig & {\n // Optional per-call event hook (overrides SmartAgentOptions.onEvent if provided)\n onEvent?: (event: SmartAgentEvent) => void;\n // Invoked after each major stage; return true to checkpoint execution (state.ctx.__paused will be set).\n onStateChange?: (state: SmartState) => boolean;\n // Optional reason stored alongside checkpoint metadata.\n checkpointReason?: string;\n};\n\nexport type SnapshotRuntimeHint = {\n name?: string;\n version?: string;\n tools?: string[];\n};\n\nexport type SerializableSmartState = Omit<SmartState, \"agent\"> & { agent?: undefined };\n\nexport type AgentSnapshotMetadata = {\n createdAt: string;\n tag?: string;\n paused?: {\n stage?: string;\n iteration?: number;\n reason?: string;\n } | null;\n};\n\nexport type AgentSnapshot = {\n state: SerializableSmartState;\n runtimeHint?: SnapshotRuntimeHint;\n metadata: AgentSnapshotMetadata;\n};\n\nexport type SnapshotOptions = {\n tag?: string;\n includeRuntimeHint?: boolean;\n};\n\nexport type RestoreSnapshotOptions = {\n agent?: AgentRuntimeConfig;\n ctx?: Record<string, any>;\n mergeCtx?: boolean;\n};\n\n// Structured agent result returned by invoke\nexport type AgentInvokeResult<TOutput = unknown> = {\n content: string;\n // If outputSchema is set, this will contain the parsed and validated output.\n // TOutput will be inferred from the provided Zod schema.\n output?: TOutput;\n metadata: { usage?: any };\n messages: Message[];\n state?: SmartState;\n};\n\n// Base Agent instance (minimal)\nexport type AgentInstance<TOutput = unknown> = {\n invoke: (input: SmartState, config?: InvokeConfig) => Promise<AgentInvokeResult<TOutput>>;\n snapshot: (state: SmartState, options?: SnapshotOptions) => AgentSnapshot;\n resume: (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => Promise<AgentInvokeResult<TOutput>>;\n resolveToolApproval: (state: SmartState, resolution: ToolApprovalResolution) => SmartState;\n // Convert this agent into a tool usable by another agent. Accepts optional overrides.\n asTool: (opts: { toolName: string; description?: string; inputDescription?: string } ) => ToolInterface<any, any, any>;\n // Create a handoff descriptor so another agent can switch control to this one mid-conversation\n asHandoff: (opts: { toolName?: string; description?: string; schema?: ZodSchema<any>; }) => HandoffDescriptor<TOutput>;\n __runtime: AgentRuntimeConfig;\n};\n\n// Smart Agent instance (same as AgentInstance for now, but semantically separate)\nexport type SmartAgentInstance<TOutput = unknown> = AgentInstance<TOutput>;\n","import type { SmartState } from \"../types.js\";\n\n// Ensures required state fields exist and normalizes incoming messages\nexport function createResolverNode() {\n return async (state: SmartState): Promise<SmartState> => {\n const messages = Array.isArray(state.messages) ? state.messages : [];\n return {\n ...state,\n messages,\n summaries: state.summaries || [],\n toolCallCount: state.toolCallCount || 0,\n toolCache: state.toolCache || {},\n toolHistory: state.toolHistory || [],\n toolHistoryArchived: state.toolHistoryArchived || [],\n pendingApprovals: state.pendingApprovals || [],\n plan: state.plan || null,\n planVersion: state.planVersion || 0,\n } as SmartState;\n };\n}\n","// Normalizes provider-specific usage objects into a common shape.\n// Target shape:\n// {\n// prompt_tokens: number;\n// completion_tokens: number;\n// total_tokens: number;\n// prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n// completion_tokens_details: { reasoning_tokens: number; audio_tokens: number; accepted_prediction_tokens: number; rejected_prediction_tokens: number };\n// raw?: any; // original provider usage\n// }\n\nexport type NormalizedUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n completion_tokens_details: {\n reasoning_tokens: number;\n audio_tokens: number;\n accepted_prediction_tokens: number;\n rejected_prediction_tokens: number;\n };\n raw?: any;\n};\n\nexport function normalizeUsage(raw: any | undefined | null): NormalizedUsage | undefined {\n if (!raw) return undefined;\n // Canonical numeric fields from various provider key aliases.\n const prompt = num(raw.prompt_tokens, raw.input_tokens, raw.promptTokens, raw.total_prompt_tokens);\n const completion = num(raw.completion_tokens, raw.output_tokens, raw.completionTokens, raw.total_completion_tokens);\n // total might be explicitly provided or computed.\n const total = num(\n raw.total_tokens,\n raw.totalTokens,\n (typeof prompt === 'number' ? prompt : 0) + (typeof completion === 'number' ? completion : 0)\n );\n\n // Details: attempt to pull from common nested spots else zeros\n const promptDetailsSrc = raw.prompt_tokens_details || raw.promptTokensDetails || {};\n const completionDetailsSrc = raw.completion_tokens_details || raw.completionTokensDetails || {};\n\n const normalized: NormalizedUsage = {\n prompt_tokens: safe(prompt),\n completion_tokens: safe(completion),\n total_tokens: safe(total || (prompt || 0) + (completion || 0)),\n prompt_tokens_details: {\n cached_tokens: safe(\n promptDetailsSrc.cached_tokens || promptDetailsSrc.cached || raw.cached_input_tokens || raw.cached_prompt_tokens\n ),\n audio_tokens: safe(promptDetailsSrc.audio_tokens),\n },\n completion_tokens_details: {\n reasoning_tokens: safe(completionDetailsSrc.reasoning_tokens),\n audio_tokens: safe(completionDetailsSrc.audio_tokens),\n accepted_prediction_tokens: safe(completionDetailsSrc.accepted_prediction_tokens),\n rejected_prediction_tokens: safe(completionDetailsSrc.rejected_prediction_tokens),\n },\n raw,\n };\n return normalized;\n}\n\nfunction num(...vals: any[]): number | undefined {\n for (const v of vals) {\n if (v === 0) return 0;\n if (v == null) continue;\n const n = Number(v);\n if (!Number.isNaN(n)) return n;\n }\n return undefined;\n}\nfunction safe(v: any): number { const n = Number(v); return Number.isFinite(n) && n >= 0 ? n : 0; }\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Buffer } from \"node:buffer\";\nimport { nanoid } from \"nanoid\";\nimport type {\n AgentRuntimeConfig,\n ResolvedTraceConfig,\n ResolvedTraceSink,\n SmartAgentOptions,\n SmartAgentTracingConfig,\n TraceDataSection,\n TraceEventRecord,\n TraceSessionConfigSnapshot,\n TraceSessionFile,\n TraceSessionRuntime,\n TraceSessionStatus,\n TraceSessionSummary,\n TraceSinkConfig,\n TraceSinkSnapshot,\n TraceToolCallSection,\n} from \"../types.js\";\n\nconst DEFAULT_COGNIPEER_URL = \"https://api.cognipeer.com/v1/client/tracing/sessions\";\n\nexport function fileSink(path?: string): TraceSinkConfig {\n return { type: \"file\", path };\n}\n\ntype CustomSinkArg =\n | ((event: TraceEventRecord) => void | Promise<void>)\n | {\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n };\n\nexport function customSink(handler: CustomSinkArg): TraceSinkConfig {\n if (typeof handler === \"function\") {\n return { type: \"custom\", onEvent: handler };\n }\n return {\n type: \"custom\",\n onEvent: typeof handler?.onEvent === \"function\" ? handler.onEvent : undefined,\n onSession: typeof handler?.onSession === \"function\" ? handler.onSession : undefined,\n };\n}\n\nexport function cognipeerSink(apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(url: string | undefined, apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(first: string | undefined, second?: string): TraceSinkConfig {\n if (second === undefined) {\n const apiKey = first ?? \"\";\n return { type: \"cognipeer\", apiKey };\n }\n const url = typeof first === \"string\" && first.trim().length > 0 ? first.trim() : undefined;\n return { type: \"cognipeer\", url, apiKey: second };\n}\n\nexport function httpSink(url: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"http\", url, headers };\n}\nfunction resolveLogsBaseDir(customPath?: string, ensureDirectory = true) {\n const root = process.cwd();\n const base = customPath && customPath.trim().length > 0 ? customPath : path.join(root, \"logs\");\n if (ensureDirectory) {\n ensureDir(base);\n }\n return base;\n}\n\nfunction coerceToString(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"function\" && value.length === 0) {\n try {\n return coerceToString((value as () => unknown)());\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n const normalized = coerceToString(item);\n if (normalized) return normalized;\n }\n return undefined;\n }\n return undefined;\n}\n\nfunction firstNonEmptyString(...candidates: Array<unknown>): string | undefined {\n for (const candidate of candidates) {\n const normalized = coerceToString(candidate);\n if (normalized) return normalized;\n }\n return undefined;\n}\n\nexport function getModelName(model: any): string | undefined {\n if (!model) return undefined;\n\n const maybeLc = model?._lc;\n const direct = firstNonEmptyString(\n model?.model,\n model?.options?.model,\n model?.params?.model,\n model?.config?.model,\n model?.configuration?.model,\n model?.metadata?.model,\n model?.lc_kwargs?.model,\n maybeLc?.model,\n maybeLc?.options?.model,\n maybeLc?.params?.model,\n maybeLc?.config?.model,\n maybeLc?.configuration?.model,\n maybeLc?.metadata?.model,\n maybeLc?.lc_kwargs?.model,\n model?.metadata?.modelName,\n maybeLc?.metadata?.modelName,\n model?.modelName,\n maybeLc?.modelName,\n model?.lc_alias,\n model?.model_id,\n model?.id,\n maybeLc?.model_id,\n maybeLc?.id,\n model?._model,\n model?._modelName,\n model?.__model\n );\n if (direct) return direct;\n\n const maybeClient = model?.client || model?.api || model?.service;\n const clientValue = firstNonEmptyString(\n maybeClient?.model,\n maybeClient?.config?.model,\n maybeClient?.options?.model,\n maybeClient?.default?.model\n );\n if (clientValue) return clientValue;\n\n const fnNames = firstNonEmptyString(model?._modelId, model?._llmType, maybeLc?._modelId, maybeLc?._llmType, model?.constructor?.name);\n return fnNames;\n}\n\nexport function getProviderName(model: any): string | undefined {\n if (!model) return undefined;\n\n const direct = firstNonEmptyString(\n model?.provider,\n model?.options?.provider,\n model?.params?.provider,\n model?.config?.provider,\n model?.configuration?.provider,\n model?.metadata?.provider,\n model?.lc_kwargs?.provider,\n model?.lc_alias,\n model?.__provider\n );\n if (direct) return direct;\n\n const maybeLc = model?._lc;\n const lcValue = maybeLc\n ? firstNonEmptyString(\n maybeLc?.provider,\n maybeLc?.options?.provider,\n maybeLc?.config?.provider,\n maybeLc?.configuration?.provider,\n maybeLc?.metadata?.provider,\n maybeLc?.lc_kwargs?.provider,\n maybeLc?.client?.config?.provider\n )\n : undefined;\n if (lcValue) return lcValue;\n\n const maybeClient = model?.client || model?.api || model?.service;\n return firstNonEmptyString(\n maybeClient?.provider,\n maybeClient?.config?.provider,\n maybeClient?.options?.provider,\n maybeClient?.metadata?.provider\n );\n}\n\nfunction inferModelFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n for (let i = messageList.length - 1; i >= 0; i -= 1) {\n const message = messageList[i];\n if (!message) continue;\n const candidate = firstNonEmptyString(\n message?.metadata?.model,\n message?.metadata?.modelName,\n message?.metadata?.modelNames,\n message?.metadata?.model_id,\n message?.response_metadata?.model,\n message?.response_metadata?.modelName,\n message?.response_metadata?.modelNames,\n message?.response_metadata?.model_id,\n message?.usage_metadata?.model,\n message?.model,\n message?.modelName,\n message?.model_id,\n message?.additional_kwargs?.model,\n message?.additional_kwargs?.modelName,\n message?.info?.model,\n message?.annotations?.model\n );\n if (candidate) return candidate;\n }\n return undefined;\n}\n\nfunction inferProviderFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n for (let i = messageList.length - 1; i >= 0; i -= 1) {\n const message = messageList[i];\n if (!message) continue;\n const candidate = firstNonEmptyString(\n message?.metadata?.provider,\n message?.metadata?.providers,\n message?.response_metadata?.provider,\n message?.response_metadata?.providers,\n message?.usage_metadata?.provider,\n message?.provider,\n message?.additional_kwargs?.provider,\n message?.info?.provider,\n message?.annotations?.provider\n );\n if (candidate) return candidate;\n }\n return undefined;\n}\n\nconst DEFAULT_TRACE_CONFIG = {\n enabled: false,\n logData: true,\n} as const;\n\nfunction ensureDir(p: string) {\n if (!fs.existsSync(p)) {\n fs.mkdirSync(p, { recursive: true });\n }\n}\n\nfunction withDefaults(config?: SmartAgentTracingConfig): ResolvedTraceConfig {\n const enabled = Boolean(config?.enabled);\n const logData = config?.logData ?? DEFAULT_TRACE_CONFIG.logData;\n\n let sink: ResolvedTraceSink;\n try {\n sink = resolveSink(config?.sink);\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Invalid tracing sink configuration. Falling back to file sink.\", err);\n }\n sink = resolveSink({ type: \"file\" });\n }\n\n return {\n enabled,\n logData,\n mode: \"batched\",\n sink,\n };\n}\n\nfunction resolveSink(sink?: TraceSinkConfig): ResolvedTraceSink {\n const candidate = sink ?? { type: \"file\" };\n switch (candidate.type) {\n case \"file\": {\n const baseDir = resolveLogsBaseDir(candidate.path, false);\n return { type: \"file\", baseDir };\n }\n case \"custom\": {\n const onEvent = typeof candidate.onEvent === \"function\" ? candidate.onEvent : undefined;\n const onSession = typeof candidate.onSession === \"function\" ? candidate.onSession : undefined;\n return { type: \"custom\", onEvent, onSession };\n }\n case \"cognipeer\": {\n const apiKey = typeof candidate.apiKey === \"string\" ? candidate.apiKey.trim() : \"\";\n if (!apiKey) {\n throw new Error(\"cognipeer sink requires a non-empty apiKey\");\n }\n const url = typeof candidate.url === \"string\" && candidate.url.trim().length > 0\n ? candidate.url.trim()\n : DEFAULT_COGNIPEER_URL;\n return { type: \"cognipeer\", url, apiKey };\n }\n case \"http\": {\n const url = typeof candidate.url === \"string\" ? candidate.url.trim() : \"\";\n if (!url) {\n throw new Error(\"http sink requires a non-empty url\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"http\", url, headers } : { type: \"http\", url };\n }\n default: {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Unknown tracing sink type. Falling back to file sink.\", candidate);\n }\n return resolveSink({ type: \"file\" });\n }\n }\n}\n\nfunction snapshotSink(runtime: TraceSessionRuntime): TraceSinkSnapshot {\n const sink = runtime.resolvedConfig.sink;\n switch (sink.type) {\n case \"file\":\n return { type: \"file\", path: runtime.fileBaseDir || sink.baseDir };\n case \"custom\":\n return { type: \"custom\" };\n case \"cognipeer\":\n return { type: \"cognipeer\", url: sink.url };\n case \"http\":\n return { type: \"http\", url: sink.url };\n default:\n return { type: \"custom\" };\n }\n}\n\nfunction buildConfigSnapshot(runtime: TraceSessionRuntime): TraceSessionConfigSnapshot {\n return {\n enabled: runtime.resolvedConfig.enabled,\n logData: runtime.resolvedConfig.logData,\n sink: snapshotSink(runtime),\n };\n}\n\nasync function postTraceSession(\n url: string,\n headers: Record<string, string> | undefined,\n payload: TraceSessionFile\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n throw new Error(`${statusLine}${bodyPreview}`);\n }\n}\n\nfunction createEmptySummary(): TraceSessionSummary {\n return {\n totalDurationMs: 0,\n totalInputTokens: 0,\n totalOutputTokens: 0,\n totalCachedInputTokens: 0,\n totalBytesIn: 0,\n totalBytesOut: 0,\n eventCounts: {},\n };\n}\n\nfunction generateSessionId(): string {\n return `sess_${nanoid(18)}`;\n}\n\nfunction generateEventId(sequence: number): string {\n return `evt_${String(sequence).padStart(4, \"0\")}_${nanoid(4)}`;\n}\n\nfunction defaultEventLabel(type: string): string {\n switch (type) {\n case \"ai_call\":\n return \"Assistant Response\";\n case \"tool_call\":\n return \"Tool Execution\";\n case \"session\":\n return \"Session Event\";\n default:\n return type.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n\nfunction ensureUniqueSections(eventId: string, sections?: TraceDataSection[]): TraceDataSection[] | undefined {\n if (!sections || sections.length === 0) return undefined;\n const labelCounts = new Map<string, number>();\n const normalized: TraceDataSection[] = [];\n let counter = 1;\n\n for (const section of sections) {\n const baseLabel = section.label?.trim().length ? section.label.trim() : defaultSectionLabel(section.kind);\n const nextCount = (labelCounts.get(baseLabel) || 0) + 1;\n labelCounts.set(baseLabel, nextCount);\n const finalLabel = nextCount > 1 ? `${baseLabel} (${nextCount})` : baseLabel;\n\n let id = section.id?.trim();\n if (!id) {\n id = `${section.kind}-${eventId}-${String(counter).padStart(2, \"0\")}`;\n }\n counter += 1;\n\n normalized.push({\n ...section,\n id,\n label: finalLabel,\n } as TraceDataSection);\n }\n\n return normalized;\n}\n\nfunction defaultSectionLabel(kind: TraceDataSection[\"kind\"]): string {\n switch (kind) {\n case \"message\":\n return \"Message\";\n case \"tool_call\":\n return \"Tool Call\";\n case \"tool_result\":\n return \"Tool Result\";\n case \"tool_response\":\n return \"Tool Response\";\n case \"summary\":\n return \"Summary\";\n case \"metadata\":\n return \"Details\";\n default:\n return \"Section\";\n }\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalized = role?.trim().length ? role.trim() : \"message\";\n const base = `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nfunction toDisplayString(value: any): string {\n const sanitized = sanitizeTracePayload(value);\n if (sanitized == null) return \"\";\n if (typeof sanitized === \"string\") return sanitized;\n if (Array.isArray(sanitized)) {\n return sanitized\n .map((item) => toDisplayString(item))\n .filter((part) => part && part.trim().length > 0)\n .join(\"\\n\");\n }\n if (typeof sanitized === \"object\") {\n if (typeof (sanitized as any).text === \"string\" && Object.keys(sanitized).length === 1) {\n return (sanitized as any).text;\n }\n if (typeof (sanitized as any).content === \"string\") {\n return (sanitized as any).content;\n }\n try {\n return JSON.stringify(sanitized, null, 2);\n } catch {\n return String(sanitized);\n }\n }\n return String(sanitized);\n}\n\nfunction parseToolArguments(args: any): any {\n if (args == null) return undefined;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction collectToolCallSectionsFromMessage(message: any): TraceToolCallSection[] {\n const sections: TraceToolCallSection[] = [];\n if (!message) return sections;\n\n const addCall = (call: any) => {\n if (!call) return;\n const toolName = call?.name || call?.tool || call?.function?.name || call?.function_call?.name || \"tool\";\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseToolArguments(rawArgs);\n const argumentsPayload = sanitizeTracePayload(parsedArgs ?? rawArgs ?? {});\n sections.push({\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: argumentsPayload,\n });\n };\n\n const directCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : undefined;\n if (directCalls) {\n directCalls.forEach((call: any) => addCall(call));\n }\n\n return sections;\n}\n\nfunction convertMessageListToSections(messageList?: any[]): TraceDataSection[] | undefined {\n if (!Array.isArray(messageList) || messageList.length === 0) return undefined;\n const sections: TraceDataSection[] = [];\n const roleCounts = new Map<string, number>();\n\n for (const message of messageList) {\n if (!message) continue;\n\n const toolSections = collectToolCallSectionsFromMessage(message);\n if (toolSections.length > 0) {\n sections.push(...toolSections);\n continue;\n }\n\n const role = typeof message?.role === \"string\" ? message.role : \"assistant\";\n const next = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, next);\n\n let content = toDisplayString(message?.content ?? \"\");\n if (!content || !content.trim().length) {\n if (toolSections.length > 0) {\n content = \"[tool call]\";\n } else if (typeof message?.content === \"undefined\" || message?.content === null) {\n continue;\n } else {\n content = toDisplayString(sanitizeTracePayload(message?.content));\n if (!content || !content.trim().length) continue;\n }\n }\n\n sections.push({\n kind: \"message\",\n label: buildMessageLabel(role, next),\n role,\n content,\n metadata: typeof message?.name === \"string\" ? { name: message.name } : undefined,\n });\n }\n\n return sections.length > 0 ? sections : undefined;\n}\n\nexport function createTraceSession(opts: SmartAgentOptions): TraceSessionRuntime | undefined {\n const cfg = withDefaults(opts.tracing);\n if (!cfg.enabled) return undefined;\n\n const sessionId = generateSessionId();\n const runtime: TraceSessionRuntime = {\n sessionId,\n startedAt: Date.now(),\n resolvedConfig: cfg,\n events: [],\n summary: createEmptySummary(),\n status: \"in_progress\",\n errors: [],\n };\n\n if (cfg.sink.type === \"file\") {\n const baseDir = cfg.sink.baseDir;\n ensureDir(baseDir);\n const sessionDir = path.join(baseDir, sessionId);\n ensureDir(sessionDir);\n runtime.fileBaseDir = baseDir;\n runtime.fileSessionDir = sessionDir;\n }\n\n return runtime;\n}\n\nexport function recordTraceEvent(\n session: TraceSessionRuntime | undefined,\n event: {\n type: string;\n label?: string;\n timestamp?: string;\n actor?: TraceEventRecord[\"actor\"];\n status?: TraceEventRecord[\"status\"];\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n messageList?: any[];\n debug?: Record<string, any>;\n }\n): TraceEventRecord | undefined {\n if (!session) return undefined;\n\n\n const sequence = session.events.length + 1;\n const id = generateEventId(sequence);\n const timestampIso = event.timestamp || new Date().toISOString();\n const status = event.status ?? \"success\";\n const baseLabel = event.label?.trim().length ? event.label.trim() : defaultEventLabel(event.type);\n const eventLabel = `${baseLabel} #${sequence}`;\n\n const durationMs = event.durationMs !== undefined ? Number(event.durationMs) : undefined;\n if (!Number.isNaN(durationMs ?? NaN) && durationMs !== undefined) {\n session.summary.totalDurationMs += durationMs;\n }\n\n const inputTokens = event.inputTokens !== undefined ? Number(event.inputTokens) : undefined;\n if (!Number.isNaN(inputTokens ?? NaN) && inputTokens !== undefined) {\n session.summary.totalInputTokens += inputTokens;\n }\n\n const outputTokens = event.outputTokens !== undefined ? Number(event.outputTokens) : undefined;\n if (!Number.isNaN(outputTokens ?? NaN) && outputTokens !== undefined) {\n session.summary.totalOutputTokens += outputTokens;\n }\n\n const cachedInputTokens = event.cachedInputTokens !== undefined ? Number(event.cachedInputTokens) : undefined;\n if (!Number.isNaN(cachedInputTokens ?? NaN) && cachedInputTokens !== undefined) {\n session.summary.totalCachedInputTokens += cachedInputTokens;\n }\n\n const totalTokens = event.totalTokens !== undefined ? Number(event.totalTokens) : undefined;\n const requestBytes = event.requestBytes !== undefined ? Number(event.requestBytes) : undefined;\n if (!Number.isNaN(requestBytes ?? NaN) && requestBytes !== undefined) {\n session.summary.totalBytesIn += requestBytes;\n }\n\n const responseBytes = event.responseBytes !== undefined ? Number(event.responseBytes) : undefined;\n if (!Number.isNaN(responseBytes ?? NaN) && responseBytes !== undefined) {\n session.summary.totalBytesOut += responseBytes;\n }\n\n session.summary.eventCounts[event.type] = (session.summary.eventCounts[event.type] || 0) + 1;\n\n let sections: TraceDataSection[] | undefined;\n if (session.resolvedConfig.logData) {\n const converted = convertMessageListToSections(event.messageList);\n sections = ensureUniqueSections(id, converted);\n }\n\n const resolvedModel = event.model ?? inferModelFromMessages(event.messageList);\n const resolvedProvider = event.provider ?? inferProviderFromMessages(event.messageList);\n\n // For ai_call events, always include token fields (even if undefined/0) for consistency\n const isAiCall = event.type === \"ai_call\";\n \n const record: TraceEventRecord = {\n sessionId: session.sessionId,\n id,\n type: event.type,\n label: eventLabel,\n sequence,\n timestamp: timestampIso,\n actor: event.actor,\n status,\n durationMs,\n ...(isAiCall ? {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n totalTokens: totalTokens ?? 0,\n cachedInputTokens: cachedInputTokens ?? 0,\n } : {\n ...(inputTokens !== undefined && { inputTokens }),\n ...(outputTokens !== undefined && { outputTokens }),\n ...(totalTokens !== undefined && { totalTokens }),\n ...(cachedInputTokens !== undefined && { cachedInputTokens }),\n }),\n requestBytes,\n responseBytes,\n model: resolvedModel,\n provider: resolvedProvider,\n toolExecutionId: event.toolExecutionId,\n retryOf: event.retryOf,\n error: event.error ?? (status === \"error\" ? { message: \"Unknown error\" } : undefined) ?? undefined,\n data: sections ? { sections } : undefined,\n debug: event.debug,\n };\n\n if (status === \"error\") {\n const errorInfo = event.error ?? { message: \"Unknown error\" };\n session.errors.push({\n eventId: id,\n message: errorInfo.message,\n stack: errorInfo.stack,\n type: event.type,\n timestamp: timestampIso,\n });\n }\n\n session.events.push(record);\n const sink = session.resolvedConfig.sink;\n if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(record));\n const result = sink.onEvent(cloned);\n if (result && typeof (result as PromiseLike<void>).then === \"function\") {\n (result as PromiseLike<void>).then(undefined, (error: unknown) => {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent rejected\", error);\n }\n });\n }\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent failed\", err);\n }\n }\n }\n return record;\n}\n\nexport async function finalizeTraceSession(session: TraceSessionRuntime | undefined, params: {\n agentRuntime?: AgentRuntimeConfig;\n status?: TraceSessionStatus;\n error?: { message?: string; stack?: string } | null;\n} = {}): Promise<TraceSessionFile | undefined> {\n if (!session) return undefined;\n\n const endedAtMs = Date.now();\n const endedAtIso = new Date(endedAtMs).toISOString();\n const durationMs = endedAtMs - session.startedAt;\n const startedAtIso = new Date(session.startedAt).toISOString();\n\n const agentInfo = params.agentRuntime\n ? {\n name: params.agentRuntime.name,\n version: params.agentRuntime.version,\n model: getModelName(params.agentRuntime.model),\n provider: getProviderName(params.agentRuntime.model),\n }\n : undefined;\n\n if (params.error) {\n session.errors.push({\n eventId: \"session\",\n message: params.error.message || \"Unknown error\",\n stack: params.error.stack,\n type: \"session\",\n timestamp: endedAtIso,\n });\n }\n\n const configSnapshot = buildConfigSnapshot(session);\n const initialStatus: TraceSessionStatus = params.status\n ? params.status\n : session.errors.length > 0\n ? \"error\"\n : \"success\";\n\n const buildPayload = (status: TraceSessionStatus): TraceSessionFile => ({\n sessionId: session.sessionId,\n startedAt: startedAtIso,\n endedAt: endedAtIso,\n durationMs,\n agent: agentInfo,\n config: configSnapshot,\n summary: session.summary,\n events: session.events,\n status,\n errors: session.errors,\n });\n\n const payloadForSink = buildPayload(initialStatus);\n let sinkFailed = false;\n const sink = session.resolvedConfig.sink;\n\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n await postTraceSession(sink.url, headers, payloadForSink);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n }\n\n const hadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n let status: TraceSessionStatus = params.status ?? (hadNonSinkErrors ? \"error\" : \"success\");\n if (status === \"success\" && sinkFailed) {\n status = \"partial\";\n }\n\n let finalPayload = buildPayload(status);\n\n if (sink.type === \"file\" && session.fileSessionDir) {\n try {\n const filePath = path.join(session.fileSessionDir, \"trace.session.json\");\n await fs.promises.writeFile(filePath, JSON.stringify(finalPayload, null, 2), \"utf8\");\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (sink.type === \"custom\" && typeof sink.onSession === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(finalPayload));\n await sink.onSession(cloned);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (!params.status) {\n const finalHadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hasSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let computedStatus: TraceSessionStatus = finalHadNonSinkErrors ? \"error\" : \"success\";\n if (computedStatus === \"success\" && hasSinkErrors) {\n computedStatus = \"partial\";\n }\n if (computedStatus !== status) {\n status = computedStatus;\n finalPayload = buildPayload(status);\n }\n }\n\n return finalPayload;\n}\n\nexport type { ResolvedTraceConfig };\n\nexport function sanitizeTracePayload(value: any): any {\n try {\n const cache = new WeakSet();\n const json = JSON.stringify(\n value,\n (_key, val) => {\n if (typeof val === \"function\") return `[Function ${val.name || \"anonymous\"}]`;\n if (typeof val === \"bigint\") return val.toString();\n if (val instanceof Error) return { message: val.message, stack: val.stack };\n if (val && typeof val === \"object\") {\n if (cache.has(val)) return \"[Circular]\";\n cache.add(val);\n }\n return val;\n },\n 2\n );\n return JSON.parse(json);\n } catch {\n try {\n return typeof value === \"string\" ? value : String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n\nexport function estimatePayloadBytes(value: any): number {\n try {\n const json = JSON.stringify(value);\n return Buffer.byteLength(json ?? \"\", \"utf8\");\n } catch {\n try {\n return Buffer.byteLength(String(value ?? \"\"), \"utf8\");\n } catch {\n return 0;\n }\n }\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\n// Minimal agent node: no system prompt injection. Invokes model with messages as-is.\nexport function createAgentCoreNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n guardrails: (opts as any).guardrails,\n systemPrompt: undefined,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: (opts as any).outputSchema,\n tracing: opts.tracing,\n };\n\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(state.messages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n // Bedrock (Claude) requires strict tool_use -> tool_result adjacency.\n // We both normalize (insert placeholder tool_result if missing) and log a compact dump.\n const extractToolUses = (m: any): Array<{ id: string; name?: string }> => {\n const tcs = m?.tool_calls || m?.additional_kwargs?.tool_calls;\n if (!Array.isArray(tcs)) return [];\n return tcs\n .map((tc: any) => ({ id: tc?.id, name: tc?.function?.name || tc?.name }))\n .filter((x: any) => typeof x.id === \"string\" && x.id.length > 0);\n };\n\n const normalizeBedrockToolPairing = (input: any[]): any[] => {\n const msgs = Array.isArray(input) ? [...input] : [];\n for (let i = 0; i < msgs.length; i++) {\n const m = msgs[i];\n if (m?.role !== \"assistant\") continue;\n\n const toolUses = extractToolUses(m);\n if (toolUses.length === 0) continue;\n\n // Bedrock expects exactly one \"next message\" containing the corresponding tool_result blocks.\n // In our message format we represent tool_result as role:'tool' messages with tool_call_id.\n // If the next message isn't a tool result for the first tool_use id, insert placeholders.\n const next = msgs[i + 1];\n\n // If next is a tool message for the first id, we assume pairing is okay and let downstream validate.\n const firstId = toolUses[0]?.id;\n const nextIsToolForFirst = !!(next && next.role === \"tool\" && next.tool_call_id === firstId);\n if (nextIsToolForFirst) continue;\n\n // Insert placeholder tool results for all tool uses on this assistant turn.\n const placeholders = toolUses.map((tu) => ({\n role: \"tool\",\n name: tu.name || \"unknown_tool\",\n tool_call_id: tu.id,\n content: \"SUMMARIZED/DEFERRED: tool result missing in transcript; inserted placeholder for Bedrock tool_result adjacency.\",\n }));\n msgs.splice(i + 1, 0, ...placeholders);\n\n // Skip over inserted placeholders\n i += placeholders.length;\n }\n return msgs;\n };\n\n const debugToolPairing = (messagesToSend: any[]) => {\n try {\n const msgs: any[] = Array.isArray(messagesToSend) ? messagesToSend : [];\n const toolUseIds: string[] = [];\n const missingResults: Array<{ id: string; atIndex: number; tool?: string }> = [];\n\n for (let i = 0; i < msgs.length; i++) {\n const m = msgs[i];\n if (m?.role === \"assistant\") {\n for (const tu of extractToolUses(m)) {\n toolUseIds.push(tu.id);\n const next = msgs[i + 1];\n if (!(next && next.role === \"tool\" && (next.tool_call_id === tu.id || next.tool_call_id === m?.tool_call_id))) {\n missingResults.push({ id: tu.id, atIndex: i, tool: tu.name });\n }\n }\n }\n }\n\n } catch (e) {\n // Debug tool pairing failed silently\n }\n };\n\n let response: any;\n try {\n const normalizedMessages = normalizeBedrockToolPairing([...(state.messages as any[])]);\n debugToolPairing(normalizedMessages);\n response = await modelWithTools.invoke(normalizedMessages);\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: state.messages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...state.messages,\n response as any,\n ];\n\n // Usage tracking (per-request, aggregated by model)\n const rawUsage = (response as any)?.usage || (response as any)?.response_metadata?.token_usage || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const durationMs = Date.now() - start;\n\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes: responseBytes,\n model: modelName,\n provider: getProviderName((runtime as any).model || (opts as any).model),\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details?.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type {\n SmartAgentEvent,\n SmartAgentOptions,\n SmartState,\n AgentRuntimeConfig,\n ToolInterface,\n Message,\n PendingToolApproval,\n} from \"../types.js\";\nimport { nanoid } from \"nanoid\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes } from \"../utils/tracing.js\";\n\nexport function createToolsNode(initialTools: Array<ToolInterface<any, any, any>>, opts?: SmartAgentOptions) {\n const baseToolByName = new Map<string, ToolInterface>();\n for (const t of initialTools) baseToolByName.set((t as any).name, t);\n\n return async (state: SmartState): Promise<any> => {\n const runtime = state.agent || {\n name: opts?.name,\n model: opts?.model,\n tools: initialTools,\n limits: opts?.limits,\n systemPrompt: opts?.systemPrompt,\n useTodoList: opts?.useTodoList,\n outputSchema: (opts as any)?.outputSchema,\n } as AgentRuntimeConfig;\n const activeTools: Array<ToolInterface<any, any, any>> = runtime.tools as any;\n const toolByName = new Map<string, ToolInterface>();\n for (const t of activeTools) toolByName.set((t as any).name, t);\n const limits = {\n maxToolCalls: (runtime.limits?.maxToolCalls ?? 10) as number,\n maxParallelTools: Math.max(1, (runtime.limits?.maxParallelTools ?? 1) as number),\n };\n const appended: Message[] = [];\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n const pendingApprovals: PendingToolApproval[] = Array.isArray(state.pendingApprovals)\n ? state.pendingApprovals.map((entry) => ({ ...entry }))\n : [];\n const pendingByCallId = new Map(pendingApprovals.map((entry) => [entry.toolCallId, entry]));\n let awaitingApproval = false;\n // Sync latest state into context tools if they carry a stateRef\n for (const t of toolByName.values()) {\n const anyT: any = t as any;\n if (anyT._stateRef && typeof anyT._stateRef === \"object\") {\n anyT._stateRef.toolHistory = state.toolHistory;\n anyT._stateRef.toolHistoryArchived = state.toolHistoryArchived;\n anyT._stateRef.__onEvent = onEvent;\n }\n }\n const last = state.messages[state.messages.length - 1] as any;\n let toolCount = state.toolCallCount || 0;\n const toolCalls: Array<{ id?: string; name: string; args: any }> = Array.isArray(\n last?.tool_calls\n )\n ? last.tool_calls\n : [];\n\n\n const toolHistory = state.toolHistory || [];\n // Enforce global maxToolCalls across turns\n const remaining = Math.max(0, limits.maxToolCalls - toolCount);\n const planned = toolCalls.slice(0, remaining);\n const skipped = toolCalls.slice(remaining);\n\n // Emit immediate messages for any skipped due to limit\n for (const tc of skipped) {\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: tc.name, id: tc.id, args: tc.args });\n const sanitizedArgs = sanitizeTracePayload(tc.args);\n const messageList = [\n {\n role: \"assistant\",\n name: tc.name,\n content: `Skipped tool due to tool-call limit: ${tc.name}`,\n tool_calls: [\n {\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${tc.name}`,\n actor: { scope: \"tool\", name: tc.name, role: \"tool\" },\n status: \"skipped\",\n toolExecutionId: tc.id,\n messageList,\n });\n appended.push({\n role: \"tool\",\n content: `Skipped tool due to tool-call limit: ${tc.name}`,\n tool_call_id: tc.id || `${tc.name}_${appended.length}`,\n name: tc.name,\n });\n }\n\n type ToolExecutionResult =\n | { status: \"success\" | \"error\"; approval?: PendingToolApproval }\n | { status: \"awaiting_approval\" | \"rejected\"; approval: PendingToolApproval };\n\n // Helper to run a single tool call\n const runOne = async (tc: { id?: string; name: string; args: any }): Promise<ToolExecutionResult> => {\n const t = toolByName.get(tc.name);\n if (!t) {\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args: tc.args, error: { message: \"Tool not found\" } });\n appended.push({\n role: \"tool\",\n content: `Tool not found: ${tc.name}`,\n tool_call_id: tc.id || `${tc.name}_${appended.length}`,\n name: tc.name,\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n let args: any = tc.args;\n if (typeof args === \"string\") {\n try { args = JSON.parse(args); } catch (_) { /* keep as string */ }\n }\n const toolCallId = tc.id || `${tc.name}_${toolCount + 1}`;\n let approvalEntry = pendingByCallId.get(toolCallId);\n const needsApproval = Boolean((t as any).needsApproval);\n if (needsApproval) {\n if (!approvalEntry) {\n approvalEntry = {\n id: nanoid(),\n toolCallId,\n toolName: (t as any).name || tc.name,\n args,\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n metadata: (t as any).approvalPrompt || (t as any).approvalDefaults\n ? { prompt: (t as any).approvalPrompt, defaults: (t as any).approvalDefaults }\n : undefined,\n };\n pendingApprovals.push(approvalEntry);\n pendingByCallId.set(toolCallId, approvalEntry);\n onEvent?.({ type: \"tool_approval\", status: \"pending\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, args });\n } else if (!approvalEntry.args) {\n approvalEntry.args = args;\n }\n\n if (approvalEntry.status === \"pending\") {\n awaitingApproval = true;\n const ctx = (state.ctx = state.ctx || {});\n ctx.__awaitingApproval = {\n approvalId: approvalEntry.id,\n toolCallId: approvalEntry.toolCallId,\n toolName: approvalEntry.toolName,\n requestedAt: approvalEntry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n return { status: \"awaiting_approval\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"rejected\") {\n const rejectionMessage = approvalEntry.comment || \"Tool call rejected by reviewer.\";\n appended.push({\n role: \"tool\",\n content: `Tool call rejected: ${rejectionMessage}`,\n tool_call_id: toolCallId,\n name: tc.name,\n });\n onEvent?.({ type: \"tool_approval\", status: \"rejected\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, comment: approvalEntry.comment, decidedBy: approvalEntry.decidedBy });\n approvalEntry.metadata = { ...(approvalEntry.metadata || {}), resolution: \"rejected\" };\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n toolHistory.push({ executionId: nanoid(), toolName: (t as any).name, args, output: `Rejected: ${rejectionMessage}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n pendingByCallId.set(toolCallId, approvalEntry);\n toolCount += 1;\n return { status: \"rejected\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"approved\") {\n if (approvalEntry.approvedArgs !== undefined) {\n args = approvalEntry.approvedArgs;\n }\n onEvent?.({ type: \"tool_approval\", status: \"approved\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, decidedBy: approvalEntry.decidedBy, comment: approvalEntry.comment });\n }\n }\n const start = Date.now();\n try {\n onEvent?.({ type: \"tool_call\", phase: \"start\", name: (t as any).name, id: tc.id, args });\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n let output: any;\n const anyTool = t as any;\n if (typeof anyTool.func === \"function\") output = await anyTool.func(args);\n else if (typeof anyTool.invoke === \"function\") output = await anyTool.invoke(args);\n else if (typeof anyTool.call === \"function\") output = await anyTool.call(args);\n else if (typeof anyTool._call === \"function\") output = await anyTool._call(args);\n else if (typeof anyTool.run === \"function\") output = await anyTool.run(args);\n else throw new Error(\"Tool is not invokable\");\n // Detect handoff signature output: we decide that a handoff tool returns { __handoff: AgentRuntimeConfig }\n if (output && typeof output === 'object' && output.__handoff && output.__handoff.runtime) {\n const newRuntime: AgentRuntimeConfig = output.__handoff.runtime;\n // switch active agent; messages unchanged except we reply ok\n const executionId = nanoid();\n toolHistory.push({ executionId, toolName: (t as any).name, args, output: 'handoff:ok', rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n appended.push({ role: \"tool\", content: 'ok', tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: 'handoff', from: runtime.name, to: newRuntime.name, toolName: (t as any).name });\n state.agent = newRuntime;\n onEvent?.({ type: 'tool_call', phase: 'success', name: (t as any).name, id: tc.id, args, result: 'handoff', durationMs: Date.now() - start });\n toolCount += 1;\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n return { status: \"success\", approval: approvalEntry };\n }\n const content = typeof output === \"string\" ? output : JSON.stringify(output);\n if (output && typeof output === 'object' && output.__finalStructuredOutput) {\n if (!state.ctx) state.ctx = {};\n state.ctx.__structuredOutputParsed = output.data;\n state.ctx.__finalizedDueToStructuredOutput = true;\n }\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n toolHistory.push({ executionId, toolName: (t as any).name, args, output, rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n appended.push({ role: \"tool\", content, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: (t as any).name, id: tc.id, args, result: output, durationMs });\n\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n\n const sanitizedOutput = sanitizeTracePayload(output);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedOutput) : undefined;\n const toolName = (t as any).name || tc.name;\n const messageList = [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: {\n name: toolName,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: sanitizedOutput ?? output ?? \"\",\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolExecutionId: executionId,\n messageList,\n });\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n } catch (e: any) {\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n toolHistory.push({ executionId, toolName: (t as any).name, args, output: `Error executing tool: ${e?.message || String(e)}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n appended.push({ role: \"tool\", content: `Error executing tool: ${e?.message || String(e)}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: (t as any).name, id: tc.id, args, error: { message: e?.message || String(e) } });\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n const toolName = (t as any).name || tc.name;\n const errorMessage = e?.message || String(e);\n const messageList = [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: {\n name: toolName,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: `Error executing tool: ${errorMessage}`,\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n durationMs,\n requestBytes: inputBytes,\n toolExecutionId: executionId,\n error: { message: e?.message || String(e), stack: e?.stack },\n messageList,\n });\n toolCount += 1;\n return { status: \"error\", approval: approvalEntry };\n }\n };\n\n for (const tc of planned) {\n if (awaitingApproval) break;\n const result = await runOne(tc);\n if (result?.status === \"awaiting_approval\") {\n awaitingApproval = true;\n break;\n }\n }\n\n if (!awaitingApproval && state.ctx?.__awaitingApproval) {\n const ctx = { ...state.ctx };\n delete ctx.__awaitingApproval;\n if (!pendingApprovals.some((entry) => entry.status !== \"executed\")) {\n delete ctx.__resumeStage;\n }\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n return {\n messages: [...state.messages, ...appended],\n toolCallCount: toolCount,\n toolHistory,\n agent: state.agent,\n pendingApprovals,\n };\n };\n}\n","import type { SmartAgentOptions, SmartState } from \"../types.js\";\n\n// This node is reached when tool-call limit is hit. It appends a short instruction\n// telling the agent to produce an answer with the current information and avoid further tools.\nexport function createToolLimitFinalizeNode(_opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const notice = { role: 'system', content: \"Tool-call limit reached. Produce the best possible final answer using the available context and prior tool outputs. Do not call any more tools.\" } as any;\n const ctx = { ...(state.ctx || {}), __finalizedDueToToolLimit: true };\n return { messages: [...state.messages, notice], ctx };\n };\n}\n","import { nanoid } from \"nanoid\";\nimport { GuardrailPhase } from \"../types.js\";\nimport type {\n ConversationGuardrail,\n GuardrailContext,\n GuardrailIncident,\n GuardrailOutcome,\n GuardrailRule,\n GuardrailDisposition,\n SmartState,\n SmartAgentOptions,\n AgentRuntimeConfig,\n SmartAgentEvent,\n} from \"../types.js\";\n\nexport type GuardrailEvaluationParams = {\n guardrails?: ConversationGuardrail[];\n phase: GuardrailPhase;\n state: SmartState;\n runtime: AgentRuntimeConfig;\n options: SmartAgentOptions;\n emit?: (event: SmartAgentEvent) => void;\n};\n\nfunction ensureArray<T>(value: T[] | undefined): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction buildContext(\n params: Omit<GuardrailEvaluationParams, \"guardrails\" | \"emit\">\n): GuardrailContext {\n const latest = params.state.messages[params.state.messages.length - 1];\n return {\n phase: params.phase,\n messages: params.state.messages,\n latestMessage: latest,\n state: params.state,\n runtime: params.runtime,\n options: params.options,\n };\n}\n\nfunction normalizeDisposition(\n passed: boolean,\n disposition?: GuardrailDisposition\n): GuardrailDisposition {\n if (disposition) return disposition;\n return passed ? \"allow\" : \"block\";\n}\n\nexport async function evaluateGuardrails(\n params: GuardrailEvaluationParams\n): Promise<GuardrailOutcome> {\n const incidents: GuardrailIncident[] = [];\n const guardrails = ensureArray(params.guardrails).filter((guardrail) =>\n ensureArray(guardrail.appliesTo).includes(params.phase)\n );\n\n if (guardrails.length === 0) {\n return { ok: true, incidents };\n }\n\n const context = buildContext(params);\n\n for (const guardrail of guardrails) {\n for (const rule of ensureArray(guardrail.rules)) {\n let result: Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n try {\n result = await rule.evaluate(context);\n } catch (err) {\n result = {\n passed: false,\n reason: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n details: { thrown: true },\n disposition: \"block\" as GuardrailDisposition,\n } as Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n }\n\n const passed = result?.passed !== false;\n const disposition = normalizeDisposition(passed, result?.disposition);\n\n if (passed && disposition === \"allow\") {\n continue;\n }\n\n const incident: GuardrailIncident = {\n guardrailId: guardrail.id ?? rule.id ?? nanoid(8),\n guardrailTitle: guardrail.title,\n ruleId: rule.id,\n ruleTitle: rule.title,\n phase: params.phase,\n reason: result?.reason,\n details: result?.details,\n disposition,\n };\n\n let effectiveDisposition = incident.disposition;\n if (typeof guardrail.onViolation === \"function\") {\n try {\n const override = await guardrail.onViolation(incident, context);\n if (override) {\n effectiveDisposition = override;\n incident.disposition = override;\n }\n } catch (err) {\n effectiveDisposition = \"block\";\n incident.disposition = \"block\";\n incident.details = {\n ...(incident.details || {}),\n onViolationError: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n };\n if (!incident.reason) {\n incident.reason = \"Guardrail onViolation handler threw an error.\";\n }\n }\n }\n\n incidents.push(incident);\n\n params.emit?.({\n type: \"guardrail\",\n phase: params.phase,\n guardrailId: incident.guardrailId,\n guardrailTitle: incident.guardrailTitle,\n ruleId: incident.ruleId,\n ruleTitle: incident.ruleTitle,\n disposition: effectiveDisposition,\n reason: incident.reason,\n details: incident.details,\n });\n\n if (effectiveDisposition === \"block\" && guardrail.haltOnViolation !== false) {\n break;\n }\n }\n }\n\n const ok = incidents.every((incident) => incident.disposition !== \"block\");\n return { ok, incidents };\n}\n\nexport type CreateGuardrailOptions = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo?: GuardrailPhase[];\n checks: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport function createGuardrail(options: CreateGuardrailOptions): ConversationGuardrail {\n const appliesTo = options.appliesTo?.length\n ? options.appliesTo\n : [GuardrailPhase.Request, GuardrailPhase.Response];\n\n return {\n id: options.id,\n title: options.title,\n description: options.description,\n appliesTo,\n rules: options.checks,\n haltOnViolation: options.haltOnViolation,\n onViolation: options.onViolation,\n metadata: options.metadata,\n };\n}\n","import { AgentRuntimeConfig, AgentSnapshot, RestoreSnapshotOptions, SmartState, SnapshotOptions } from \"../types.js\";\n\nconst DISALLOWED_CTX_KEYS = new Set([\"__onEvent\", \"__traceSession\", \"__paused\"]);\n\nconst clone = <T>(value: T): T => {\n if (typeof (globalThis as any).structuredClone === \"function\") {\n return (globalThis as any).structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n};\n\nconst cleanCtx = (ctx?: Record<string, any>): Record<string, any> | undefined => {\n if (!ctx) return undefined;\n const entries = Object.entries(ctx).filter(([key]) => !DISALLOWED_CTX_KEYS.has(key));\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n};\n\nconst runtimeHintFromAgent = (agent?: AgentRuntimeConfig) => {\n if (!agent) return undefined;\n const tools = Array.isArray(agent.tools) ? agent.tools.map((tool: any) => tool?.name).filter(Boolean) : undefined;\n return {\n name: agent.name,\n version: agent.version,\n tools: tools && tools.length > 0 ? tools : undefined,\n };\n};\n\nexport function captureSnapshot(state: SmartState, options?: SnapshotOptions): AgentSnapshot {\n const { agent, ctx, ...rest } = state;\n const metadata = {\n createdAt: new Date().toISOString(),\n tag: options?.tag,\n paused: ctx?.__paused ?? null,\n };\n\n const safeState = clone({\n ...rest,\n ctx: cleanCtx(ctx),\n });\n\n if (safeState.ctx && \"__paused\" in safeState.ctx) {\n delete (safeState.ctx as Record<string, any>).__paused;\n }\n\n return {\n state: safeState,\n runtimeHint: options?.includeRuntimeHint !== false ? runtimeHintFromAgent(agent) : undefined,\n metadata,\n };\n}\n\nexport function restoreSnapshot(snapshot: AgentSnapshot, restoreOptions?: RestoreSnapshotOptions): SmartState {\n const base = clone(snapshot.state) as SmartState;\n const incomingCtx = restoreOptions?.ctx;\n const mergedCtx = restoreOptions?.mergeCtx === false\n ? cleanCtx(incomingCtx)\n : {\n ...(base.ctx || {}),\n ...cleanCtx(incomingCtx),\n };\n\n const ctx = {\n ...(mergedCtx || {}),\n __restoredFromSnapshot: true,\n };\n\n const restored: SmartState = {\n ...base,\n ctx,\n };\n\n if (restoreOptions?.agent) {\n restored.agent = restoreOptions.agent;\n }\n\n return restored;\n}\n","import { SmartState, ToolApprovalResolution, PendingToolApproval } from \"../types.js\";\n\nconst cloneApprovals = (approvals: PendingToolApproval[] | undefined) =>\n Array.isArray(approvals) ? approvals.map((entry) => ({ ...entry })) : [];\n\nexport function resolveToolApprovalState(state: SmartState, resolution: ToolApprovalResolution): SmartState {\n const approvals = cloneApprovals(state.pendingApprovals);\n const matchIndex = approvals.findIndex((entry) => entry.id === resolution.id || entry.toolCallId === resolution.id);\n if (matchIndex === -1) {\n throw new Error(`Pending approval not found for id: ${resolution.id}`);\n }\n\n const entry = { ...approvals[matchIndex] };\n if (entry.status === \"executed\") {\n throw new Error(`Tool approval ${entry.id} already completed.`);\n }\n\n entry.status = resolution.approved ? \"approved\" : \"rejected\";\n entry.approvedArgs = resolution.approved ? (resolution.approvedArgs ?? entry.args) : undefined;\n entry.decidedBy = resolution.decidedBy;\n entry.comment = resolution.comment;\n entry.decidedAt = new Date().toISOString();\n\n approvals[matchIndex] = entry;\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingApproval;\n ctx.__resumeStage = \"tools\";\n ctx.__approvalResolved = { id: entry.id, status: entry.status };\n\n return {\n ...state,\n pendingApprovals: approvals,\n ctx,\n };\n}\n","export function countApproxTokens(text: string) {\n if (!text) return 0;\n // Rough heuristic: 1 token ~ 4 chars\n return Math.ceil(text.length / 4);\n}\n","// A minimal agent builder: no system prompt, no summarization, with tool limit and optional structured output finalize.\nimport type { AgentInvokeResult, InvokeConfig, SmartAgentEvent, AgentOptions, AgentState, AgentInstance, AgentRuntimeConfig, HandoffDescriptor, GuardrailOutcome, AgentSnapshot, SnapshotOptions, RestoreSnapshotOptions, ToolApprovalResolution } from \"./types.js\";\nimport { GuardrailPhase } from \"./types.js\";\nimport { z, ZodSchema } from \"zod\";\nimport { createResolverNode } from \"./nodes/resolver.js\";\nimport { createAgentCoreNode } from \"./nodes/agentCore.js\";\nimport { createToolsNode } from \"./nodes/tools.js\";\nimport { createToolLimitFinalizeNode } from \"./nodes/toolLimitFinalize.js\";\nimport { createTool } from \"./tool.js\";\nimport { createTraceSession, finalizeTraceSession } from \"./utils/tracing.js\";\nimport { evaluateGuardrails } from \"./guardrails/engine.js\";\nimport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nimport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nimport { countApproxTokens } from \"./utils/utilTokens.js\";\n\nexport function createAgent<TOutput = unknown>(opts: AgentOptions & { outputSchema?: ZodSchema<TOutput> }): AgentInstance<TOutput> {\n const resolver = createResolverNode();\n const agentCore = createAgentCoreNode(opts);\n // Prepare tools list: base tools + structured output finalize if schema provided\n const toolsBase = [...((opts.tools as any) ?? [])];\n if (opts.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema as any,\n func: async (data: any) => ({ __finalStructuredOutput: true, data }),\n });\n toolsBase.push(responseTool);\n }\n const toolsNode = createToolsNode(toolsBase, opts);\n const finalizeNode = createToolLimitFinalizeNode(opts);\n\n type GuardrailStore = { lastRequestLength: number; lastResponseLength: number };\n\n const mergeGuardrailOutcomes = (\n prev: GuardrailOutcome | undefined,\n next: GuardrailOutcome\n ): GuardrailOutcome => {\n if (!prev) return next;\n return {\n ok: prev.ok && next.ok,\n incidents: [...prev.incidents, ...next.incidents],\n };\n };\n\n const ensureGuardrailStore = (state: AgentState): GuardrailStore => {\n const ctx = (state.ctx = state.ctx || {});\n const existing = (ctx.__guardrailStore as GuardrailStore | undefined) || {\n lastRequestLength: -1,\n lastResponseLength: -1,\n };\n ctx.__guardrailStore = existing;\n return existing;\n };\n\n const getGuardrailConfig = (state: AgentState) => {\n const agentGuardrails = state.agent?.guardrails;\n return Array.isArray(agentGuardrails)\n ? agentGuardrails\n : Array.isArray(opts.guardrails)\n ? opts.guardrails\n : [];\n };\n\n const runtime: AgentRuntimeConfig = {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: toolsBase,\n guardrails: opts.guardrails,\n systemPrompt: undefined,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: opts.outputSchema as any,\n tracing: opts.tracing,\n };\n\n async function runLoop(\n initial: AgentState,\n config: InvokeConfig | undefined,\n emit?: (event: SmartAgentEvent) => void\n ): Promise<AgentState> {\n let state = await resolver(initial);\n if (state.ctx?.__paused) {\n const nextCtx = { ...state.ctx };\n delete nextCtx.__paused;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n let resumeStage: \"tools\" | null = null;\n if (state.ctx?.__resumeStage) {\n const nextCtx = { ...state.ctx };\n if (nextCtx.__resumeStage === \"tools\") {\n resumeStage = \"tools\";\n }\n delete nextCtx.__resumeStage;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n\n const maxToolCalls = (opts.limits?.maxToolCalls === undefined) ? 50 : opts.limits?.maxToolCalls;\n const iterationLimit = maxToolCalls === Infinity ? 100 : Math.max(maxToolCalls * 3 + 10, 40);\n let iterations = 0;\n const onStateChange = config?.onStateChange;\n const checkpointReason = config?.checkpointReason;\n let pausedStage: string | null = null;\n\n const checkpointIfRequested = (stage: string) => {\n if (typeof onStateChange !== \"function\") return false;\n let result = false;\n try {\n result = onStateChange(state);\n } catch {\n result = false;\n }\n if (!result) return false;\n const ctx = { ...(state.ctx || {}) };\n ctx.__paused = {\n stage,\n iteration: iterations,\n reason: checkpointReason,\n timestamp: new Date().toISOString(),\n };\n state = { ...state, ctx } as AgentState;\n pausedStage = stage;\n return true;\n };\n\n while (iterations < iterationLimit) {\n iterations++;\n\n const skippingAgent = resumeStage === \"tools\";\n if (!skippingAgent) {\n if (checkpointIfRequested(\"before_guardrails\")) break;\n\n const preGuardrails = getGuardrailConfig(state);\n if (preGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastRequestLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: preGuardrails,\n phase: GuardrailPhase.Request,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastRequestLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const guardMessage: any = {\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Request blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Request,\n incidents: outcome.incidents,\n },\n },\n };\n state = { ...state, messages: [...state.messages, guardMessage] } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Request,\n incident: blocking,\n };\n break;\n }\n }\n }\n\n // Check if context is too large and needs summarization (signal to SmartAgent)\n // Default maxTok to Infinity if not provided to bypass check by default, \n // but SmartAgent usually passes config. If purely limits.maxToken used, we respect it.\n // The user requirement says \"agent altındaki maxTokens ve maxToolCalls kısmını config altından alalım yoksa 50000 ve 50 olarak set edelim\" \n // This implies defaults should be applied if not present.\n\n let maxTok: number | undefined;\n if ((opts as any).summarization && typeof (opts as any).summarization === 'object' && (opts as any).summarization.maxTokens) {\n maxTok = (opts as any).summarization.maxTokens;\n }\n\n if (maxTok === undefined) {\n maxTok = 50000; // Default if not found\n }\n\n if (maxTok) {\n const allText = (state.messages || [])\n .map((m: any) => typeof m.content === \"string\" ? m.content : Array.isArray(m.content) ? m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? '')).join('') : '')\n .join(\"\\n\");\n const tokenCount = countApproxTokens(allText);\n if (tokenCount > maxTok) {\n const ctx = { ...(state.ctx || {}), __needsSummarization: true };\n state = { ...state, ctx } as AgentState;\n break;\n }\n }\n\n // Agent step\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n\n if (checkpointIfRequested(\"after_agent\")) break;\n\n const postGuardrails = getGuardrailConfig(state);\n if (postGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastResponseLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: postGuardrails,\n phase: GuardrailPhase.Response,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastResponseLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const updatedMessages = [...state.messages];\n const replaced = updatedMessages.pop();\n updatedMessages.push({\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Response blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n replaced,\n },\n },\n } as any);\n state = { ...state, messages: updatedMessages } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Response,\n incident: blocking,\n replaced,\n };\n break;\n } else if (outcome.incidents.length > 0) {\n const last = state.messages[state.messages.length - 1] as any;\n if (last) {\n last.metadata = {\n ...(last.metadata || {}),\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n },\n };\n }\n }\n }\n }\n } else {\n resumeStage = null;\n }\n\n const lastMsg: any = state.messages[state.messages.length - 1];\n const toolCalls: any[] = Array.isArray(lastMsg?.tool_calls) ? lastMsg.tool_calls : [];\n const toolCallCount = state.toolCallCount || 0;\n\n // Tool limit finalize gate\n if (state.ctx?.__finalizedDueToToolLimit) {\n break;\n }\n if (toolCallCount >= maxToolCalls && toolCalls.length > 0) {\n state = { ...state, ...(await finalizeNode(state)) } as AgentState;\n // One more assistant turn will occur, but without more tools ideally\n continue;\n }\n\n if (toolCalls.length === 0) break;\n\n // Run tools\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n if (state.ctx?.__awaitingApproval) break;\n if (checkpointIfRequested(\"after_tools\")) break;\n if (state.ctx?.__finalizedDueToStructuredOutput) break;\n }\n\n // Best-effort: if a structured output schema is active but the model never called `response`,\n // append a force-finalize instruction and allow one more agent turn (without tools ideally).\n // This helps avoid \"completed but no response generated\" situations.\n if (opts.outputSchema && !(state as any).ctx?.__finalizedDueToStructuredOutput) {\n const last: any = state.messages[state.messages.length - 1];\n const lastHasToolCalls = Array.isArray(last?.tool_calls) && last.tool_calls.length > 0;\n\n // Only nudge if we appear to be done (no pending tool calls) but still no structured finalize.\n if (!lastHasToolCalls) {\n const forceMsg = {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST now call tool `response` with the final JSON object that matches the schema.\",\n \"Do not write the JSON in the assistant message.\",\n \"Call `response` exactly once, then stop.\",\n ].join(\"\\n\"),\n } as any;\n\n // Avoid spamming the same instruction\n const alreadyForced = Boolean((state as any).ctx?.__structuredOutputForceFinalize);\n if (!alreadyForced) {\n const ctx = { ...(state.ctx || {}), __structuredOutputForceFinalize: true };\n state = { ...state, messages: [...state.messages, forceMsg], ctx } as AgentState;\n try {\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n const lastAfter: any = state.messages[state.messages.length - 1];\n const toolCallsAfter: any[] = Array.isArray(lastAfter?.tool_calls) ? lastAfter.tool_calls : [];\n if (toolCallsAfter.length > 0) {\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n }\n } catch {\n // Ignore; caller will handle absence of output\n }\n }\n }\n }\n\n if (!pausedStage && typeof onStateChange === \"function\" && onStateChange(state)) {\n checkpointIfRequested(\"after_loop\");\n }\n\n return state;\n }\n\n const invokeAgent = async (input: AgentState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n const onEvent = config?.onEvent;\n const emit = (e: SmartAgentEvent) => { try { onEvent?.(e); } catch {} };\n const traceSession = createTraceSession(opts);\n\n const ctx: Record<string, any> = { ...(input.ctx || {}), __onEvent: onEvent };\n if (traceSession) ctx.__traceSession = traceSession;\n\n const initial: AgentState = {\n messages: input.messages || [],\n toolCallCount: input.toolCallCount || 0,\n toolCache: input.toolCache || {},\n toolHistory: input.toolHistory || [],\n metadata: input.metadata,\n ctx,\n pendingApprovals: input.pendingApprovals || [],\n agent: input.agent || runtime,\n usage: input.usage || { perRequest: [], totals: {} },\n };\n\n let res: AgentState;\n try {\n res = await runLoop(initial, config, emit);\n } catch (err: any) {\n await finalizeTraceSession(traceSession, {\n agentRuntime: runtime,\n status: \"error\",\n error: { message: err?.message, stack: err?.stack },\n });\n throw err;\n }\n\n await finalizeTraceSession(traceSession, {\n agentRuntime: res.agent || runtime,\n status: \"success\",\n });\n\n const finalMsg = res.messages[res.messages.length - 1];\n let content = \"\";\n if (typeof finalMsg?.content === \"string\") content = finalMsg.content;\n else if (Array.isArray(finalMsg?.content)) content = finalMsg.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n\n let parsed: TOutput | undefined = undefined;\n const schema = opts.outputSchema as ZodSchema<TOutput> | undefined;\n if (schema && (res as any).ctx?.__structuredOutputParsed) {\n parsed = (res as any).ctx.__structuredOutputParsed as TOutput;\n } else if (schema && content) {\n // Fallback: try to parse JSON from assistant message\n let jsonText: string | null = null;\n const fenced = content.match(/```(?:json)?\\n([\\s\\S]*?)```/i);\n if (fenced && fenced[1]) jsonText = fenced[1].trim();\n else {\n const braceIdx = content.indexOf(\"{\");\n const bracketIdx = content.indexOf(\"[\");\n const start = [braceIdx, bracketIdx].filter(i => i >= 0).sort((a, b) => a - b)[0];\n if (start !== undefined) jsonText = content.slice(start).trim();\n }\n try {\n const raw = JSON.parse(jsonText ?? content);\n parsed = schema.parse(raw) as TOutput;\n } catch {}\n }\n\n emit({ type: \"finalAnswer\", content: typeof finalMsg?.content === 'string' ? finalMsg.content : content });\n\n return {\n content,\n output: parsed as TOutput | undefined,\n metadata: { usage: (res as any).usage },\n messages: res.messages,\n state: res as AgentState,\n };\n };\n\n const snapshotState = (state: AgentState, options?: SnapshotOptions) => captureSnapshot(state, options);\n\n const resumeAgent = async (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => {\n const restoredState = restoreSnapshot(snapshot, restoreOptions);\n return invokeAgent(restoredState, config);\n };\n\n const resolveToolApproval = (state: AgentState, resolution: ToolApprovalResolution) =>\n resolveToolApprovalState(state, resolution);\n\n const instance: AgentInstance<TOutput> = {\n invoke: invokeAgent,\n snapshot: snapshotState,\n resume: resumeAgent,\n resolveToolApproval,\n asTool: ({ toolName, description, inputDescription }: { toolName: string; description?: string; inputDescription?: string }) => {\n const schema = z.object({ input: z.string().describe(inputDescription || \"Input for delegated agent\") });\n return createTool({\n name: toolName,\n description: description || `Delegate task to agent ${opts.name || 'Agent'}`,\n schema,\n func: async ({ input }) => {\n const res = await instance.invoke({ messages: [{ role: 'user', content: input } as any] });\n return { content: res.content };\n }\n });\n },\n asHandoff: ({ toolName, description, schema }: { toolName?: string; description?: string; schema?: ZodSchema<any>; }): HandoffDescriptor => {\n const finalName = toolName || `handoff_to_${runtime.name || 'agent'}`;\n const zschema = schema || z.object({ reason: z.string().describe('Reason for handoff') });\n createTool({\n name: finalName,\n description: description || `Handoff control to agent ${runtime.name || 'Agent'}`,\n schema: zschema,\n func: async (_args: any) => ({ __handoff: { runtime } })\n });\n return { type: 'handoff', toolName: finalName, description: description || '', schema: zschema, target: instance } as any;\n },\n __runtime: runtime,\n };\n\n if (opts.handoffs && Array.isArray(opts.handoffs)) {\n const handoffTools = opts.handoffs.map(h => {\n const schema = h.schema || z.object({ reason: z.string().describe('Reason for handoff') });\n return createTool({\n name: h.toolName,\n description: h.description || `Handoff to ${h.target.__runtime.name || 'agent'}`,\n schema,\n func: async (_args: any) => ({ __handoff: { runtime: h.target.__runtime } })\n });\n });\n runtime.tools = [...runtime.tools, ...handoffTools];\n }\n\n return instance;\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\nexport function createAgentNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n // Prefer dynamic runtime config from state.agent, fallback to initial opts\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n systemPrompt: opts.systemPrompt,\n limits: opts.limits,\n useTodoList: opts.useTodoList,\n outputSchema: (opts as any).outputSchema,\n };\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n // 3) Prepend a single, fresh system prompt for this turn only\n const structuredOutputHint = runtime.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const systemMsg = {\n role: 'system',\n content: buildSystemPrompt(\n [runtime.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n runtime.useTodoList === true,\n runtime.name || \"Agent\"\n )\n } as any;\n const messages = [systemMsg, ...state.messages];\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const promptMessages = [systemMsg, ...state.messages];\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(promptMessages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n let response: any;\n try {\n response = await modelWithTools.invoke(promptMessages);\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: promptMessages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...messages,\n response as any,\n ];\n\n // ---- Usage tracking (per-request) ----\n const rawUsage = (response as any)?.usage || (response as any)?.response_metadata?.token_usage || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const providerName = getProviderName((runtime as any).model || (opts as any).model);\n const durationMs = Date.now() - start;\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes,\n model: modelName,\n provider: providerName,\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n // Normalize token counts to aggregate totals\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n // Attach back so next nodes see updated state\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","// Lightweight message helpers to avoid hard dependency on LangChain\nimport type { SmartAgentOptions, SmartState, BaseMessage } from \"../types.js\";\n\n// Helper for lightweight message construction\nconst systemMessage = (content: string) => ({ role: 'system', content });\nconst humanMessage = (content: string) => ({ role: 'user', content });\n\n/**\n * Gets the summarization configuration normalized\n */\nfunction getSummarizationConfig(opts: SmartAgentOptions) {\n if (typeof opts.summarization === 'object') {\n return {\n enabled: opts.summarization.enable !== false,\n maxTokens: opts.summarization.maxTokens\n };\n }\n // Fallback to default 50000 if not specified\n return {\n enabled: opts.summarization !== false,\n maxTokens: 50000\n }; \n}\n\n/**\n * Creates the summarization node.\n * \n * Logic:\n * 1. Check if summarization is enabled.\n * 2. Convert current conversation history into a text suitable for summarization.\n * 3. Invoke the model to generate a summary of the conversation.\n * 4. Rewrite the message history:\n * - All tool messages (role='tool') have their content replaced with \"SUMMARIZED\".\n * - A new assistant message calling 'summarize_context' is appended.\n * - A new tool message with the summary content is appended.\n */\nexport function createContextSummarizeNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const config = getSummarizationConfig(opts);\n if (!config.enabled) return {};\n\n const model = (opts as any).model;\n const messages = state.messages || [];\n\n // Check if there are any tool messages that can be compressed\n const compressableMessages = messages.filter(m => m.role === 'tool' && m.content !== \"SUMMARIZED\");\n if (compressableMessages.length === 0) {\n // Nothing to compress. If we summarize, we only ADD tokens (summary).\n // Abort to prevent infinite loops or growing context.\n return {};\n }\n\n // 1. Generate Summary\n // We convert current messages to a simple text format for the model to summarize.\n // We skip extensive JSON formatting to save tokens and focus on content.\n const conversationText = messages.map(m => {\n let content = \"\";\n if (typeof m.content === \"string\") content = m.content;\n else if (Array.isArray(m.content)) {\n content = m.content.map((c: any) => c.text || JSON.stringify(c)).join(\" \");\n }\n \n let prefix = `${m.role.toUpperCase()}`;\n if (m.name) prefix += ` (${m.name})`;\n \n return `${prefix}: ${content}`;\n }).join(\"\\n\\n\");\n\n const summaryPrompt = [\n systemMessage(\"You are a helpful assistant that summarizes conversation history efficiently.\"),\n humanMessage(\n `Please summarize the following conversation history. \nFocus on:\n- User goals and intent.\n- Key decisions made and actions taken.\n- Important tool outputs and data retrieved.\n- Current state of the task.\n\nConversation:\n${conversationText}\n\nSummary:`\n )\n ];\n\n let summaryText = \"Summary unavailable.\";\n try {\n const response = await model.invoke(summaryPrompt);\n summaryText = typeof response.content === \"string\" \n ? response.content \n : Array.isArray(response.content) \n ? response.content.map((c: any) => c.text || \"\").join(\"\")\n : JSON.stringify(response.content);\n } catch (err) {\n console.error(\"[ContextSummarize] Failed to generate summary:\", err);\n return {}; // Abort changes if summarization fails\n }\n\n // 2. Modify existing messages\n // Replace content of ALL tool messages with \"SUMMARIZED\".\n // We leave other messages intact to preserve the conversational flow structure,\n // but reducing the token load from large tool outputs.\n const newMessages = messages.map(m => {\n if (m.role === 'tool') {\n // Check if it's already summarized to avoid double-processing if run multiple times\n if (m.content === \"SUMMARIZED\") return m;\n \n return { \n ...m, \n content: \"SUMMARIZED\" \n };\n }\n return m;\n });\n\n // 3. Append the summarization interaction\n // We inject a fake tool call and response to represent the summarization event in the history.\n const summaryToolCallId = `call_summary_${Date.now()}`;\n \n // The assistant \"calls\" the summarizer\n const assistantSummaryCall: BaseMessage = {\n role: \"assistant\", // \"assistant\"\n content: \"Context limit reached. Summarizing conversation history to reduce token usage.\",\n tool_calls: [\n {\n id: summaryToolCallId,\n type: \"function\",\n function: {\n name: \"summarize_context\",\n arguments: \"{}\"\n }\n }\n ]\n };\n\n // The tool \"responds\" with the summary\n const toolSummaryResponse: BaseMessage = {\n role: \"tool\",\n tool_call_id: summaryToolCallId,\n name: \"summarize_context\", // Matches the tool name in the call\n content: summaryText\n };\n\n return {\n messages: [...newMessages, assistantSummaryCall, toolSummaryResponse] as any\n };\n };\n}\n","import { countApproxTokens } from \"./utilTokens.js\";\nimport { Message } from \"../types.js\";\n\nexport type TokenLimits = {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n};\n\nexport async function applyTokenLimits({\n state,\n limits,\n}: {\n state: { messages: Message[]; summaries?: string[] };\n limits: {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n };\n}) {\n const messages = state.messages || [];\n const budget = limits.contextTokenLimit;\n let total = messages.reduce((acc, m) => acc + countApproxTokens(String((m as any).content || \"\")), 0);\n if (total <= budget) return state;\n\n const newMessages: Message[] = [...messages];\n\n return { ...state, messages: newMessages };\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./tool.js\";\n// no message helpers needed here\n\n// Create context tools like get_tool_response, manage_todo_list\nexport function createContextTools(\n stateRef: { toolHistory?: any[]; toolHistoryArchived?: any[]; todoList?: any[] },\n opts?: { planningEnabled?: boolean; outputSchema?: any }\n) {\n const tools = [] as any[];\n\n if (opts?.planningEnabled) {\n const manageTodo = createTool({\n name: \"manage_todo_list\",\n description:\n \"Manage a structured todo list to track progress and plan tasks throughout your coding session. Use this tool VERY frequently to ensure task visibility and proper planning.\\n\\nWhen to use this tool:\\n- Complex multi-step work requiring planning and tracking\\n- When user provides multiple tasks or requests (numbered/comma-separated)\\n- After receiving new instructions that require multiple steps\\n- BEFORE starting work on any todo (mark as in-progress)\\n- IMMEDIATELY after completing each todo (mark completed individually)\\n- When breaking down larger tasks into smaller actionable steps\\n- To give users visibility into your progress and planning\\n\\nWhen NOT to use:\\n- Single, trivial tasks that can be completed in one step\\n- Purely conversational/informational requests\\n- When just reading files or performing simple searches\\n\\nCRITICAL workflow:\\n1. Plan tasks by writing todo list with specific, actionable items\\n2. Complete the work for that specific todo\\n3. Mark that todo as completed IMMEDIATELY\\n4. Move to next todo and repeat\\n\\nTodo states:\\n- not-started: Todo not yet begun\\n- in-progress: Currently working (limit ONE at a time)\\n- completed: Finished successfully\\n\\nIMPORTANT: Mark todos completed as soon as they are done. Do not batch completions.\",\n schema: z.object({\n operation: z.enum([\"write\", \"read\"]),\n todoList: z.array(z.object({\n id: z.number().int().positive().describe(\"Sequential id starting from 1\"),\n title: z.string().min(1),\n description: z.string().min(1),\n status: z.enum([\"not-started\", \"in-progress\", \"completed\"]),\n evidence: z.string().max(200).optional()\n })).optional()\n }),\n func: async ({ operation, todoList }) => {\n const onEvent = (manageTodo as any)._stateRef?.__onEvent as undefined | ((e: any) => void);\n if (operation === \"read\") {\n const list = stateRef.todoList || [];\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation: \"read\", todoList: list });\n return list;\n }\n if (Array.isArray(todoList)) {\n stateRef.todoList = todoList;\n }\n const payload = {\n status: \"ok\",\n operation,\n count: Array.isArray(todoList) ? todoList.length : undefined,\n } as const;\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation: \"write\", todoList });\n return payload;\n }\n });\n (manageTodo as any)._stateRef = stateRef;\n tools.push(manageTodo);\n }\n\n // get_tool_response retrieves original raw output by executionId\n const getTool = createTool({\n name: \"get_tool_response\",\n description:\n \"RETRIEVE tool execution response: Use this to access the full output of a tool execution that shows as 'SUMMARIZED' in the tool history.\",\n schema: z.object({ executionId: z.string().describe(\"Tool execution id\") }),\n func: async ({ executionId }) => {\n let execution = stateRef.toolHistory?.find((t) => t.executionId === executionId);\n if (!execution) {\n execution = stateRef.toolHistoryArchived?.find((t) => t.executionId === executionId);\n }\n if (execution) {\n return execution.rawOutput || execution.output;\n }\n return \"Execution not found. Please check the executionId.\";\n }\n });\n // mark mutable stateRef for toolsNode sync\n (getTool as any)._stateRef = stateRef;\n tools.push(getTool);\n\n // Structured output finalize tool (response) if outputSchema provided\n if (opts?.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema.shape ? opts.outputSchema : z.any(),\n func: async (data: any) => {\n // Validate directly against provided schema\n try {\n const validated = opts.outputSchema.parse ? opts.outputSchema.parse(data) : data;\n // store parsed result for toolsNode to pick up (toolsNode already looks for __finalStructuredOutput?)\n return { __finalStructuredOutput: true, data: validated };\n } catch (e: any) {\n return { error: 'Schema validation failed', details: e?.message };\n }\n }\n });\n (responseTool as any)._stateRef = stateRef;\n tools.push(responseTool);\n }\n\n return tools;\n}\n","import { SmartState, SmartAgentOptions } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\n/** Shared helper to compute whether we exceed token limit */\nfunction needsSummarization(state: SmartState, opts: SmartAgentOptions, summarizationEnabled: boolean): boolean {\n if (!summarizationEnabled) {\n return false;\n }\n\n // Determine the effective max tokens for summarization\n // Order of precedence:\n // 1. opts.summarization.maxTokens (if strictly defined)\n // 2. opts.limits.maxToken\n // 3. opts.limits.contextTokenLimit\n // 4. Default: 50000\n let maxTok: number | undefined;\n\n if (typeof opts.summarization === 'object' && typeof opts.summarization.maxTokens === 'number') {\n maxTok = opts.summarization.maxTokens;\n }\n \n // Default to 50000 if no limit specified but summarization is enabled\n if (maxTok === undefined) {\n maxTok = 50000;\n }\n\n try {\n const allText = (state.messages || [])\n .map((m: any) => typeof m.content === \"string\" ? m.content : Array.isArray(m.content) ? m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? '')).join('') : '')\n .join(\"\\n\");\n const tokenCount = countApproxTokens(allText);\n const needsSum = tokenCount > maxTok;\n return needsSum;\n } catch (e) {\n return false;\n }\n}\n\nexport function resolverDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function resolverDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function toolsDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function toolsDecision(state: SmartState) {\n const max = (opts.limits?.maxToolCalls ?? 10) as number;\n const count = state.toolCallCount || 0;\n if (count >= max) return \"toolLimitFinalize\";\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function finalizeDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function finalizeDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n","import type { AgentInvokeResult, InvokeConfig, SmartAgentOptions, SmartState, SmartAgentInstance } from \"../types.js\";\nimport { ZodSchema } from \"zod\";\nimport { createAgent } from \"../agent.js\";\nimport { createContextTools } from \"../contextTools.js\";\nimport { createContextSummarizeNode } from \"../nodes/contextSummarize.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { resolverDecisionFactory, toolsDecisionFactory } from \"../graph/decisions.js\";\n\n// SmartAgent on top of core createAgent: adds system prompt, optional planning context tools, and token-aware summarization.\nexport function createSmartAgent<TOutput = unknown>(opts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> }): SmartAgentInstance<TOutput> {\n // Prepare context tools (todo + get_tool_response). Avoid duplicating response tool; base agent will add it if schema provided.\n const stateRef: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined };\n const planningEnabled = opts.useTodoList === true;\n const contextTools = createContextTools(stateRef, { planningEnabled, outputSchema: undefined });\n const mergedTools = [...((opts.tools as any) ?? []), ...contextTools];\n\n // Compose base agent\n const base = createAgent<TOutput>({ ...opts, tools: mergedTools });\n\n let summarizationEnabled = false;\n if (typeof opts.summarization === 'object') {\n summarizationEnabled = opts.summarization.enable !== false;\n } else {\n summarizationEnabled = opts.summarization !== false; // default true if not object and not strictly false\n }\n\n const summarizer = summarizationEnabled ? createContextSummarizeNode(opts) : undefined;\n const decideBefore = resolverDecisionFactory(opts, summarizationEnabled);\n const decideAfter = toolsDecisionFactory(opts, summarizationEnabled);\n\n const structuredOutputHint = opts.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n function systemMessage(): any {\n const sys = buildSystemPrompt(\n [opts.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n opts.useTodoList === true,\n opts.name || \"Agent\"\n );\n return { role: 'system', content: sys } as any;\n }\n\n const instance: SmartAgentInstance<TOutput> = {\n invoke: async (input: SmartState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // wire stateRef for context tools\n stateRef.toolHistory = input.toolHistory;\n stateRef.toolHistoryArchived = input.toolHistoryArchived;\n\n // Prepend a single system message once\n const alreadyHasSystem = Array.isArray(input.messages) && input.messages[0]?.role === 'system';\n const seedMessages = alreadyHasSystem ? [...(input.messages || [])] : [systemMessage(), ...(input.messages || [])];\n let state: SmartState = { ...input, messages: seedMessages } as SmartState;\n let lastResult: AgentInvokeResult<TOutput> | null = null;\n const iterationLimit = Math.max((opts.limits?.maxToolCalls ?? 10) * 3 + 5, 30);\n\n for (let i = 0; i < iterationLimit; i++) {\n // Pre-agent summarization decision\n const next = summarizationEnabled ? decideBefore(state) : 'agent';\n if (next === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n // Prevent infinite loop if summarizer returns no changes (e.g. error or nothing to summarize)\n if (!delta || Object.keys(delta).length === 0) {\n // Summarization failed to produce a change. Proceed to agent to avoid stall, \n // though it might hit token limits.\n } else {\n state = { ...state, ...delta } as SmartState;\n continue; // run decision again before calling base\n }\n }\n\n // Delegate a full turn to base agent (includes tools + tool-limit finalize + structured output finalize)\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n state = (res.state as SmartState) || { ...state, messages: res.messages };\n\n // Check if base agent signaled that summarization is needed (context too large)\n if ((state as any).ctx?.__needsSummarization && summarizer) {\n // Clear the flag\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__needsSummarization;\n state = { ...state, ctx } as SmartState;\n // Run summarization\n const delta = await summarizer(state);\n // If delta is valid, apply and loop. If empty, we continue to next iteration (or break depending on flow)\n // Since we are inside the main loop, 'continue' will go to top of loop.\n // If delta empty, we just updated the ctx flag, so 'continue' at least retries with clean flag.\n if (delta && Object.keys(delta).length > 0) {\n state = { ...state, ...delta } as SmartState;\n }\n continue; // Loop will attempt another agent pass after summarization\n }\n\n // If structured output finalize triggered, base already stopped with parsed output\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n // Post-tools summarization decision\n if (summarizationEnabled) {\n const after = decideAfter(state);\n if (after === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n if (delta && Object.keys(delta).length > 0) {\n state = { ...state, ...delta } as SmartState;\n // Loop will attempt another agent pass\n continue;\n }\n }\n }\n\n // If base produced an assistant message without tool calls (its normal stop), we're done.\n break;\n }\n\n // Fall back if base was never invoked (edge case)\n if (!lastResult) {\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n }\n\n return lastResult as AgentInvokeResult<TOutput>;\n },\n snapshot: base.snapshot,\n resume: base.resume,\n resolveToolApproval: base.resolveToolApproval,\n asTool: base.asTool,\n asHandoff: base.asHandoff,\n __runtime: base.__runtime,\n };\n\n return instance;\n}\n","import type { ContentPart } from \"../types.js\";\n\n// Convert content (string | parts[]) to a human-readable string for logging, token counting, or summarization.\nexport function contentToString(content: string | ContentPart[] | any): string {\n try {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((p) => {\n if (!p || typeof p !== \"object\") return String(p);\n if ((p as any).type === \"text\") return String((p as any).text ?? \"\");\n if ((p as any).type === \"image_url\") {\n const img = (p as any).image_url;\n const url = typeof img === \"string\" ? img : img?.url;\n const detail = typeof img === \"string\" ? undefined : img?.detail;\n return `[image:${url || \"unknown\"}${detail ? ` detail=${detail}` : \"\"}]`;\n }\n // generic fallback\n return JSON.stringify(p);\n })\n .join(\"\\n\");\n }\n // unknown object\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n}\n\n// Merge an array of messages' contents into a single string (used in token counting decisions)\nexport function mergeContentsToString(contents: Array<string | ContentPart[] | any>): string {\n return contents.map((c) => contentToString(c)).join(\"\\n\");\n}\n","import AjvModule, { type ValidateFunction, type ErrorObject, type Options } from \"ajv\";\nimport { z } from \"zod\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n GuardrailRule,\n GuardrailContext,\n GuardrailDisposition,\n SmartAgentInstance,\n} from \"../types.js\";\nimport { contentToString, mergeContentsToString } from \"../utils/content.js\";\n\nconst Ajv = (AjvModule as unknown as { default?: new (options?: Options) => any })?.default ?? (AjvModule as unknown as new (options?: Options) => any);\nconst defaultAjv = new Ajv({ allErrors: true } satisfies Options);\n(defaultAjv as any).opts.strict = false;\n\nfunction ensureRegExp(pattern: RegExp | string, flags?: string): RegExp {\n if (pattern instanceof RegExp) return pattern;\n return new RegExp(pattern, flags ?? \"i\");\n}\n\nfunction latestText(context: GuardrailContext): string {\n return contentToString(context.latestMessage?.content ?? \"\");\n}\n\nfunction threadText(context: GuardrailContext): string {\n return mergeContentsToString(context.messages.map((msg) => msg.content));\n}\n\nexport type RegexRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n pattern: RegExp | string;\n flags?: string;\n matchDisposition?: GuardrailDisposition;\n selector?: (context: GuardrailContext) => string;\n allowIfMatch?: boolean;\n failureMessage?: string;\n};\n\nexport function regexRule(options: RegexRuleOptions): GuardrailRule {\n const regex = ensureRegExp(options.pattern, options.flags);\n const selector = options.selector || latestText;\n const failureMessage =\n options.failureMessage || `Message violates pattern: ${regex.toString()}`;\n const matchDisposition = options.matchDisposition || \"block\";\n const allowIfMatch = options.allowIfMatch === true;\n\n return {\n id: options.id,\n title: options.title || \"Regex compliance\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n const matches = regex.test(text);\n const passed = allowIfMatch ? matches : !matches;\n const disposition = matches ? matchDisposition : \"allow\";\n return {\n passed,\n reason: matches ? failureMessage : undefined,\n disposition,\n details: matches ? { pattern: regex.toString(), textSnippet: text.slice(0, 200) } : undefined,\n };\n },\n };\n}\n\nexport type JsonSchemaRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n schema: JSONSchema7 | z.ZodTypeAny;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowOnParseError?: boolean;\n};\n\nfunction compileValidator(\n schema: JSONSchema7 | z.ZodTypeAny\n): ((input: unknown) => { valid: boolean; errors?: string[] }) {\n if ((schema as z.ZodTypeAny)?._def) {\n const typed = schema as z.ZodTypeAny;\n return (input: unknown) => {\n const result = typed.safeParse(input);\n return {\n valid: result.success,\n errors: result.success\n ? undefined\n : result.error.issues.map((issue) => issue.message),\n };\n };\n }\n\n const validator: ValidateFunction = defaultAjv.compile(schema as JSONSchema7);\n return (input: unknown) => {\n const valid = validator(input);\n const errors = (validator.errors as ErrorObject[] | null | undefined)?.map((err) => {\n const path = (\"instancePath\" in err && typeof err.instancePath === \"string\" && err.instancePath.length > 0)\n ? err.instancePath\n : ((err as any).dataPath as string | undefined);\n return `${path || \"/\"} ${err.message || \"invalid\"}`;\n });\n return { valid: !!valid, errors };\n };\n}\n\nexport function jsonSchemaRule(options: JsonSchemaRuleOptions): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"block\";\n const validator = compileValidator(options.schema);\n\n return {\n id: options.id,\n title: options.title || \"JSON schema validation\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (err) {\n if (options.allowOnParseError) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message content is not valid JSON.\",\n details: { error: err instanceof Error ? err.message : String(err) },\n };\n }\n\n const result = validator(parsed);\n if (result.valid) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message JSON failed schema validation.\",\n details: { errors: result.errors },\n };\n },\n };\n}\n\nexport type CodeDetectionRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowList?: Array<RegExp | string>;\n};\n\nfunction containsAllowListed(text: string, allowList?: Array<RegExp | string>): boolean {\n if (!allowList?.length) return false;\n return allowList.some((pattern) => ensureRegExp(pattern).test(text));\n}\n\nconst codePattern = /```[\\s\\S]*?```|\\b(function|class|import|export|const|let|var)\\b|<[^>]+>/i;\n\nexport function codePresenceRule(options: CodeDetectionRuleOptions = {}): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"warn\";\n\n return {\n id: options.id,\n title: options.title || \"Code presence detection\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n if (!text) return { passed: true };\n if (containsAllowListed(text, options.allowList)) {\n return { passed: true };\n }\n const matches = codePattern.test(text);\n if (!matches) return { passed: true };\n return {\n passed: false,\n disposition,\n reason: \"Potential code content detected in message.\",\n details: { snippet: text.slice(0, 200) },\n };\n },\n };\n}\n\nconst guardianSchema = z.object({\n allow: z.boolean().describe(\"Whether the message should be allowed.\"),\n disposition: z.enum([\"allow\", \"warn\", \"block\"]).optional(),\n reason: z\n .string()\n .max(400, \"Reason must be 400 characters or fewer.\")\n .optional(),\n details: z.record(z.any()).optional(),\n});\n\nexport type AgentRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n agent: SmartAgentInstance<z.infer<typeof guardianSchema>>;\n systemPrompt?: string;\n payloadBuilder?: (context: GuardrailContext) => string;\n dispositionFallback?: GuardrailDisposition;\n};\n\nfunction defaultPayload(context: GuardrailContext): string {\n const latest = latestText(context);\n const transcript = threadText(context);\n return JSON.stringify(\n {\n phase: context.phase,\n latestMessage: latest,\n transcript,\n metadata: {\n runtime: {\n name: context.runtime?.name,\n version: context.runtime?.version,\n },\n },\n },\n null,\n 2\n );\n}\n\nexport function agentVerdictRule(options: AgentRuleOptions): GuardrailRule {\n const payloadBuilder = options.payloadBuilder || defaultPayload;\n const fallbackDisposition = options.dispositionFallback || \"block\";\n\n return {\n id: options.id,\n title: options.title || \"Agent-based guardrail\",\n description: options.description,\n async evaluate(context) {\n const payload = payloadBuilder(context);\n const systemPrompt =\n options.systemPrompt ||\n \"You are a safety auditor. Review the provided conversation payload and decide whether it should continue. Return JSON with keys allow (boolean), optional disposition ('allow' | 'warn' | 'block'), optional reason (string), and optional details (object).\";\n\n const review = await options.agent.invoke({\n messages: [\n { role: \"system\", content: systemPrompt } as any,\n { role: \"user\", content: payload } as any,\n ],\n });\n\n let parsed = review.output;\n if (!parsed) {\n try {\n parsed = guardianSchema.parse(JSON.parse(review.content));\n } catch {\n parsed = guardianSchema.parse({ allow: false, reason: \"Guard agent did not return structured output.\" });\n }\n }\n\n const disposition = parsed.disposition || (parsed.allow ? \"allow\" : fallbackDisposition);\n return {\n passed: parsed.allow,\n disposition,\n reason: parsed.reason,\n details: parsed.details,\n };\n },\n };\n}\n\nexport type CustomRuleCallback = (\n context: GuardrailContext\n) =>\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n | Promise<\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n >;\n\nexport type CustomRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n callback: CustomRuleCallback;\n defaultDisposition?: GuardrailDisposition;\n};\n\nexport function customCallbackRule(options: CustomRuleOptions): GuardrailRule {\n const fallbackDisposition = options.defaultDisposition || \"block\";\n return {\n id: options.id,\n title: options.title || \"Custom callback guardrail\",\n description: options.description,\n async evaluate(context) {\n const outcome = await options.callback(context);\n if (typeof outcome === \"boolean\") {\n return {\n passed: outcome,\n disposition: outcome ? \"allow\" : fallbackDisposition,\n };\n }\n return {\n passed: outcome.allow,\n disposition: outcome.disposition || (outcome.allow ? \"allow\" : fallbackDisposition),\n reason: outcome.reason,\n details: outcome.details,\n };\n },\n };\n}\n","import { GuardrailPhase, type ConversationGuardrail } from \"../types.js\";\nimport { evaluateGuardrails, createGuardrail } from \"./engine.js\";\nimport {\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n} from \"./checks.js\";\nimport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n} from \"./checks.js\";\n\nexport {\n evaluateGuardrails,\n createGuardrail,\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n};\n\nexport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n};\n\ntype GuardrailPresetBase = {\n guardrailId?: string;\n guardrailTitle?: string;\n guardrailDescription?: string;\n phases?: GuardrailPhase[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport type RegexGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<RegexRuleOptions, \"pattern\">;\n};\n\nexport function createRegexGuardrail(\n pattern: RegExp | string,\n options?: RegexGuardrailOptions\n): ConversationGuardrail {\n const rule = regexRule({ pattern, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"Regex Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type JsonGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<JsonSchemaRuleOptions, \"schema\">;\n};\n\nexport function createJsonGuardrail(\n schema: JsonSchemaRuleOptions[\"schema\"],\n options?: JsonGuardrailOptions\n): ConversationGuardrail {\n const rule = jsonSchemaRule({ schema, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"JSON Schema Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type CodeGuardrailOptions = GuardrailPresetBase & {\n rule?: CodeDetectionRuleOptions;\n};\n\nexport function createCodeGuardrail(options?: CodeGuardrailOptions): ConversationGuardrail {\n const ruleOptions = { disposition: \"warn\" as const, ...(options?.rule || {}) };\n const rule = codePresenceRule(ruleOptions);\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || ruleOptions.title || \"Code Presence Guardrail\",\n description: options?.guardrailDescription || ruleOptions.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapters/langchain.ts","../src/model.ts","../src/tool.ts","../src/prompts.ts","../src/types.ts","../src/nodes/resolver.ts","../src/utils/usage.ts","../src/utils/tracing.ts","../src/nodes/agentCore.ts","../src/nodes/tools.ts","../src/nodes/toolLimitFinalize.ts","../src/guardrails/engine.ts","../src/utils/stateSnapshot.ts","../src/utils/toolApprovals.ts","../src/utils/utilTokens.ts","../src/agent.ts","../src/nodes/agent.ts","../src/nodes/contextSummarize.ts","../src/utils/tokenManager.ts","../src/contextTools.ts","../src/graph/decisions.ts","../src/smart/index.ts","../src/utils/content.ts","../src/guardrails/checks.ts","../src/guardrails/index.ts"],"names":["createRequire","z","wrapped","GuardrailPhase","path","fs","nanoid","status","Buffer","durationMs","executionId","entry","systemMessage","AjvModule"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from \"zod\";\nimport { createRequire } from \"module\";\n\nimport type { ToolInterface } from \"../types.js\";\n\ntype ToolExecutor = (input: any) => Promise<any> | any;\n\nconst moduleName = \"@langchain/core/tools\";\nlet cachedToolFactory: ((impl: ToolExecutor, config: Record<string, any>) => any) | null | undefined;\nlet cachedHasAttemptedFactory = false;\n\nlet requireFn: ((specifier: string) => any) | null = null;\ntry {\n requireFn = createRequire(import.meta.url);\n} catch {\n requireFn = null;\n}\n\nfunction getExecutor(tool: ToolInterface): ToolExecutor {\n if (typeof tool.invoke === \"function\") return (input: any) => tool.invoke!(input);\n if (typeof tool.call === \"function\") return (input: any) => tool.call!(input);\n if (typeof (tool as any).func === \"function\") return (input: any) => (tool as any).func(input);\n if (typeof (tool as any).run === \"function\") return (input: any) => (tool as any).run(input);\n if (typeof (tool as unknown as ToolExecutor) === \"function\") {\n return tool as unknown as ToolExecutor;\n }\n throw new Error(`Tool ${tool?.name ?? \"<unnamed>\"} is not invokable`);\n}\n\nfunction loadLangchainToolFactory(): ((impl: ToolExecutor, config: Record<string, any>) => any) | null {\n if (cachedHasAttemptedFactory) return cachedToolFactory ?? null;\n cachedHasAttemptedFactory = true;\n cachedToolFactory = null;\n if (!requireFn) return null;\n try {\n const mod = requireFn(moduleName) as any;\n const factory = typeof mod?.tool === \"function\" ? mod.tool : undefined;\n if (typeof factory === \"function\") {\n cachedToolFactory = factory;\n }\n } catch {\n cachedToolFactory = null;\n }\n return cachedToolFactory ?? null;\n}\n\nfunction ensureSchema(candidate: any) {\n if (!candidate) return z.any();\n if (candidate instanceof z.ZodType) return candidate;\n return candidate;\n}\n\nexport function toLangchainTools(tools: ToolInterface[]): any[] {\n const factory = loadLangchainToolFactory();\n if (!factory) return tools;\n\n return tools.map((tool) => {\n if (!tool) return tool;\n if ((tool as any).__lcTool) return (tool as any).__lcTool;\n\n const executor = getExecutor(tool);\n try {\n const lcTool = factory(async (input: any) => executor(input), {\n name: tool.name,\n description: tool.description,\n schema: ensureSchema((tool as any).schema),\n });\n (tool as any).__lcTool = lcTool;\n return lcTool;\n } catch {\n return tool;\n }\n });\n}\n\nexport function fromLangchainTools<T extends ToolInterface = ToolInterface>(tools: any[]): T[] {\n return tools.map((tool: any) => {\n if (!tool) return tool;\n if ((tool as any).__source === \"smart\") return tool as T;\n if (typeof tool === \"function\" && !tool.name) {\n const wrapped = createSimpleTool({\n name: \"anonymous_tool\",\n description: undefined,\n schema: z.any(),\n executor: tool as ToolExecutor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n }\n\n const name = tool.name || (tool?.lc_kwargs?.name as string) || (tool?.config?.name as string) || \"tool\";\n const description = tool.description || tool?.lc_kwargs?.description;\n const schema = tool.schema || tool?.lc_kwargs?.schema || z.any();\n const executor: ToolExecutor = (input: any) => {\n if (typeof tool.invoke === \"function\") return tool.invoke(input);\n if (typeof tool.call === \"function\") return tool.call(input);\n if (typeof tool._call === \"function\") return tool._call(input);\n if (typeof tool.run === \"function\") return tool.run(input);\n if (typeof tool.func === \"function\") return tool.func(input);\n if (typeof tool === \"function\") return tool(input);\n throw new Error(`LangChain tool ${name} is not invokable`);\n };\n\n const wrapped = createSimpleTool({\n name,\n description,\n schema,\n executor,\n });\n (wrapped as any).__source = \"langchain\";\n (wrapped as any).__lc = tool;\n return wrapped as T;\n });\n}\n\nfunction createSimpleTool({\n name,\n description,\n schema,\n executor,\n}: {\n name: string;\n description?: string;\n schema: any;\n executor: ToolExecutor;\n}): ToolInterface {\n const invoke = async (input: any) => executor(input);\n return {\n name,\n description,\n schema,\n invoke,\n call: invoke,\n run: invoke,\n func: invoke,\n };\n}\n","// Generic base chat model contract used internally by agent-sdk.\n// We intentionally keep this minimal and implementation-agnostic so that\n// different framework specific models (LangChain, OpenAI SDK, Anthropic, etc.)\n// can be adapted without adding hard dependencies.\n\nimport { toLangchainTools } from \"./adapters/langchain.js\";\n\nexport interface BaseChatMessagePart {\n type?: string; // e.g. 'text'\n text?: string;\n content?: string; // provider specific\n [key: string]: any;\n}\n\nexport interface BaseChatMessage {\n role: 'system' | 'user' | 'assistant' | 'tool' | string;\n name?: string;\n content: string | BaseChatMessagePart[];\n // Tool call metadata (OpenAI style)\n tool_calls?: Array<{ id: string; type?: string; function?: { name: string; arguments: string } }>;\n tool_call_id?: string; // for tool response messages\n usage?: any; // optional provider usage shape\n response_metadata?: any; // optional provider wrapper metadata\n [key: string]: any; // allow extensions\n}\n\nexport interface BaseChatModel {\n // Invoke should accept an array of BaseChatMessage (system/user/assistant/tool)\n invoke(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage>;\n // Optional streaming method that yields incremental chunks or messages\n stream?(messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): AsyncIterable<BaseChatMessage | BaseChatMessagePart | string>;\n // Optional tool binding hook. If not present the agent will emulate simple pass-through.\n bindTools? (tools: any[]): BaseChatModel;\n // Optional metadata helpers\n modelName?: string;\n [key: string]: any; // allow arbitrary extensions\n}\n\nexport type SmartModel = BaseChatModel;\n\nexport function isSmartModel(m: any): m is SmartModel {\n return !!m && typeof m === 'object' && typeof m.invoke === 'function';\n}\n\nexport function withTools(model: SmartModel, tools: any[]) {\n if (model?.bindTools) return model.bindTools(tools);\n return model;\n}\n\n// --- Adapters ----------------------------------------------------------------\n\n// Duck-type adapter for LangChain ChatModel / Runnable style objects.\n// We DO NOT import LangChain here; instead we just check for common methods.\n// Usage: fromLangchainModel(new ChatOpenAI(...)) returns a BaseChatModel.\nexport function fromLangchainModel(lcModel: any): BaseChatModel {\n if (!lcModel) throw new Error('fromLangchainModel: model is undefined/null');\n\n const adapted: BaseChatModel = {\n invoke: async (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }): Promise<BaseChatMessage> => {\n // LangChain expects an array of LC message objects. If user passed LC messages already\n // they can skip adaptation; but here we accept our generic format and map to minimal LC shape.\n const normalizeContent = (content: any): any => {\n // Allow string passthrough\n if (content == null) return content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((part: any) => {\n if (!part || typeof part !== 'object') return part;\n if (part.type === 'text') return { type: 'text', text: String(part.text ?? '') };\n if (part.type === 'image_url') {\n const img = (part as any).image_url;\n // Support { url }, { base64, media_type }, or string\n if (typeof img === 'string') return { type: 'image_url', image_url: { url: img } };\n if (img && typeof img === 'object') {\n if ('url' in img) return { type: 'image_url', image_url: img };\n if ('base64' in img) {\n const media = (img as any).media_type || 'image/jpeg';\n const dataUrl = `data:${media};base64,${(img as any).base64}`;\n const detail = (img as any).detail;\n return { type: 'image_url', image_url: { url: dataUrl, detail } };\n }\n }\n // Fallback\n return part;\n }\n return part;\n });\n }\n return content;\n };\n const toLC = (m: BaseChatMessage): any => {\n // If it already looks like an LC BaseMessage (has _getType or id or lc_serializable), pass through.\n if ((m as any)._getType || (m as any).lc_serializable) return m as any;\n const role = m.role;\n // Map role to LC classes via dynamic constructors if available on lcModel or global scope.\n // We avoid importing, so fallback to generic object with role/content; many LC models accept that.\n return { role, content: normalizeContent(m.content), name: m.name, tool_calls: (m as any).tool_calls, tool_call_id: (m as any).tool_call_id };\n };\n const lcMessages = messages.map(toLC);\n const response = await lcModel.invoke(lcMessages, options);\n // Convert back to BaseChatMessage (attempt best-effort extraction)\n if (response && typeof response === 'object') {\n const content = (response as any).content ?? (response as any).text ?? '';\n return {\n role: (response as any).role || 'assistant',\n content,\n tool_calls: (response as any).tool_calls,\n usage: (response as any).usage,\n response_metadata: (response as any).response_metadata,\n ...response,\n } as BaseChatMessage;\n }\n return { role: 'assistant', content: String(response ?? '') };\n },\n stream: async function* (messages: BaseChatMessage[], options?: { signal?: AbortSignal; cancellationToken?: { isCancellationRequested: boolean } }) {\n if (typeof lcModel.stream !== 'function') return;\n\n const normalizeContent = (content: any): any => {\n if (content == null) return content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content.map((part: any) => {\n if (!part || typeof part !== 'object') return part;\n if (part.type === 'text') return { type: 'text', text: String(part.text ?? '') };\n if (part.type === 'image_url') {\n const img = (part as any).image_url;\n if (typeof img === 'string') return { type: 'image_url', image_url: { url: img } };\n if (img && typeof img === 'object') {\n if ('url' in img) return { type: 'image_url', image_url: img };\n if ('base64' in img) {\n const media = (img as any).media_type || 'image/jpeg';\n const dataUrl = `data:${media};base64,${(img as any).base64}`;\n const detail = (img as any).detail;\n return { type: 'image_url', image_url: { url: dataUrl, detail } };\n }\n }\n return part;\n }\n return part;\n });\n }\n return content;\n };\n const toLC = (m: BaseChatMessage): any => {\n if ((m as any)._getType || (m as any).lc_serializable) return m as any;\n return { role: m.role, content: normalizeContent(m.content), name: m.name, tool_calls: (m as any).tool_calls, tool_call_id: (m as any).tool_call_id };\n };\n\n const lcMessages = messages.map(toLC);\n for await (const chunk of lcModel.stream(lcMessages, options)) {\n yield chunk as any;\n }\n },\n bindTools: (tools: any[]) => {\n const lcReady = toLangchainTools(tools);\n if (typeof lcModel.bindTools === 'function') {\n const bound = lcModel.bindTools(lcReady);\n return fromLangchainModel(bound);\n }\n if (typeof lcModel.bind === 'function') {\n const bound = lcModel.bind({ tools: lcReady });\n return fromLangchainModel(bound);\n }\n return adapted;\n },\n modelName: lcModel.modelName || lcModel._modelId || lcModel._llmType || lcModel.name,\n _lc: lcModel,\n };\n\n return adapted;\n}\n\n// Placeholder for future adapters (OpenAI SDK, Anthropic, etc.) can follow a similar pattern.\n\n","import type { ZodSchema } from \"zod\";\n\nimport type { ToolInterface } from \"./types.js\";\n\nexport type SmartToolFn = (args: any) => Promise<any> | any;\n\nexport function createTool({\n name,\n description,\n schema,\n func,\n needsApproval,\n approvalPrompt,\n approvalDefaults,\n}: {\n name: string;\n description?: string;\n schema: ZodSchema;\n func: SmartToolFn;\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n}): ToolInterface {\n const execute: SmartToolFn = async (input: any) => func(input);\n\n const toolRecord: ToolInterface = {\n name,\n description,\n schema,\n // Our runtime prefers invoke but fallback helpers keep compatibility with LC-style tools.\n invoke: execute,\n call: execute,\n run: execute,\n func: execute,\n } as ToolInterface;\n\n if (typeof needsApproval === \"boolean\") {\n (toolRecord as any).needsApproval = needsApproval;\n }\n if (approvalPrompt !== undefined) {\n (toolRecord as any).approvalPrompt = approvalPrompt;\n }\n if (approvalDefaults !== undefined) {\n (toolRecord as any).approvalDefaults = approvalDefaults;\n }\n\n (toolRecord as any).__source = (toolRecord as any).__source || \"smart\";\n (toolRecord as any).__impl = func;\n\n return toolRecord;\n}\n","export function buildSystemPrompt(extra?: string, planning?: boolean, name: string = \"Agent\") {\n const extraTrimmed = extra?.trim();\n const agentHeader = `Agent Name: ${name}`;\n const planningBlock = planning\n ? `<planning>\nPLANNING IS MANDATORY.\n\nRules:\n1) Your FIRST action in every task is a single call to the tool \"manage_todo_list\" with operation=\"write\" and a full, ordered plan (1+ items). Even for trivial tasks, write a one-item plan.\n2) After every non-planning tool call, you MUST immediately call \"manage_todo_list\" with operation=\"write\" (or re-write) to update statuses and append one-line evidence on the affected item only.\n3) Keep exactly ONE item \"in-progress\" at any time; all others are \"not-started\" or \"completed\".\n4) Never reveal the plan text. Never summarize the plan in the assistant messages.\n5) If you ever produce an assistant message without having written a plan in this session, STOP and first write the plan via \"manage_todo_list\".\n</planning>`\n : \"\";\n return [\n agentHeader,\n \"You are an advanced AI agent that is concise, accurate, and helpful.\",\n \"Follow these rules:\",\n \"- Use tools only when they add value; avoid redundant calls.\",\n \"- Never fabricate tool results; if unavailable, say so briefly.\",\n \"- Prefer short, structured answers; use bullet points when helpful.\",\n \"- Keep privacy and safety: do not reveal secrets or sensitive data.\",\n \"- If inputs are ambiguous or missing, ask one concise clarifying question.\",\n \"- Reuse prior tool results already present in the conversation when sufficient.\",\n planningBlock,\n extraTrimmed ? `Extra instructions: ${extraTrimmed}` : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n","// LangChain specific types are removed from core; we define lightweight internal shapes.\n// If the user uses LangChain, they can still pass LC message objects; we treat them opaquely.\nimport type { ZodSchema } from \"zod\";\n\n// Image and content part types for multimodal messages\nexport type ImageURL =\n | { url: string; detail?: 'auto' | 'low' | 'high' }\n | { base64: string; media_type?: string; detail?: 'auto' | 'low' | 'high' }\n | string;\n\nexport type ContentPart =\n | { type: 'text'; text: string }\n | { type: 'image_url'; image_url: ImageURL }\n | { type: string; [key: string]: any };\n\n// Generic tool interface minimal contract (duck-typed). If user passes a LangChain Tool it will satisfy this.\nexport interface ToolInterface<TInput = any, TOutput = any, TCallOptions = any> {\n name: string;\n description?: string;\n // Either invoke(arg) or call(arg)\n invoke?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n call?: (input: TInput, config?: TCallOptions) => Promise<TOutput> | TOutput;\n schema?: any; // optional JSON schema / zod inference\n needsApproval?: boolean;\n approvalPrompt?: string;\n approvalDefaults?: any;\n [key: string]: any;\n}\n\nexport type RunnableConfig = { [key: string]: any };\n\n// Base message (internal) – we accept either string content or array parts.\nexport type BaseMessage = {\n role: string; // 'user' | 'assistant' | 'system' | 'tool' | etc.\n name?: string;\n content: string | ContentPart[];\n tool_calls?: any;\n tool_call_id?: string;\n [key: string]: any;\n};\n\n// AI message is any message with role=assistant; keep alias for usageConverter generics\nexport type AIMessage = BaseMessage & { role: 'assistant' };\n\nexport type Message = BaseMessage; // maintain alias used elsewhere\n\nexport enum GuardrailPhase {\n Request = \"request\",\n Response = \"response\",\n}\n\nexport type GuardrailDisposition = \"block\" | \"warn\" | \"allow\";\n\nexport type GuardrailContext = {\n phase: GuardrailPhase;\n messages: Message[];\n latestMessage?: Message;\n state: SmartState;\n runtime?: AgentRuntimeConfig;\n options: SmartAgentOptions;\n};\n\nexport type GuardrailRuleResult = {\n passed: boolean;\n reason?: string;\n details?: Record<string, any>;\n disposition?: GuardrailDisposition;\n};\n\nexport type GuardrailRule = {\n id?: string;\n title?: string;\n description?: string;\n evaluate: (\n context: GuardrailContext\n ) => Promise<GuardrailRuleResult> | GuardrailRuleResult;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailIncident = {\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n phase: GuardrailPhase;\n reason?: string;\n details?: Record<string, any>;\n disposition: GuardrailDisposition;\n};\n\nexport type ConversationGuardrail = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo: GuardrailPhase[];\n rules: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: (\n incident: GuardrailIncident,\n context: GuardrailContext\n ) => Promise<GuardrailDisposition | void> | GuardrailDisposition | void;\n metadata?: Record<string, any>;\n};\n\nexport type GuardrailOutcome = {\n ok: boolean;\n incidents: GuardrailIncident[];\n};\n\n// Common limits for both Agent and SmartAgent\nexport type AgentLimits = {\n maxToolCalls?: number;\n // Maximum number of tools to execute in parallel per turn\n maxParallelTools?: number;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentLimits = AgentLimits;\n\nexport type TraceSinkFileConfig = {\n type: \"file\";\n path?: string;\n};\n\nexport type TraceSinkCustomConfig = {\n type: \"custom\";\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n};\n\nexport type TraceSinkCognipeerConfig = {\n type: \"cognipeer\";\n apiKey: string;\n url?: string;\n};\n\nexport type TraceSinkHttpConfig = {\n type: \"http\";\n url: string;\n headers?: Record<string, string>;\n};\n\nexport type TraceSinkConfig =\n | TraceSinkFileConfig\n | TraceSinkCustomConfig\n | TraceSinkCognipeerConfig\n | TraceSinkHttpConfig;\n\nexport type TracingConfig = {\n enabled: boolean;\n logData?: boolean;\n sink?: TraceSinkConfig;\n};\n\n// Alias for backward compatibility\nexport type SmartAgentTracingConfig = TracingConfig;\n\n// --- Base Agent (simple, minimal) ---\nexport type AgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\n// --- Smart Agent (batteries-included with planning & summarization) ---\nexport type SmartAgentOptions = {\n // Human-friendly agent name used in prompts and logging\n name?: string;\n version?: string;\n model: any; // A BaseChatModel-like object with invoke(messages[]) => assistant message\n // Accept any tool implementation matching minimal ToolInterface (LangChain Tool compatible)\n tools?: Array<ToolInterface<any, any, any>>;\n // Optional guard layer descriptors to evaluate before sending requests and after receiving responses\n guardrails?: ConversationGuardrail[];\n // Predefined handoff targets exposed as tools automatically\n handoffs?: HandoffDescriptor[];\n limits?: AgentLimits;\n // Toggle token-aware context summarization. Default: true. Set to false to disable.\n summarization?: boolean | {\n enable: boolean;\n maxTokens: number;\n /** Max tokens to include in the summarization prompt itself (to avoid sending huge context to summarizer). Default: 8000 */\n summaryPromptMaxTokens?: number;\n /** Optional prompt template. Use {{conversation}} and {{previousSummary}} placeholders. */\n promptTemplate?: string;\n };\n // System prompt configuration\n systemPrompt?: string; // Plain string system prompt to append to defaults\n // Enable internal planning workflow (todo list tool + prompt hints)\n useTodoList?: boolean;\n // Optional: normalize provider-specific usage into a common shape\n usageConverter?: (finalMessage: AIMessage, fullState: SmartState, model: any) => any;\n // Optional Zod schema for structured output; when provided, invoke() will attempt to parse\n // the final assistant content as JSON and validate it. Parsed value is returned as result.output\n // with full TypeScript inference.\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\n// Runtime representation of an agent (used inside state.agent)\nexport type AgentRuntimeConfig = {\n name?: string;\n version?: string;\n model: any;\n tools: Array<ToolInterface<any, any, any>>;\n guardrails?: ConversationGuardrail[];\n systemPrompt?: string;\n limits?: AgentLimits;\n useTodoList?: boolean;\n outputSchema?: ZodSchema<any>;\n tracing?: TracingConfig;\n};\n\nexport type TraceMessageSection = {\n id?: string;\n kind: \"message\";\n label: string;\n role: string;\n content: string;\n metadata?: Record<string, any>;\n};\n\nexport type TraceToolCallSection = {\n id?: string;\n kind: \"tool_call\";\n label: string;\n tool: string;\n arguments?: any;\n};\n\nexport type TraceToolResultItem = {\n title?: string;\n url?: string;\n snippet?: string;\n [key: string]: any;\n};\n\nexport type TraceToolResultSection = {\n id?: string;\n kind: \"tool_result\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n};\n\nexport type TraceToolResponseSection = {\n id?: string;\n kind: \"tool_response\";\n label: string;\n tool: string;\n summary?: string;\n items?: TraceToolResultItem[];\n output?: any;\n};\n\nexport type TraceSummarySection = {\n id?: string;\n kind: \"summary\";\n label: string;\n content: string;\n};\n\nexport type TraceMetadataSection = {\n id?: string;\n kind: \"metadata\";\n label: string;\n data: Record<string, any>;\n};\n\nexport type TraceDataSection =\n | TraceMessageSection\n | TraceToolCallSection\n | TraceToolResultSection\n | TraceToolResponseSection\n | TraceSummarySection\n | TraceMetadataSection;\n\nexport type TraceEventRecord = {\n sessionId: string;\n id: string;\n type: string;\n label: string;\n sequence: number;\n timestamp: string;\n actor?: { scope?: string; name?: string; role?: string; version?: string };\n status: \"success\" | \"error\" | \"skipped\" | \"retry\";\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n data?: { sections: TraceDataSection[] };\n debug?: Record<string, any>;\n};\n\nexport type TraceErrorRecord = {\n eventId: string;\n message: string;\n stack?: string;\n type?: string;\n timestamp?: string;\n};\n\nexport type TraceSessionSummary = {\n totalDurationMs: number;\n totalInputTokens: number;\n totalOutputTokens: number;\n totalCachedInputTokens: number;\n totalBytesIn: number;\n totalBytesOut: number;\n eventCounts: Record<string, number>;\n};\n\nexport type TraceSessionStatus = \"in_progress\" | \"success\" | \"error\" | \"partial\";\n\nexport type TraceSinkSnapshot =\n | { type: \"file\"; path: string }\n | { type: \"custom\" }\n | { type: \"cognipeer\"; url: string }\n | { type: \"http\"; url: string };\n\nexport type TraceSessionConfigSnapshot = {\n enabled: boolean;\n logData: boolean;\n sink: TraceSinkSnapshot;\n};\n\nexport type TraceSessionFile = {\n sessionId: string;\n startedAt: string;\n endedAt?: string;\n durationMs?: number;\n agent?: { name?: string; version?: string; model?: string; provider?: string };\n config: TraceSessionConfigSnapshot;\n summary: TraceSessionSummary;\n events: TraceEventRecord[];\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n};\n\nexport type ResolvedTraceSink =\n | { type: \"file\"; baseDir: string }\n | { type: \"custom\"; onEvent?: (event: TraceEventRecord) => void | Promise<void>; onSession?: (session: TraceSessionFile) => void | Promise<void> }\n | { type: \"cognipeer\"; url: string; apiKey: string }\n | { type: \"http\"; url: string; headers?: Record<string, string> };\n\nexport type ResolvedTraceConfig = {\n enabled: boolean;\n mode: \"batched\";\n logData: boolean;\n sink: ResolvedTraceSink;\n};\n\nexport type TraceSessionRuntime = {\n sessionId: string;\n startedAt: number;\n resolvedConfig: ResolvedTraceConfig;\n events: TraceEventRecord[];\n summary: TraceSessionSummary;\n status: TraceSessionStatus;\n errors: TraceErrorRecord[];\n fileBaseDir?: string;\n fileSessionDir?: string;\n};\n\n// Handoff descriptor returned from childAgent.asHandoff(...)\nexport type HandoffDescriptor<TParsed = any> = {\n type: \"handoff\";\n toolName: string;\n description: string;\n // Optional zod schema for handoff arguments; fallback is { reason: string }\n schema?: ZodSchema<any>;\n target: SmartAgentInstance<TParsed> & { __runtime: AgentRuntimeConfig };\n};\n\n// Base Agent State (minimal)\nexport type AgentState = {\n messages: Message[];\n // Active agent runtime parameters (dynamically swapped on handoff)\n agent?: AgentRuntimeConfig;\n toolHistory?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n }>;\n toolCache?: Record<string, any>;\n toolCallCount?: number;\n metadata?: Record<string, any>;\n ctx?: Record<string, any>;\n pendingApprovals?: PendingToolApproval[];\n // Usage tracking (per agent model call). Each agent turn that produces an AI response\n // appends an entry to usage.perRequest. totals aggregates by modelName.\n usage?: {\n perRequest: Array<{\n id: string; // unique id per request\n modelName: string; // resolved provider/model identifier\n usage: any; // raw provider usage object (unmodified)\n timestamp: string; // ISO time of capture\n turn: number; // 1-based index of agent turn producing this response\n cachedInput?: number; // cached / reused prompt tokens (provider specific)\n }>;\n totals: Record<string, { input: number; output: number; total: number; cachedInput: number }>;\n };\n guardrailResult?: GuardrailOutcome;\n};\n\n// Smart Agent State (extends base with planning & summarization)\nexport type SmartState = AgentState & {\n summaries?: string[];\n toolHistoryArchived?: Array<{\n executionId: string;\n toolName: string;\n args: any;\n output: any;\n rawOutput?: any;\n timestamp?: string;\n summarized?: boolean;\n originalTokenCount?: number | null;\n messageId?: string;\n tool_call_id?: string;\n fromCache?: boolean;\n }>;\n plan?: { version: number; steps: Array<{ index: number; title: string; status: string }>; lastUpdated?: string } | null;\n planVersion?: number;\n};\n\n// Event types for observability and future streaming support\nexport type ToolCallEvent = {\n type: \"tool_call\";\n phase: \"start\" | \"success\" | \"error\" | \"skipped\";\n name: string;\n id?: string;\n args?: any;\n result?: any;\n error?: { message: string } | undefined;\n durationMs?: number;\n};\n\nexport type PlanEvent = {\n type: \"plan\";\n source: \"manage_todo_list\" | \"system\";\n operation?: \"write\" | \"read\";\n todoList?: Array<{ id: number; title: string; description: string; status: string; evidence?: string }>;\n version?: number;\n};\n\nexport type SummarizationEvent = {\n type: \"summarization\";\n summary: string;\n archivedCount?: number;\n};\n\nexport type FinalAnswerEvent = {\n type: \"finalAnswer\";\n content: string;\n};\n\nexport type MetadataEvent = {\n type: \"metadata\";\n usage?: any;\n modelName?: string;\n limits?: SmartAgentLimits;\n [key: string]: any;\n};\n\nexport type ProgressEvent = {\n type: \"progress\";\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamEvent = {\n type: \"stream\";\n text: string;\n isFinal?: boolean;\n};\n\nexport type CancelledEvent = {\n type: \"cancelled\";\n stage?: string;\n reason?: string;\n};\n\nexport type HandoffEvent = {\n type: \"handoff\";\n from?: string;\n to?: string;\n toolName: string;\n};\n\nexport type ToolApprovalStatus = \"pending\" | \"approved\" | \"rejected\" | \"executed\";\n\nexport type PendingToolApproval = {\n id: string;\n toolCallId: string;\n toolName: string;\n args: any;\n status: ToolApprovalStatus;\n requestedAt: string;\n decidedAt?: string;\n decidedBy?: string;\n comment?: string;\n approvedArgs?: any;\n resolvedAt?: string;\n executionId?: string;\n metadata?: Record<string, any>;\n};\n\nexport type ToolApprovalResolution = {\n id: string;\n approved: boolean;\n approvedArgs?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type ToolApprovalEvent = {\n type: \"tool_approval\";\n status: \"pending\" | \"approved\" | \"rejected\";\n id: string;\n toolName: string;\n toolCallId?: string;\n args?: any;\n decidedBy?: string;\n comment?: string;\n};\n\nexport type GuardrailEvent = {\n type: \"guardrail\";\n phase: GuardrailPhase;\n guardrailId?: string;\n guardrailTitle?: string;\n ruleId?: string;\n ruleTitle?: string;\n disposition: GuardrailDisposition;\n reason?: string;\n details?: Record<string, any>;\n};\n\nexport type SmartAgentEvent =\n | ToolCallEvent\n | ToolApprovalEvent\n | PlanEvent\n | SummarizationEvent\n | FinalAnswerEvent\n | MetadataEvent\n | HandoffEvent\n | GuardrailEvent\n | ProgressEvent\n | StreamEvent\n | CancelledEvent;\n\nexport type CancellationTokenLike = {\n readonly isCancellationRequested: boolean;\n onCancellationRequested?: (listener: () => void) => { dispose(): void } | void;\n};\n\nexport type ProgressUpdate = {\n stage?: string;\n message?: string;\n percent?: number;\n detail?: any;\n};\n\nexport type StreamChunk = {\n text: string;\n isFinal?: boolean;\n};\n\nexport type InvokeConfig = RunnableConfig & {\n // Optional per-call event hook (overrides SmartAgentOptions.onEvent if provided)\n onEvent?: (event: SmartAgentEvent) => void;\n // Optional per-call progress hook\n onProgress?: (progress: ProgressUpdate) => void;\n // Optional per-call streaming hook\n onStream?: (chunk: StreamChunk) => void;\n // Enable streaming if supported by model\n stream?: boolean;\n // Cancellation control\n cancellationToken?: CancellationTokenLike | AbortSignal;\n // Optional timeout for the full invoke (ms)\n timeoutMs?: number;\n // Optional per-call limits override\n limits?: Partial<AgentLimits>;\n // Invoked after each major stage; return true to checkpoint execution (state.ctx.__paused will be set).\n onStateChange?: (state: SmartState) => boolean;\n // Optional reason stored alongside checkpoint metadata.\n checkpointReason?: string;\n};\n\nexport type SnapshotRuntimeHint = {\n name?: string;\n version?: string;\n tools?: string[];\n};\n\nexport type SerializableSmartState = Omit<SmartState, \"agent\"> & { agent?: undefined };\n\nexport type AgentSnapshotMetadata = {\n createdAt: string;\n tag?: string;\n paused?: {\n stage?: string;\n iteration?: number;\n reason?: string;\n } | null;\n};\n\nexport type AgentSnapshot = {\n state: SerializableSmartState;\n runtimeHint?: SnapshotRuntimeHint;\n metadata: AgentSnapshotMetadata;\n};\n\nexport type SnapshotOptions = {\n tag?: string;\n includeRuntimeHint?: boolean;\n};\n\nexport type RestoreSnapshotOptions = {\n agent?: AgentRuntimeConfig;\n ctx?: Record<string, any>;\n mergeCtx?: boolean;\n};\n\n// Structured agent result returned by invoke\nexport type AgentInvokeResult<TOutput = unknown> = {\n content: string;\n // If outputSchema is set, this will contain the parsed and validated output.\n // TOutput will be inferred from the provided Zod schema.\n output?: TOutput;\n metadata: { usage?: any };\n messages: Message[];\n state?: SmartState;\n};\n\n// Base Agent instance (minimal)\nexport type AgentInstance<TOutput = unknown> = {\n invoke: (input: SmartState, config?: InvokeConfig) => Promise<AgentInvokeResult<TOutput>>;\n snapshot: (state: SmartState, options?: SnapshotOptions) => AgentSnapshot;\n resume: (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => Promise<AgentInvokeResult<TOutput>>;\n resolveToolApproval: (state: SmartState, resolution: ToolApprovalResolution) => SmartState;\n // Convert this agent into a tool usable by another agent. Accepts optional overrides.\n asTool: (opts: { toolName: string; description?: string; inputDescription?: string } ) => ToolInterface<any, any, any>;\n // Create a handoff descriptor so another agent can switch control to this one mid-conversation\n asHandoff: (opts: { toolName?: string; description?: string; schema?: ZodSchema<any>; }) => HandoffDescriptor<TOutput>;\n __runtime: AgentRuntimeConfig;\n};\n\n// Smart Agent instance (same as AgentInstance for now, but semantically separate)\nexport type SmartAgentInstance<TOutput = unknown> = AgentInstance<TOutput>;\n","import type { SmartState } from \"../types.js\";\n\n// Ensures required state fields exist and normalizes incoming messages\nexport function createResolverNode() {\n return async (state: SmartState): Promise<SmartState> => {\n const messages = Array.isArray(state.messages) ? state.messages : [];\n return {\n ...state,\n messages,\n summaries: state.summaries || [],\n toolCallCount: state.toolCallCount || 0,\n toolCache: state.toolCache || {},\n toolHistory: state.toolHistory || [],\n toolHistoryArchived: state.toolHistoryArchived || [],\n pendingApprovals: state.pendingApprovals || [],\n plan: state.plan || null,\n planVersion: state.planVersion || 0,\n } as SmartState;\n };\n}\n","// Normalizes provider-specific usage objects into a common shape.\n// Target shape:\n// {\n// prompt_tokens: number;\n// completion_tokens: number;\n// total_tokens: number;\n// prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n// completion_tokens_details: { reasoning_tokens: number; audio_tokens: number; accepted_prediction_tokens: number; rejected_prediction_tokens: number };\n// raw?: any; // original provider usage\n// }\n\nexport type NormalizedUsage = {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n prompt_tokens_details: { cached_tokens: number; audio_tokens: number };\n completion_tokens_details: {\n reasoning_tokens: number;\n audio_tokens: number;\n accepted_prediction_tokens: number;\n rejected_prediction_tokens: number;\n };\n raw?: any;\n};\n\nexport function normalizeUsage(raw: any | undefined | null): NormalizedUsage | undefined {\n if (!raw) return undefined;\n // Canonical numeric fields from various provider key aliases.\n const prompt = num(raw.prompt_tokens, raw.input_tokens, raw.promptTokens, raw.total_prompt_tokens);\n const completion = num(raw.completion_tokens, raw.output_tokens, raw.completionTokens, raw.total_completion_tokens);\n // total might be explicitly provided or computed.\n const total = num(\n raw.total_tokens,\n raw.totalTokens,\n (typeof prompt === 'number' ? prompt : 0) + (typeof completion === 'number' ? completion : 0)\n );\n\n // Details: attempt to pull from common nested spots else zeros\n const promptDetailsSrc = raw.prompt_tokens_details || raw.promptTokensDetails || {};\n const completionDetailsSrc = raw.completion_tokens_details || raw.completionTokensDetails || {};\n\n const normalized: NormalizedUsage = {\n prompt_tokens: safe(prompt),\n completion_tokens: safe(completion),\n total_tokens: safe(total || (prompt || 0) + (completion || 0)),\n prompt_tokens_details: {\n cached_tokens: safe(\n promptDetailsSrc.cached_tokens || promptDetailsSrc.cached || raw.cached_input_tokens || raw.cached_prompt_tokens\n ),\n audio_tokens: safe(promptDetailsSrc.audio_tokens),\n },\n completion_tokens_details: {\n reasoning_tokens: safe(completionDetailsSrc.reasoning_tokens),\n audio_tokens: safe(completionDetailsSrc.audio_tokens),\n accepted_prediction_tokens: safe(completionDetailsSrc.accepted_prediction_tokens),\n rejected_prediction_tokens: safe(completionDetailsSrc.rejected_prediction_tokens),\n },\n raw,\n };\n return normalized;\n}\n\nfunction num(...vals: any[]): number | undefined {\n for (const v of vals) {\n if (v === 0) return 0;\n if (v == null) continue;\n const n = Number(v);\n if (!Number.isNaN(n)) return n;\n }\n return undefined;\n}\nfunction safe(v: any): number { const n = Number(v); return Number.isFinite(n) && n >= 0 ? n : 0; }\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Buffer } from \"node:buffer\";\nimport { nanoid } from \"nanoid\";\nimport type {\n AgentRuntimeConfig,\n ResolvedTraceConfig,\n ResolvedTraceSink,\n SmartAgentOptions,\n SmartAgentTracingConfig,\n TraceDataSection,\n TraceEventRecord,\n TraceSessionConfigSnapshot,\n TraceSessionFile,\n TraceSessionRuntime,\n TraceSessionStatus,\n TraceSessionSummary,\n TraceSinkConfig,\n TraceSinkSnapshot,\n TraceToolCallSection,\n} from \"../types.js\";\n\nconst DEFAULT_COGNIPEER_URL = \"https://console.cognipeer.com/api/client/v1/tracing/sessions\";\n\nexport function fileSink(path?: string): TraceSinkConfig {\n return { type: \"file\", path };\n}\n\ntype CustomSinkArg =\n | ((event: TraceEventRecord) => void | Promise<void>)\n | {\n onEvent?: (event: TraceEventRecord) => void | Promise<void>;\n onSession?: (session: TraceSessionFile) => void | Promise<void>;\n };\n\nexport function customSink(handler: CustomSinkArg): TraceSinkConfig {\n if (typeof handler === \"function\") {\n return { type: \"custom\", onEvent: handler };\n }\n return {\n type: \"custom\",\n onEvent: typeof handler?.onEvent === \"function\" ? handler.onEvent : undefined,\n onSession: typeof handler?.onSession === \"function\" ? handler.onSession : undefined,\n };\n}\n\nexport function cognipeerSink(apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(url: string | undefined, apiKey: string): TraceSinkConfig;\nexport function cognipeerSink(first: string | undefined, second?: string): TraceSinkConfig {\n if (second === undefined) {\n const apiKey = first ?? \"\";\n return { type: \"cognipeer\", apiKey };\n }\n const url = typeof first === \"string\" && first.trim().length > 0 ? first.trim() : undefined;\n return { type: \"cognipeer\", url, apiKey: second };\n}\n\nexport function httpSink(url: string, headers?: Record<string, string>): TraceSinkConfig {\n return { type: \"http\", url, headers };\n}\nfunction resolveLogsBaseDir(customPath?: string, ensureDirectory = true) {\n const root = process.cwd();\n const base = customPath && customPath.trim().length > 0 ? customPath : path.join(root, \"logs\");\n if (ensureDirectory) {\n ensureDir(base);\n }\n return base;\n}\n\nfunction coerceToString(value: unknown): string | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (typeof value === \"function\" && value.length === 0) {\n try {\n return coerceToString((value as () => unknown)());\n } catch {\n return undefined;\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n const normalized = coerceToString(item);\n if (normalized) return normalized;\n }\n return undefined;\n }\n return undefined;\n}\n\n// Metadata extraction paths - defined once for DRY principle\nconst METADATA_PATHS = {\n model: [\n \"model\", \"options.model\", \"params.model\", \"config.model\", \n \"configuration.model\", \"metadata.model\", \"lc_kwargs.model\",\n \"metadata.modelName\", \"modelName\", \"lc_alias\", \"model_id\", \"id\",\n \"_model\", \"_modelName\", \"__model\", \"_modelId\", \"_llmType\"\n ],\n provider: [\n \"provider\", \"options.provider\", \"params.provider\", \"config.provider\",\n \"configuration.provider\", \"metadata.provider\", \"lc_kwargs.provider\"\n ],\n};\n\n/** Safely extract nested object value using dot notation path */\nfunction getNestedValue(obj: any, path: string): any {\n if (!obj || typeof path !== \"string\") return undefined;\n return path.split(\".\").reduce((current, key) => current?.[key], obj);\n}\n\n/** Unified metadata extraction - eliminates code duplication between model/provider extraction */\nfunction extractMetadata(model: any, paths: string[]): string | undefined {\n if (!model) return undefined;\n \n // Direct extraction from model\n for (const path of paths) {\n const value = getNestedValue(model, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n \n // Try LangChain wrapper (_lc property)\n const maybeLc = model?._lc;\n if (maybeLc) {\n for (const path of paths) {\n const value = getNestedValue(maybeLc, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Try client/api/service properties\n const maybeClient = model?.client || model?.api || model?.service;\n if (maybeClient) {\n for (const path of paths) {\n const value = getNestedValue(maybeClient, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n // Constructor name as last resort (filter out generic types)\n const constructorName = model?.constructor?.name;\n if (constructorName && ![\"Object\", \"Function\"].includes(constructorName)) {\n return constructorName;\n }\n \n return undefined;\n}\n\nexport function getModelName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.model);\n}\n\nexport function getProviderName(model: any): string | undefined {\n return extractMetadata(model, METADATA_PATHS.provider);\n}\n\nfunction inferModelFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific metadata paths for inference from history\n const messagePaths = [\n \"metadata.model\", \"metadata.modelName\", \"response_metadata.model\",\n \"response_metadata.modelName\", \"usage_metadata.model\", \"model\", \"modelName\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nfunction inferProviderFromMessages(messageList?: any[]): string | undefined {\n if (!Array.isArray(messageList)) return undefined;\n \n // Message-specific paths for provider inference\n const messagePaths = [\n \"metadata.provider\", \"response_metadata.provider\", \"usage_metadata.provider\", \"provider\"\n ];\n \n // Search backwards (most recent message has best info)\n for (let i = messageList.length - 1; i >= 0; i--) {\n const message = messageList[i];\n if (!message) continue;\n \n for (const path of messagePaths) {\n const value = getNestedValue(message, path);\n const str = coerceToString(value);\n if (str) return str;\n }\n }\n \n return undefined;\n}\n\nconst DEFAULT_TRACE_CONFIG = {\n enabled: false,\n logData: true,\n} as const;\n\nfunction ensureDir(p: string) {\n if (!fs.existsSync(p)) {\n fs.mkdirSync(p, { recursive: true });\n }\n}\n\nfunction withDefaults(config?: SmartAgentTracingConfig): ResolvedTraceConfig {\n const enabled = Boolean(config?.enabled);\n const logData = config?.logData ?? DEFAULT_TRACE_CONFIG.logData;\n\n let sink: ResolvedTraceSink;\n try {\n sink = resolveSink(config?.sink);\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Invalid tracing sink configuration. Falling back to file sink.\", err);\n }\n sink = resolveSink({ type: \"file\" });\n }\n\n return {\n enabled,\n logData,\n mode: \"batched\",\n sink,\n };\n}\n\nfunction resolveSink(sink?: TraceSinkConfig): ResolvedTraceSink {\n const candidate = sink ?? { type: \"file\" };\n switch (candidate.type) {\n case \"file\": {\n const baseDir = resolveLogsBaseDir(candidate.path, false);\n return { type: \"file\", baseDir };\n }\n case \"custom\": {\n const onEvent = typeof candidate.onEvent === \"function\" ? candidate.onEvent : undefined;\n const onSession = typeof candidate.onSession === \"function\" ? candidate.onSession : undefined;\n return { type: \"custom\", onEvent, onSession };\n }\n case \"cognipeer\": {\n const apiKey = typeof candidate.apiKey === \"string\" ? candidate.apiKey.trim() : \"\";\n if (!apiKey) {\n throw new Error(\"cognipeer sink requires a non-empty apiKey\");\n }\n const url = typeof candidate.url === \"string\" && candidate.url.trim().length > 0\n ? candidate.url.trim()\n : DEFAULT_COGNIPEER_URL;\n return { type: \"cognipeer\", url, apiKey };\n }\n case \"http\": {\n const url = typeof candidate.url === \"string\" ? candidate.url.trim() : \"\";\n if (!url) {\n throw new Error(\"http sink requires a non-empty url\");\n }\n const headers = candidate.headers ? { ...candidate.headers } : undefined;\n return headers ? { type: \"http\", url, headers } : { type: \"http\", url };\n }\n default: {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Unknown tracing sink type. Falling back to file sink.\", candidate);\n }\n return resolveSink({ type: \"file\" });\n }\n }\n}\n\nfunction snapshotSink(runtime: TraceSessionRuntime): TraceSinkSnapshot {\n const sink = runtime.resolvedConfig.sink;\n switch (sink.type) {\n case \"file\":\n return { type: \"file\", path: runtime.fileBaseDir || sink.baseDir };\n case \"custom\":\n return { type: \"custom\" };\n case \"cognipeer\":\n return { type: \"cognipeer\", url: sink.url };\n case \"http\":\n return { type: \"http\", url: sink.url };\n default:\n return { type: \"custom\" };\n }\n}\n\nfunction buildConfigSnapshot(runtime: TraceSessionRuntime): TraceSessionConfigSnapshot {\n return {\n enabled: runtime.resolvedConfig.enabled,\n logData: runtime.resolvedConfig.logData,\n sink: snapshotSink(runtime),\n };\n}\n\nasync function postTraceSession(\n url: string,\n headers: Record<string, string> | undefined,\n payload: TraceSessionFile\n): Promise<void> {\n const fetchFn = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : undefined;\n if (!fetchFn) {\n throw new Error(\"HTTP sink requires fetch to be available in this runtime.\");\n }\n\n const finalHeaders = { ...(headers || {}) } as Record<string, string>;\n if (!Object.keys(finalHeaders).some((key) => key.toLowerCase() === \"content-type\")) {\n finalHeaders[\"content-type\"] = \"application/json\";\n }\n\n try {\n const response = await fetchFn(url, {\n method: \"POST\",\n headers: finalHeaders,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let responseText = \"\";\n try {\n responseText = await response.text();\n } catch {\n // ignore\n }\n const statusLine = `HTTP ${response.status}${response.statusText ? ` ${response.statusText}` : \"\"}`;\n const bodyPreview = responseText ? ` - ${responseText.slice(0, 200)}` : \"\";\n const errorMsg = `${statusLine}${bodyPreview}`;\n \n // DEBUG error logging\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Error posting to\", url, \":\", errorMsg);\n }\n \n throw new Error(errorMsg);\n }\n } catch (err) {\n // Rethrow with error info\n const errMsg = err instanceof Error ? err.message : String(err);\n if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"[Tracing] Failed to post:\", errMsg);\n }\n throw err;\n }\n}\n\nfunction createEmptySummary(): TraceSessionSummary {\n return {\n totalDurationMs: 0,\n totalInputTokens: 0,\n totalOutputTokens: 0,\n totalCachedInputTokens: 0,\n totalBytesIn: 0,\n totalBytesOut: 0,\n eventCounts: {},\n };\n}\n\nfunction generateSessionId(): string {\n return `sess_${nanoid(18)}`;\n}\n\nfunction generateEventId(sequence: number): string {\n return `evt_${String(sequence).padStart(4, \"0\")}_${nanoid(4)}`;\n}\n\nfunction defaultEventLabel(type: string): string {\n switch (type) {\n case \"ai_call\":\n return \"Assistant Response\";\n case \"tool_call\":\n return \"Tool Execution\";\n case \"session\":\n return \"Session Event\";\n default:\n return type.replace(/_/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n\nfunction ensureUniqueSections(eventId: string, sections?: TraceDataSection[]): TraceDataSection[] | undefined {\n if (!sections || sections.length === 0) return undefined;\n const labelCounts = new Map<string, number>();\n const normalized: TraceDataSection[] = [];\n let counter = 1;\n\n for (const section of sections) {\n const baseLabel = section.label?.trim().length ? section.label.trim() : defaultSectionLabel(section.kind);\n const nextCount = (labelCounts.get(baseLabel) || 0) + 1;\n labelCounts.set(baseLabel, nextCount);\n const finalLabel = nextCount > 1 ? `${baseLabel} (${nextCount})` : baseLabel;\n\n let id = section.id?.trim();\n if (!id) {\n id = `${section.kind}-${eventId}-${String(counter).padStart(2, \"0\")}`;\n }\n counter += 1;\n\n normalized.push({\n ...section,\n id,\n label: finalLabel,\n } as TraceDataSection);\n }\n\n return normalized;\n}\n\nfunction defaultSectionLabel(kind: TraceDataSection[\"kind\"]): string {\n switch (kind) {\n case \"message\":\n return \"Message\";\n case \"tool_call\":\n return \"Tool Call\";\n case \"tool_result\":\n return \"Tool Result\";\n case \"tool_response\":\n return \"Tool Response\";\n case \"summary\":\n return \"Summary\";\n case \"metadata\":\n return \"Details\";\n default:\n return \"Section\";\n }\n}\n\nfunction buildMessageLabel(role: string, index: number): string {\n const normalized = role?.trim().length ? role.trim() : \"message\";\n const base = `${normalized.charAt(0).toUpperCase()}${normalized.slice(1)} Message`;\n return index > 1 ? `${base} #${index}` : base;\n}\n\nfunction toDisplayString(value: any): string {\n const sanitized = sanitizeTracePayload(value);\n if (sanitized == null) return \"\";\n if (typeof sanitized === \"string\") return sanitized;\n if (Array.isArray(sanitized)) {\n return sanitized\n .map((item) => toDisplayString(item))\n .filter((part) => part && part.trim().length > 0)\n .join(\"\\n\");\n }\n if (typeof sanitized === \"object\") {\n if (typeof (sanitized as any).text === \"string\" && Object.keys(sanitized).length === 1) {\n return (sanitized as any).text;\n }\n if (typeof (sanitized as any).content === \"string\") {\n return (sanitized as any).content;\n }\n try {\n return JSON.stringify(sanitized, null, 2);\n } catch {\n return String(sanitized);\n }\n }\n return String(sanitized);\n}\n\nfunction parseToolArguments(args: any): any {\n if (args == null) return undefined;\n if (typeof args === \"string\") {\n try {\n return JSON.parse(args);\n } catch {\n return args;\n }\n }\n return args;\n}\n\nfunction collectToolCallSectionsFromMessage(message: any): TraceToolCallSection[] {\n const sections: TraceToolCallSection[] = [];\n if (!message) return sections;\n\n const addCall = (call: any) => {\n if (!call) return;\n const toolName = call?.name || call?.tool || call?.function?.name || call?.function_call?.name || \"tool\";\n const rawArgs = call?.arguments ?? call?.args ?? call?.input ?? call?.function?.arguments ?? call?.function_call?.arguments;\n const parsedArgs = parseToolArguments(rawArgs);\n const argumentsPayload = sanitizeTracePayload(parsedArgs ?? rawArgs ?? {});\n sections.push({\n kind: \"tool_call\",\n label: `Tool Call: ${toolName}`,\n tool: toolName,\n arguments: argumentsPayload,\n });\n };\n\n const directCalls = Array.isArray(message?.tool_calls) ? message.tool_calls : undefined;\n if (directCalls) {\n directCalls.forEach((call: any) => addCall(call));\n }\n\n return sections;\n}\n\nfunction convertMessageListToSections(messageList?: any[]): TraceDataSection[] | undefined {\n if (!Array.isArray(messageList) || messageList.length === 0) return undefined;\n const sections: TraceDataSection[] = [];\n const roleCounts = new Map<string, number>();\n\n for (const message of messageList) {\n if (!message) continue;\n\n const toolSections = collectToolCallSectionsFromMessage(message);\n if (toolSections.length > 0) {\n sections.push(...toolSections);\n continue;\n }\n\n const role = typeof message?.role === \"string\" ? message.role : \"assistant\";\n const next = (roleCounts.get(role) || 0) + 1;\n roleCounts.set(role, next);\n\n let content = toDisplayString(message?.content ?? \"\");\n if (!content || !content.trim().length) {\n if (toolSections.length > 0) {\n content = \"[tool call]\";\n } else if (typeof message?.content === \"undefined\" || message?.content === null) {\n continue;\n } else {\n content = toDisplayString(sanitizeTracePayload(message?.content));\n if (!content || !content.trim().length) continue;\n }\n }\n\n sections.push({\n kind: \"message\",\n label: buildMessageLabel(role, next),\n role,\n content,\n metadata: typeof message?.name === \"string\" ? { name: message.name } : undefined,\n });\n }\n\n return sections.length > 0 ? sections : undefined;\n}\n\nexport function createTraceSession(opts: SmartAgentOptions): TraceSessionRuntime | undefined {\n const cfg = withDefaults(opts.tracing);\n if (!cfg.enabled) return undefined;\n\n const sessionId = generateSessionId();\n const runtime: TraceSessionRuntime = {\n sessionId,\n startedAt: Date.now(),\n resolvedConfig: cfg,\n events: [],\n summary: createEmptySummary(),\n status: \"in_progress\",\n errors: [],\n };\n\n if (cfg.sink.type === \"file\") {\n const baseDir = cfg.sink.baseDir;\n ensureDir(baseDir);\n const sessionDir = path.join(baseDir, sessionId);\n ensureDir(sessionDir);\n runtime.fileBaseDir = baseDir;\n runtime.fileSessionDir = sessionDir;\n }\n\n return runtime;\n}\n\nexport function recordTraceEvent(\n session: TraceSessionRuntime | undefined,\n event: {\n type: string;\n label?: string;\n timestamp?: string;\n actor?: TraceEventRecord[\"actor\"];\n status?: TraceEventRecord[\"status\"];\n durationMs?: number;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n cachedInputTokens?: number;\n requestBytes?: number;\n responseBytes?: number;\n model?: string;\n provider?: string;\n toolExecutionId?: string;\n retryOf?: string;\n error?: { message: string; stack?: string } | null;\n messageList?: any[];\n debug?: Record<string, any>;\n }\n): TraceEventRecord | undefined {\n if (!session) return undefined;\n\n\n const sequence = session.events.length + 1;\n const id = generateEventId(sequence);\n const timestampIso = event.timestamp || new Date().toISOString();\n const status = event.status ?? \"success\";\n const baseLabel = event.label?.trim().length ? event.label.trim() : defaultEventLabel(event.type);\n const eventLabel = `${baseLabel} #${sequence}`;\n\n const durationMs = event.durationMs !== undefined ? Number(event.durationMs) : undefined;\n if (!Number.isNaN(durationMs ?? NaN) && durationMs !== undefined) {\n session.summary.totalDurationMs += durationMs;\n }\n\n const inputTokens = event.inputTokens !== undefined ? Number(event.inputTokens) : undefined;\n if (!Number.isNaN(inputTokens ?? NaN) && inputTokens !== undefined) {\n session.summary.totalInputTokens += inputTokens;\n }\n\n const outputTokens = event.outputTokens !== undefined ? Number(event.outputTokens) : undefined;\n if (!Number.isNaN(outputTokens ?? NaN) && outputTokens !== undefined) {\n session.summary.totalOutputTokens += outputTokens;\n }\n\n const cachedInputTokens = event.cachedInputTokens !== undefined ? Number(event.cachedInputTokens) : undefined;\n if (!Number.isNaN(cachedInputTokens ?? NaN) && cachedInputTokens !== undefined) {\n session.summary.totalCachedInputTokens += cachedInputTokens;\n }\n\n const totalTokens = event.totalTokens !== undefined ? Number(event.totalTokens) : undefined;\n const requestBytes = event.requestBytes !== undefined ? Number(event.requestBytes) : undefined;\n if (!Number.isNaN(requestBytes ?? NaN) && requestBytes !== undefined) {\n session.summary.totalBytesIn += requestBytes;\n }\n\n const responseBytes = event.responseBytes !== undefined ? Number(event.responseBytes) : undefined;\n if (!Number.isNaN(responseBytes ?? NaN) && responseBytes !== undefined) {\n session.summary.totalBytesOut += responseBytes;\n }\n\n session.summary.eventCounts[event.type] = (session.summary.eventCounts[event.type] || 0) + 1;\n\n let sections: TraceDataSection[] | undefined;\n if (session.resolvedConfig.logData) {\n const converted = convertMessageListToSections(event.messageList);\n sections = ensureUniqueSections(id, converted);\n }\n\n const resolvedModel = event.model ?? inferModelFromMessages(event.messageList);\n const resolvedProvider = event.provider ?? inferProviderFromMessages(event.messageList);\n\n // For ai_call events, always include token fields (even if undefined/0) for consistency\n const isAiCall = event.type === \"ai_call\";\n \n const record: TraceEventRecord = {\n sessionId: session.sessionId,\n id,\n type: event.type,\n label: eventLabel,\n sequence,\n timestamp: timestampIso,\n actor: event.actor,\n status,\n durationMs,\n ...(isAiCall ? {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0,\n totalTokens: totalTokens ?? 0,\n cachedInputTokens: cachedInputTokens ?? 0,\n } : {\n ...(inputTokens !== undefined && { inputTokens }),\n ...(outputTokens !== undefined && { outputTokens }),\n ...(totalTokens !== undefined && { totalTokens }),\n ...(cachedInputTokens !== undefined && { cachedInputTokens }),\n }),\n requestBytes,\n responseBytes,\n model: resolvedModel,\n provider: resolvedProvider,\n toolExecutionId: event.toolExecutionId,\n retryOf: event.retryOf,\n error: event.error ?? (status === \"error\" ? { message: \"Unknown error\" } : undefined) ?? undefined,\n data: sections ? { sections } : undefined,\n debug: event.debug,\n };\n\n if (status === \"error\") {\n const errorInfo = event.error ?? { message: \"Unknown error\" };\n session.errors.push({\n eventId: id,\n message: errorInfo.message,\n stack: errorInfo.stack,\n type: event.type,\n timestamp: timestampIso,\n });\n }\n\n session.events.push(record);\n const sink = session.resolvedConfig.sink;\n if (sink.type === \"custom\" && typeof sink.onEvent === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(record));\n const result = sink.onEvent(cloned);\n if (result && typeof (result as PromiseLike<void>).then === \"function\") {\n (result as PromiseLike<void>).then(undefined, (error: unknown) => {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent rejected\", error);\n }\n });\n }\n } catch (err) {\n if (typeof console !== \"undefined\" && typeof console.warn === \"function\") {\n console.warn(\"Trace custom sink onEvent failed\", err);\n }\n }\n }\n return record;\n}\n\nexport async function finalizeTraceSession(session: TraceSessionRuntime | undefined, params: {\n agentRuntime?: AgentRuntimeConfig;\n status?: TraceSessionStatus;\n error?: { message?: string; stack?: string } | null;\n} = {}): Promise<TraceSessionFile | undefined> {\n if (!session) return undefined;\n\n const endedAtMs = Date.now();\n const endedAtIso = new Date(endedAtMs).toISOString();\n const durationMs = endedAtMs - session.startedAt;\n const startedAtIso = new Date(session.startedAt).toISOString();\n\n // Build agent info with safe defaults - single source of truth\n const buildAgentInfo = (runtime: AgentRuntimeConfig | undefined) => {\n if (!runtime) return undefined;\n return {\n name: runtime.name || \"unknown-agent\",\n version: runtime.version,\n model: getModelName(runtime.model) || \"unknown-model\",\n provider: getProviderName(runtime.model),\n };\n };\n\n const agentInfo = buildAgentInfo(params.agentRuntime);\n\n if (params.error) {\n session.errors.push({\n eventId: \"session\",\n message: params.error.message || \"Unknown error\",\n stack: params.error.stack,\n type: \"session\",\n timestamp: endedAtIso,\n });\n }\n\n const configSnapshot = buildConfigSnapshot(session);\n const initialStatus: TraceSessionStatus = params.status\n ? params.status\n : session.errors.length > 0\n ? \"error\"\n : \"success\";\n\n const buildPayload = (status: TraceSessionStatus): TraceSessionFile => ({\n sessionId: session.sessionId,\n startedAt: startedAtIso,\n endedAt: endedAtIso,\n durationMs,\n agent: agentInfo,\n config: configSnapshot,\n summary: session.summary,\n events: session.events,\n status,\n errors: session.errors,\n });\n\n const payloadForSink = buildPayload(initialStatus);\n let sinkFailed = false;\n const sink = session.resolvedConfig.sink;\n\n if (sink.type === \"cognipeer\" || sink.type === \"http\") {\n try {\n const headers = sink.type === \"cognipeer\"\n ? { Authorization: `Bearer ${sink.apiKey}` }\n : sink.headers;\n \n await postTraceSession(sink.url, headers, payloadForSink);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n \n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n }\n }\n\n const hadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n let status: TraceSessionStatus = params.status ?? (hadNonSinkErrors ? \"error\" : \"success\");\n if (status === \"success\" && sinkFailed) {\n status = \"partial\";\n }\n\n let finalPayload = buildPayload(status);\n\n if (sink.type === \"file\" && session.fileSessionDir) {\n try {\n const filePath = path.join(session.fileSessionDir, \"trace.session.json\");\n await fs.promises.writeFile(filePath, JSON.stringify(finalPayload, null, 2), \"utf8\");\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (sink.type === \"custom\" && typeof sink.onSession === \"function\") {\n try {\n const cloned = JSON.parse(JSON.stringify(finalPayload));\n await sink.onSession(cloned);\n } catch (err) {\n sinkFailed = true;\n const message = err instanceof Error ? err.message : String(err);\n session.errors.push({\n eventId: \"sink\",\n message,\n type: \"sink\",\n timestamp: endedAtIso,\n });\n if (status === \"success\") {\n status = \"partial\";\n finalPayload = buildPayload(status);\n }\n }\n }\n\n if (!params.status) {\n const finalHadNonSinkErrors = session.errors.some((error) => error.type && error.type !== \"sink\");\n const hasSinkErrors = session.errors.some((error) => error.type === \"sink\");\n let computedStatus: TraceSessionStatus = finalHadNonSinkErrors ? \"error\" : \"success\";\n if (computedStatus === \"success\" && hasSinkErrors) {\n computedStatus = \"partial\";\n }\n if (computedStatus !== status) {\n status = computedStatus;\n finalPayload = buildPayload(status);\n }\n }\n\n return finalPayload;\n}\n\nexport type { ResolvedTraceConfig };\n\nexport function sanitizeTracePayload(value: any): any {\n try {\n const cache = new WeakSet();\n const json = JSON.stringify(\n value,\n (_key, val) => {\n if (typeof val === \"function\") return `[Function ${val.name || \"anonymous\"}]`;\n if (typeof val === \"bigint\") return val.toString();\n if (val instanceof Error) return { message: val.message, stack: val.stack };\n if (val && typeof val === \"object\") {\n if (cache.has(val)) return \"[Circular]\";\n cache.add(val);\n }\n return val;\n },\n 2\n );\n return JSON.parse(json);\n } catch {\n try {\n return typeof value === \"string\" ? value : String(value);\n } catch {\n return \"[Unserializable]\";\n }\n }\n}\n\nexport function estimatePayloadBytes(value: any): number {\n try {\n const json = JSON.stringify(value);\n return Buffer.byteLength(json ?? \"\", \"utf8\");\n } catch {\n try {\n return Buffer.byteLength(String(value ?? \"\"), \"utf8\");\n } catch {\n return 0;\n }\n }\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\n// Minimal agent node: no system prompt injection. Invokes model with messages as-is.\nexport function createAgentCoreNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n guardrails: (opts as any).guardrails,\n systemPrompt: undefined,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: (opts as any).outputSchema,\n tracing: opts.tracing,\n };\n\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(state.messages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n // Bedrock (Claude) requires strict tool_use -> tool_result adjacency.\n // We both normalize (insert placeholder tool_result if missing) and log a compact dump.\n const extractToolUses = (m: any): Array<{ id: string; name?: string }> => {\n const tcs = m?.tool_calls || m?.additional_kwargs?.tool_calls;\n if (!Array.isArray(tcs)) return [];\n return tcs\n .map((tc: any) => ({ id: tc?.id, name: tc?.function?.name || tc?.name }))\n .filter((x: any) => typeof x.id === \"string\" && x.id.length > 0);\n };\n\n const normalizeBedrockToolPairing = (input: any[]): any[] => {\n const msgs = Array.isArray(input) ? [...input] : [];\n \n // Phase 1: Build a set of all valid tool_call IDs from assistant messages\n const validToolCallIds = new Set<string>();\n for (const m of msgs) {\n if (m?.role === 'assistant') {\n for (const tu of extractToolUses(m)) {\n if (tu.id) validToolCallIds.add(tu.id);\n }\n }\n }\n \n // Phase 2: Filter out orphan tool messages (those without a matching assistant tool_call)\n const filteredMsgs = msgs.filter((m) => {\n if (m?.role === 'tool') {\n const toolCallId = m.tool_call_id;\n if (!toolCallId || !validToolCallIds.has(toolCallId)) {\n // Orphan tool message - remove it\n return false;\n }\n }\n return true;\n });\n \n // Phase 3: Ensure tool messages immediately follow their corresponding assistant message\n // OpenAI requires: assistant(tool_calls) -> tool(tool_call_id) -> tool(tool_call_id) -> ...\n for (let i = 0; i < filteredMsgs.length; i++) {\n const m = filteredMsgs[i];\n if (m?.role !== \"assistant\") continue;\n\n const toolUses = extractToolUses(m);\n if (toolUses.length === 0) continue;\n\n // Bedrock expects exactly one \"next message\" containing the corresponding tool_result blocks.\n // In our message format we represent tool_result as role:'tool' messages with tool_call_id.\n // If the next message isn't a tool result for the first tool_use id, insert placeholders.\n const next = filteredMsgs[i + 1];\n\n // If next is a tool message for the first id, we assume pairing is okay and let downstream validate.\n const firstId = toolUses[0]?.id;\n const nextIsToolForFirst = !!(next && next.role === \"tool\" && next.tool_call_id === firstId);\n if (nextIsToolForFirst) continue;\n\n // Insert placeholder tool results for all tool uses on this assistant turn.\n const placeholders = toolUses.map((tu) => ({\n role: \"tool\",\n name: tu.name || \"unknown_tool\",\n tool_call_id: tu.id,\n content: \"SUMMARIZED/DEFERRED: tool result missing in transcript; inserted placeholder for tool_result adjacency.\",\n }));\n filteredMsgs.splice(i + 1, 0, ...placeholders);\n\n // Skip over inserted placeholders\n i += placeholders.length;\n }\n return filteredMsgs;\n };\n\n const debugToolPairing = (messagesToSend: any[]) => {\n try {\n const msgs: any[] = Array.isArray(messagesToSend) ? messagesToSend : [];\n const toolUseIds: string[] = [];\n const missingResults: Array<{ id: string; atIndex: number; tool?: string }> = [];\n\n for (let i = 0; i < msgs.length; i++) {\n const m = msgs[i];\n if (m?.role === \"assistant\") {\n for (const tu of extractToolUses(m)) {\n toolUseIds.push(tu.id);\n const next = msgs[i + 1];\n if (!(next && next.role === \"tool\" && (next.tool_call_id === tu.id || next.tool_call_id === m?.tool_call_id))) {\n missingResults.push({ id: tu.id, atIndex: i, tool: tu.name });\n }\n }\n }\n }\n\n } catch (e) {\n // Debug tool pairing failed silently\n }\n };\n\n const onEvent = (state.ctx as any)?.__onEvent as ((e: any) => void) | undefined;\n const onStream = (state.ctx as any)?.__onStream as ((chunk: { text: string; isFinal?: boolean }) => void) | undefined;\n const streamingEnabled = Boolean((state.ctx as any)?.__streaming);\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n\n const extractText = (chunk: any) => {\n if (chunk == null) return \"\";\n if (typeof chunk === \"string\") return chunk;\n if (typeof chunk?.content === \"string\") return chunk.content;\n if (Array.isArray(chunk?.content)) {\n return chunk.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n }\n if (typeof chunk?.text === \"string\") return chunk.text;\n if (typeof chunk?.delta?.content === \"string\") return chunk.delta.content;\n return \"\";\n };\n\n let response: any;\n try {\n const normalizedMessages = normalizeBedrockToolPairing([...(state.messages as any[])]);\n debugToolPairing(normalizedMessages);\n if (streamingEnabled && typeof (modelWithTools as any).stream === \"function\") {\n let streamedText = \"\";\n let streamedMessage: any | undefined;\n for await (const chunk of (modelWithTools as any).stream(normalizedMessages, { signal: abortSignal, cancellationToken })) {\n if ((cancellationToken && cancellationToken.isCancellationRequested) || abortSignal?.aborted) {\n break;\n }\n if (chunk && typeof chunk === \"object\" && (chunk as any).role) {\n streamedMessage = chunk;\n }\n const text = extractText(chunk);\n if (text) {\n streamedText += text;\n onStream?.({ text });\n onEvent?.({ type: \"stream\", text });\n }\n }\n if (streamedMessage) {\n response = { ...streamedMessage };\n if (response.content == null || response.content === \"\") {\n response.content = streamedText;\n }\n } else {\n response = { role: \"assistant\", content: streamedText } as any;\n }\n } else {\n response = await modelWithTools.invoke(normalizedMessages, { signal: abortSignal, cancellationToken });\n }\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: state.messages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...state.messages,\n response as any,\n ];\n\n // Usage tracking (per-request, aggregated by model)\n const rawUsage = (response as any)?.usage \n || (response as any)?.response_metadata?.token_usage \n || (response as any)?.response_metadata?.tokenUsage // LangChain camelCase\n || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const durationMs = Date.now() - start;\n\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes: responseBytes,\n model: modelName,\n provider: getProviderName((runtime as any).model || (opts as any).model),\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details?.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","import type {\n SmartAgentEvent,\n SmartAgentOptions,\n SmartState,\n AgentRuntimeConfig,\n ToolInterface,\n Message,\n PendingToolApproval,\n} from \"../types.js\";\nimport { nanoid } from \"nanoid\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes } from \"../utils/tracing.js\";\n\nexport function createToolsNode(initialTools: Array<ToolInterface<any, any, any>>, opts?: SmartAgentOptions) {\n const baseToolByName = new Map<string, ToolInterface>();\n for (const t of initialTools) baseToolByName.set((t as any).name, t);\n\n return async (state: SmartState): Promise<any> => {\n const runtime = state.agent || {\n name: opts?.name,\n model: opts?.model,\n tools: initialTools,\n limits: opts?.limits,\n systemPrompt: opts?.systemPrompt,\n useTodoList: opts?.useTodoList,\n outputSchema: (opts as any)?.outputSchema,\n } as AgentRuntimeConfig;\n const activeTools: Array<ToolInterface<any, any, any>> = runtime.tools as any;\n const toolByName = new Map<string, ToolInterface>();\n for (const t of activeTools) toolByName.set((t as any).name, t);\n const limits = {\n maxToolCalls: (runtime.limits?.maxToolCalls ?? 10) as number,\n maxParallelTools: Math.max(1, (runtime.limits?.maxParallelTools ?? 1) as number),\n };\n const appended: Message[] = [];\n const onEvent = (state.ctx as any)?.__onEvent as ((e: SmartAgentEvent) => void) | undefined;\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n const cancellationToken = (state.ctx as any)?.__cancellationToken as any;\n const abortSignal = (state.ctx as any)?.__abortSignal as AbortSignal | undefined;\n const traceSession = (state.ctx as any)?.__traceSession;\n const pendingApprovals: PendingToolApproval[] = Array.isArray(state.pendingApprovals)\n ? state.pendingApprovals.map((entry) => ({ ...entry }))\n : [];\n const pendingByCallId = new Map(pendingApprovals.map((entry) => [entry.toolCallId, entry]));\n let awaitingApproval = false;\n // Sync latest state into context tools if they carry a stateRef\n for (const t of toolByName.values()) {\n const anyT: any = t as any;\n if (anyT._stateRef && typeof anyT._stateRef === \"object\") {\n anyT._stateRef.toolHistory = state.toolHistory;\n anyT._stateRef.toolHistoryArchived = state.toolHistoryArchived;\n anyT._stateRef.__onEvent = onEvent;\n }\n }\n const last = state.messages[state.messages.length - 1] as any;\n let toolCount = state.toolCallCount || 0;\n const toolCalls: Array<{ id?: string; name: string; args: any }> = Array.isArray(\n last?.tool_calls\n )\n ? last.tool_calls\n : [];\n\n\n const toolHistory = state.toolHistory || [];\n // Enforce global maxToolCalls across turns\n const remaining = Math.max(0, limits.maxToolCalls - toolCount);\n const planned = toolCalls.slice(0, remaining);\n const skipped = toolCalls.slice(remaining);\n\n // Emit immediate messages for any skipped due to limit\n for (const tc of skipped) {\n onEvent?.({ type: \"tool_call\", phase: \"skipped\", name: tc.name, id: tc.id, args: tc.args });\n const sanitizedArgs = sanitizeTracePayload(tc.args);\n const messageList = [\n {\n role: \"assistant\",\n name: tc.name,\n content: `Skipped tool due to tool-call limit: ${tc.name}`,\n tool_calls: [\n {\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Skipped - ${tc.name}`,\n actor: { scope: \"tool\", name: tc.name, role: \"tool\" },\n status: \"skipped\",\n toolExecutionId: tc.id,\n messageList,\n });\n appended.push({\n role: \"tool\",\n content: `Skipped tool due to tool-call limit: ${tc.name}`,\n tool_call_id: tc.id || `${tc.name}_${appended.length}`,\n name: tc.name,\n });\n }\n\n type ToolExecutionResult =\n | { status: \"success\" | \"error\"; approval?: PendingToolApproval }\n | { status: \"awaiting_approval\" | \"rejected\"; approval: PendingToolApproval };\n\n const isCancelled = () => {\n if (abortSignal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (cancellationToken && cancellationToken.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n // Helper to run a single tool call\n const runOne = async (tc: { id?: string; name: string; args: any }): Promise<ToolExecutionResult> => {\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n return { status: \"error\" };\n }\n const t = toolByName.get(tc.name);\n if (!t) {\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: tc.name, id: tc.id, args: tc.args, error: { message: \"Tool not found\" } });\n appended.push({\n role: \"tool\",\n content: `Tool not found: ${tc.name}`,\n tool_call_id: tc.id || `${tc.name}_${appended.length}`,\n name: tc.name,\n });\n toolCount += 1;\n return { status: \"error\" };\n }\n let args: any = tc.args;\n if (typeof args === \"string\") {\n try { args = JSON.parse(args); } catch (_) { /* keep as string */ }\n }\n const toolCallId = tc.id || `${tc.name}_${toolCount + 1}`;\n let approvalEntry = pendingByCallId.get(toolCallId);\n const needsApproval = Boolean((t as any).needsApproval);\n if (needsApproval) {\n if (!approvalEntry) {\n approvalEntry = {\n id: nanoid(),\n toolCallId,\n toolName: (t as any).name || tc.name,\n args,\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n metadata: (t as any).approvalPrompt || (t as any).approvalDefaults\n ? { prompt: (t as any).approvalPrompt, defaults: (t as any).approvalDefaults }\n : undefined,\n };\n pendingApprovals.push(approvalEntry);\n pendingByCallId.set(toolCallId, approvalEntry);\n onEvent?.({ type: \"tool_approval\", status: \"pending\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, args });\n } else if (!approvalEntry.args) {\n approvalEntry.args = args;\n }\n\n if (approvalEntry.status === \"pending\") {\n awaitingApproval = true;\n const ctx = (state.ctx = state.ctx || {});\n ctx.__awaitingApproval = {\n approvalId: approvalEntry.id,\n toolCallId: approvalEntry.toolCallId,\n toolName: approvalEntry.toolName,\n requestedAt: approvalEntry.requestedAt,\n };\n ctx.__resumeStage = \"tools\";\n return { status: \"awaiting_approval\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"rejected\") {\n const rejectionMessage = approvalEntry.comment || \"Tool call rejected by reviewer.\";\n appended.push({\n role: \"tool\",\n content: `Tool call rejected: ${rejectionMessage}`,\n tool_call_id: toolCallId,\n name: tc.name,\n });\n onEvent?.({ type: \"tool_approval\", status: \"rejected\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, comment: approvalEntry.comment, decidedBy: approvalEntry.decidedBy });\n approvalEntry.metadata = { ...(approvalEntry.metadata || {}), resolution: \"rejected\" };\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n toolHistory.push({ executionId: nanoid(), toolName: (t as any).name, args, output: `Rejected: ${rejectionMessage}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n pendingByCallId.set(toolCallId, approvalEntry);\n toolCount += 1;\n return { status: \"rejected\", approval: approvalEntry };\n }\n\n if (approvalEntry.status === \"approved\") {\n if (approvalEntry.approvedArgs !== undefined) {\n args = approvalEntry.approvedArgs;\n }\n onEvent?.({ type: \"tool_approval\", status: \"approved\", id: approvalEntry.id, toolName: approvalEntry.toolName, toolCallId: approvalEntry.toolCallId, decidedBy: approvalEntry.decidedBy, comment: approvalEntry.comment });\n }\n }\n const start = Date.now();\n try {\n onEvent?.({ type: \"tool_call\", phase: \"start\", name: (t as any).name, id: tc.id, args });\n onProgress?.({ stage: \"tools\", message: `Running tool ${tc.name}` });\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n let output: any;\n const anyTool = t as any;\n const callOptions = { cancellationToken, signal: abortSignal };\n if (typeof anyTool.func === \"function\") output = await anyTool.func(args, callOptions);\n else if (typeof anyTool.invoke === \"function\") output = await anyTool.invoke(args, callOptions);\n else if (typeof anyTool.call === \"function\") output = await anyTool.call(args, callOptions);\n else if (typeof anyTool._call === \"function\") output = await anyTool._call(args, callOptions);\n else if (typeof anyTool.run === \"function\") output = await anyTool.run(args, callOptions);\n else throw new Error(\"Tool is not invokable\");\n // Detect handoff signature output: we decide that a handoff tool returns { __handoff: AgentRuntimeConfig }\n if (output && typeof output === 'object' && output.__handoff && output.__handoff.runtime) {\n const newRuntime: AgentRuntimeConfig = output.__handoff.runtime;\n // switch active agent; messages unchanged except we reply ok\n const executionId = nanoid();\n toolHistory.push({ executionId, toolName: (t as any).name, args, output: 'handoff:ok', rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n appended.push({ role: \"tool\", content: 'ok', tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: 'handoff', from: runtime.name, to: newRuntime.name, toolName: (t as any).name });\n state.agent = newRuntime;\n onEvent?.({ type: 'tool_call', phase: 'success', name: (t as any).name, id: tc.id, args, result: 'handoff', durationMs: Date.now() - start });\n toolCount += 1;\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n return { status: \"success\", approval: approvalEntry };\n }\n const content = typeof output === \"string\" ? output : JSON.stringify(output);\n if (output && typeof output === 'object' && output.__finalStructuredOutput) {\n if (!state.ctx) state.ctx = {};\n state.ctx.__structuredOutputParsed = output.data;\n state.ctx.__finalizedDueToStructuredOutput = true;\n }\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n toolHistory.push({ executionId, toolName: (t as any).name, args, output, rawOutput: output, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n appended.push({ role: \"tool\", content, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"success\", name: (t as any).name, id: tc.id, args, result: output, durationMs });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} completed`, detail: { durationMs } });\n\n if (needsApproval && approvalEntry) {\n approvalEntry.status = \"executed\";\n approvalEntry.resolvedAt = new Date().toISOString();\n approvalEntry.executionId = executionId;\n pendingByCallId.set(toolCallId, approvalEntry);\n }\n\n const sanitizedOutput = sanitizeTracePayload(output);\n const outputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedOutput) : undefined;\n const toolName = (t as any).name || tc.name;\n const messageList = [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: {\n name: toolName,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: sanitizedOutput ?? output ?? \"\",\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Execution - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n durationMs,\n requestBytes: inputBytes,\n responseBytes: outputBytes,\n toolExecutionId: executionId,\n messageList,\n });\n toolCount += 1;\n return { status: \"success\", approval: approvalEntry };\n } catch (e: any) {\n const durationMs = Date.now() - start;\n const executionId = nanoid();\n toolHistory.push({ executionId, toolName: (t as any).name, args, output: `Error executing tool: ${e?.message || String(e)}`, rawOutput: null, timestamp: new Date().toISOString(), tool_call_id: tc.id });\n appended.push({ role: \"tool\", content: `Error executing tool: ${e?.message || String(e)}`, tool_call_id: tc.id || `${tc.name}_${appended.length}`, name: tc.name });\n onEvent?.({ type: \"tool_call\", phase: \"error\", name: (t as any).name, id: tc.id, args, error: { message: e?.message || String(e) } });\n onProgress?.({ stage: \"tools\", message: `Tool ${tc.name} failed`, detail: { error: e?.message || String(e) } });\n const sanitizedArgs = sanitizeTracePayload(args);\n const inputBytes = traceSession?.resolvedConfig.logData ? estimatePayloadBytes(sanitizedArgs) : undefined;\n const toolName = (t as any).name || tc.name;\n const errorMessage = e?.message || String(e);\n const messageList = [\n {\n role: \"assistant\",\n name: toolName,\n content: \"\",\n tool_calls: [\n {\n id: tc.id || executionId,\n type: \"function\",\n function: {\n name: toolName,\n arguments: sanitizedArgs,\n },\n },\n ],\n },\n {\n role: \"tool\",\n name: toolName,\n content: `Error executing tool: ${errorMessage}`,\n },\n ];\n recordTraceEvent(traceSession, {\n type: \"tool_call\",\n label: `Tool Error - ${toolName}`,\n actor: { scope: \"tool\", name: toolName, role: \"tool\" },\n status: \"error\",\n durationMs,\n requestBytes: inputBytes,\n toolExecutionId: executionId,\n error: { message: e?.message || String(e), stack: e?.stack },\n messageList,\n });\n toolCount += 1;\n return { status: \"error\", approval: approvalEntry };\n }\n };\n\n for (const tc of planned) {\n if (awaitingApproval) break;\n const cancelState = isCancelled();\n if (cancelState.cancelled) {\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__cancelled = { stage: \"tools\", reason: cancelState.reason, timestamp: new Date().toISOString() };\n onEvent?.({ type: \"cancelled\", stage: \"tools\", reason: cancelState.reason });\n onProgress?.({ stage: \"tools\", message: \"Cancelled\", detail: { reason: cancelState.reason } });\n break;\n }\n const result = await runOne(tc);\n if (result?.status === \"awaiting_approval\") {\n awaitingApproval = true;\n break;\n }\n }\n\n if (!awaitingApproval && state.ctx?.__awaitingApproval) {\n const ctx = { ...state.ctx };\n delete ctx.__awaitingApproval;\n if (!pendingApprovals.some((entry) => entry.status !== \"executed\")) {\n delete ctx.__resumeStage;\n }\n state.ctx = Object.keys(ctx).length > 0 ? ctx : undefined;\n }\n\n return {\n messages: [...state.messages, ...appended],\n toolCallCount: toolCount,\n toolHistory,\n agent: state.agent,\n pendingApprovals,\n };\n };\n}\n","import type { SmartAgentOptions, SmartState } from \"../types.js\";\n\n// This node is reached when tool-call limit is hit. It appends a short instruction\n// telling the agent to produce an answer with the current information and avoid further tools.\n// Note: Using 'user' role since 'system' messages cannot appear in the middle of a conversation for OpenAI API.\nexport function createToolLimitFinalizeNode(_opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const notice = { role: 'user', content: \"[System Notice] Tool-call limit reached. Produce the best possible final answer using the available context and prior tool outputs. Do not call any more tools.\" } as any;\n const ctx = { ...(state.ctx || {}), __finalizedDueToToolLimit: true };\n return { messages: [...state.messages, notice], ctx };\n };\n}\n","import { nanoid } from \"nanoid\";\nimport { GuardrailPhase } from \"../types.js\";\nimport type {\n ConversationGuardrail,\n GuardrailContext,\n GuardrailIncident,\n GuardrailOutcome,\n GuardrailRule,\n GuardrailDisposition,\n SmartState,\n SmartAgentOptions,\n AgentRuntimeConfig,\n SmartAgentEvent,\n} from \"../types.js\";\n\nexport type GuardrailEvaluationParams = {\n guardrails?: ConversationGuardrail[];\n phase: GuardrailPhase;\n state: SmartState;\n runtime: AgentRuntimeConfig;\n options: SmartAgentOptions;\n emit?: (event: SmartAgentEvent) => void;\n};\n\nfunction ensureArray<T>(value: T[] | undefined): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction buildContext(\n params: Omit<GuardrailEvaluationParams, \"guardrails\" | \"emit\">\n): GuardrailContext {\n const latest = params.state.messages[params.state.messages.length - 1];\n return {\n phase: params.phase,\n messages: params.state.messages,\n latestMessage: latest,\n state: params.state,\n runtime: params.runtime,\n options: params.options,\n };\n}\n\nfunction normalizeDisposition(\n passed: boolean,\n disposition?: GuardrailDisposition\n): GuardrailDisposition {\n if (disposition) return disposition;\n return passed ? \"allow\" : \"block\";\n}\n\nexport async function evaluateGuardrails(\n params: GuardrailEvaluationParams\n): Promise<GuardrailOutcome> {\n const incidents: GuardrailIncident[] = [];\n const guardrails = ensureArray(params.guardrails).filter((guardrail) =>\n ensureArray(guardrail.appliesTo).includes(params.phase)\n );\n\n if (guardrails.length === 0) {\n return { ok: true, incidents };\n }\n\n const context = buildContext(params);\n\n for (const guardrail of guardrails) {\n for (const rule of ensureArray(guardrail.rules)) {\n let result: Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n try {\n result = await rule.evaluate(context);\n } catch (err) {\n result = {\n passed: false,\n reason: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n details: { thrown: true },\n disposition: \"block\" as GuardrailDisposition,\n } as Awaited<ReturnType<GuardrailRule[\"evaluate\"]>>;\n }\n\n const passed = result?.passed !== false;\n const disposition = normalizeDisposition(passed, result?.disposition);\n\n if (passed && disposition === \"allow\") {\n continue;\n }\n\n const incident: GuardrailIncident = {\n guardrailId: guardrail.id ?? rule.id ?? nanoid(8),\n guardrailTitle: guardrail.title,\n ruleId: rule.id,\n ruleTitle: rule.title,\n phase: params.phase,\n reason: result?.reason,\n details: result?.details,\n disposition,\n };\n\n let effectiveDisposition = incident.disposition;\n if (typeof guardrail.onViolation === \"function\") {\n try {\n const override = await guardrail.onViolation(incident, context);\n if (override) {\n effectiveDisposition = override;\n incident.disposition = override;\n }\n } catch (err) {\n effectiveDisposition = \"block\";\n incident.disposition = \"block\";\n incident.details = {\n ...(incident.details || {}),\n onViolationError: err instanceof Error ? err.message : String(err ?? \"Unknown error\"),\n };\n if (!incident.reason) {\n incident.reason = \"Guardrail onViolation handler threw an error.\";\n }\n }\n }\n\n incidents.push(incident);\n\n params.emit?.({\n type: \"guardrail\",\n phase: params.phase,\n guardrailId: incident.guardrailId,\n guardrailTitle: incident.guardrailTitle,\n ruleId: incident.ruleId,\n ruleTitle: incident.ruleTitle,\n disposition: effectiveDisposition,\n reason: incident.reason,\n details: incident.details,\n });\n\n if (effectiveDisposition === \"block\" && guardrail.haltOnViolation !== false) {\n break;\n }\n }\n }\n\n const ok = incidents.every((incident) => incident.disposition !== \"block\");\n return { ok, incidents };\n}\n\nexport type CreateGuardrailOptions = {\n id?: string;\n title?: string;\n description?: string;\n appliesTo?: GuardrailPhase[];\n checks: GuardrailRule[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport function createGuardrail(options: CreateGuardrailOptions): ConversationGuardrail {\n const appliesTo = options.appliesTo?.length\n ? options.appliesTo\n : [GuardrailPhase.Request, GuardrailPhase.Response];\n\n return {\n id: options.id,\n title: options.title,\n description: options.description,\n appliesTo,\n rules: options.checks,\n haltOnViolation: options.haltOnViolation,\n onViolation: options.onViolation,\n metadata: options.metadata,\n };\n}\n","import { AgentRuntimeConfig, AgentSnapshot, RestoreSnapshotOptions, SmartState, SnapshotOptions } from \"../types.js\";\n\nconst DISALLOWED_CTX_KEYS = new Set([\"__onEvent\", \"__traceSession\", \"__paused\"]);\n\nconst clone = <T>(value: T): T => {\n if (typeof (globalThis as any).structuredClone === \"function\") {\n return (globalThis as any).structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n};\n\nconst cleanCtx = (ctx?: Record<string, any>): Record<string, any> | undefined => {\n if (!ctx) return undefined;\n const entries = Object.entries(ctx).filter(([key]) => !DISALLOWED_CTX_KEYS.has(key));\n if (entries.length === 0) return undefined;\n return Object.fromEntries(entries);\n};\n\nconst runtimeHintFromAgent = (agent?: AgentRuntimeConfig) => {\n if (!agent) return undefined;\n const tools = Array.isArray(agent.tools) ? agent.tools.map((tool: any) => tool?.name).filter(Boolean) : undefined;\n return {\n name: agent.name,\n version: agent.version,\n tools: tools && tools.length > 0 ? tools : undefined,\n };\n};\n\nexport function captureSnapshot(state: SmartState, options?: SnapshotOptions): AgentSnapshot {\n const { agent, ctx, ...rest } = state;\n const metadata = {\n createdAt: new Date().toISOString(),\n tag: options?.tag,\n paused: ctx?.__paused ?? null,\n };\n\n const safeState = clone({\n ...rest,\n ctx: cleanCtx(ctx),\n });\n\n if (safeState.ctx && \"__paused\" in safeState.ctx) {\n delete (safeState.ctx as Record<string, any>).__paused;\n }\n\n return {\n state: safeState,\n runtimeHint: options?.includeRuntimeHint !== false ? runtimeHintFromAgent(agent) : undefined,\n metadata,\n };\n}\n\nexport function restoreSnapshot(snapshot: AgentSnapshot, restoreOptions?: RestoreSnapshotOptions): SmartState {\n const base = clone(snapshot.state) as SmartState;\n const incomingCtx = restoreOptions?.ctx;\n const mergedCtx = restoreOptions?.mergeCtx === false\n ? cleanCtx(incomingCtx)\n : {\n ...(base.ctx || {}),\n ...cleanCtx(incomingCtx),\n };\n\n const ctx = {\n ...(mergedCtx || {}),\n __restoredFromSnapshot: true,\n };\n\n const restored: SmartState = {\n ...base,\n ctx,\n };\n\n if (restoreOptions?.agent) {\n restored.agent = restoreOptions.agent;\n }\n\n return restored;\n}\n","import { SmartState, ToolApprovalResolution, PendingToolApproval } from \"../types.js\";\n\nconst cloneApprovals = (approvals: PendingToolApproval[] | undefined) =>\n Array.isArray(approvals) ? approvals.map((entry) => ({ ...entry })) : [];\n\nexport function resolveToolApprovalState(state: SmartState, resolution: ToolApprovalResolution): SmartState {\n const approvals = cloneApprovals(state.pendingApprovals);\n const matchIndex = approvals.findIndex((entry) => entry.id === resolution.id || entry.toolCallId === resolution.id);\n if (matchIndex === -1) {\n throw new Error(`Pending approval not found for id: ${resolution.id}`);\n }\n\n const entry = { ...approvals[matchIndex] };\n if (entry.status === \"executed\") {\n throw new Error(`Tool approval ${entry.id} already completed.`);\n }\n\n entry.status = resolution.approved ? \"approved\" : \"rejected\";\n entry.approvedArgs = resolution.approved ? (resolution.approvedArgs ?? entry.args) : undefined;\n entry.decidedBy = resolution.decidedBy;\n entry.comment = resolution.comment;\n entry.decidedAt = new Date().toISOString();\n\n approvals[matchIndex] = entry;\n\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__awaitingApproval;\n ctx.__resumeStage = \"tools\";\n ctx.__approvalResolved = { id: entry.id, status: entry.status };\n\n return {\n ...state,\n pendingApprovals: approvals,\n ctx,\n };\n}\n","export function countApproxTokens(text: string) {\n if (!text) return 0;\n // Rough heuristic: 1 token ~ 4 chars\n return Math.ceil(text.length / 4);\n}\n","// A minimal agent builder: no system prompt, no summarization, with tool limit and optional structured output finalize.\nimport type { AgentInvokeResult, InvokeConfig, SmartAgentEvent, AgentOptions, AgentState, AgentInstance, AgentRuntimeConfig, HandoffDescriptor, GuardrailOutcome, AgentSnapshot, SnapshotOptions, RestoreSnapshotOptions, ToolApprovalResolution } from \"./types.js\";\nimport { GuardrailPhase } from \"./types.js\";\nimport { z, ZodSchema } from \"zod\";\nimport { createResolverNode } from \"./nodes/resolver.js\";\nimport { createAgentCoreNode } from \"./nodes/agentCore.js\";\nimport { createToolsNode } from \"./nodes/tools.js\";\nimport { createToolLimitFinalizeNode } from \"./nodes/toolLimitFinalize.js\";\nimport { createTool } from \"./tool.js\";\nimport { createTraceSession, finalizeTraceSession } from \"./utils/tracing.js\";\nimport { evaluateGuardrails } from \"./guardrails/engine.js\";\nimport { captureSnapshot, restoreSnapshot } from \"./utils/stateSnapshot.js\";\nimport { resolveToolApprovalState } from \"./utils/toolApprovals.js\";\nimport { countApproxTokens } from \"./utils/utilTokens.js\";\n\nexport function createAgent<TOutput = unknown>(opts: AgentOptions & { outputSchema?: ZodSchema<TOutput> }): AgentInstance<TOutput> {\n const resolver = createResolverNode();\n const agentCore = createAgentCoreNode(opts);\n // Prepare tools list: base tools + structured output finalize if schema provided\n const toolsBase = [...((opts.tools as any) ?? [])];\n if (opts.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema as any,\n func: async (data: any) => ({ __finalStructuredOutput: true, data }),\n });\n toolsBase.push(responseTool);\n }\n const toolsNode = createToolsNode(toolsBase, opts);\n const finalizeNode = createToolLimitFinalizeNode(opts);\n\n type GuardrailStore = { lastRequestLength: number; lastResponseLength: number };\n\n const mergeGuardrailOutcomes = (\n prev: GuardrailOutcome | undefined,\n next: GuardrailOutcome\n ): GuardrailOutcome => {\n if (!prev) return next;\n return {\n ok: prev.ok && next.ok,\n incidents: [...prev.incidents, ...next.incidents],\n };\n };\n\n const ensureGuardrailStore = (state: AgentState): GuardrailStore => {\n const ctx = (state.ctx = state.ctx || {});\n const existing = (ctx.__guardrailStore as GuardrailStore | undefined) || {\n lastRequestLength: -1,\n lastResponseLength: -1,\n };\n ctx.__guardrailStore = existing;\n return existing;\n };\n\n const getGuardrailConfig = (state: AgentState) => {\n const agentGuardrails = state.agent?.guardrails;\n return Array.isArray(agentGuardrails)\n ? agentGuardrails\n : Array.isArray(opts.guardrails)\n ? opts.guardrails\n : [];\n };\n\n const runtime: AgentRuntimeConfig = {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: toolsBase,\n guardrails: opts.guardrails,\n systemPrompt: undefined,\n limits: opts.limits,\n useTodoList: undefined,\n outputSchema: opts.outputSchema as any,\n tracing: opts.tracing,\n };\n\n async function runLoop(\n initial: AgentState,\n config: InvokeConfig | undefined,\n emit?: (event: SmartAgentEvent) => void\n ): Promise<AgentState> {\n let state = await resolver(initial);\n if (state.ctx?.__paused) {\n const nextCtx = { ...state.ctx };\n delete nextCtx.__paused;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n let resumeStage: \"tools\" | null = null;\n if (state.ctx?.__resumeStage) {\n const nextCtx = { ...state.ctx };\n if (nextCtx.__resumeStage === \"tools\") {\n resumeStage = \"tools\";\n }\n delete nextCtx.__resumeStage;\n state = { ...state, ctx: Object.keys(nextCtx).length > 0 ? nextCtx : undefined } as AgentState;\n }\n\n const mergedLimits = {\n ...(opts.limits || {}),\n ...((config?.limits || {}) as any),\n } as AgentOptions[\"limits\"];\n\n const maxToolCalls = (mergedLimits?.maxToolCalls === undefined) ? 50 : mergedLimits?.maxToolCalls;\n const iterationLimit = maxToolCalls === Infinity ? 100 : Math.max(maxToolCalls * 3 + 10, 40);\n let iterations = 0;\n const onStateChange = config?.onStateChange;\n const checkpointReason = config?.checkpointReason;\n let pausedStage: string | null = null;\n\n const onProgress = (state.ctx as any)?.__onProgress as ((progress: { stage?: string; message?: string; percent?: number; detail?: any }) => void) | undefined;\n\n const isCancelled = () => {\n const ctx: any = state.ctx || {};\n const token = ctx.__cancellationToken as any;\n const signal = ctx.__abortSignal as AbortSignal | undefined;\n const deadline = ctx.__deadline as number | undefined;\n if (signal?.aborted) return { cancelled: true, reason: \"aborted\" };\n if (token && token.isCancellationRequested) return { cancelled: true, reason: \"cancelled\" };\n if (deadline && Date.now() > deadline) return { cancelled: true, reason: \"timeout\" };\n return { cancelled: false, reason: undefined } as const;\n };\n\n const cancelIfRequested = (stage: string) => {\n const result = isCancelled();\n if (!result.cancelled) return false;\n const ctx = { ...(state.ctx || {}) } as any;\n ctx.__cancelled = { stage, reason: result.reason, timestamp: new Date().toISOString() };\n state = { ...state, ctx } as AgentState;\n emit?.({ type: \"cancelled\", stage, reason: result.reason });\n onProgress?.({ stage, message: \"Cancelled\", detail: { reason: result.reason } });\n return true;\n };\n\n const checkpointIfRequested = (stage: string) => {\n if (typeof onStateChange !== \"function\") return false;\n let result = false;\n try {\n result = onStateChange(state);\n } catch {\n result = false;\n }\n if (!result) return false;\n const ctx = { ...(state.ctx || {}) };\n ctx.__paused = {\n stage,\n iteration: iterations,\n reason: checkpointReason,\n timestamp: new Date().toISOString(),\n };\n state = { ...state, ctx } as AgentState;\n pausedStage = stage;\n return true;\n };\n\n while (iterations < iterationLimit) {\n iterations++;\n\n if (cancelIfRequested(\"loop\")) break;\n\n const skippingAgent = resumeStage === \"tools\";\n if (!skippingAgent) {\n if (cancelIfRequested(\"before_guardrails\")) break;\n if (checkpointIfRequested(\"before_guardrails\")) break;\n\n const preGuardrails = getGuardrailConfig(state);\n if (preGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastRequestLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: preGuardrails,\n phase: GuardrailPhase.Request,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastRequestLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const guardMessage: any = {\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Request blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Request,\n incidents: outcome.incidents,\n },\n },\n };\n state = { ...state, messages: [...state.messages, guardMessage] } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Request,\n incident: blocking,\n };\n break;\n }\n }\n }\n\n // Check if context is too large and needs summarization (signal to SmartAgent)\n let maxTok: number | undefined;\n if ((opts as any).summarization && typeof (opts as any).summarization === 'object' && (opts as any).summarization.maxTokens) {\n maxTok = (opts as any).summarization.maxTokens;\n }\n if (maxTok === undefined) {\n maxTok = 50000; // Default if not found\n }\n\n if (maxTok) {\n const allText = (state.messages || [])\n .map((m: any) => typeof m.content === \"string\" ? m.content : Array.isArray(m.content) ? m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? '')).join('') : '')\n .join(\"\\n\");\n const tokenCount = countApproxTokens(allText);\n if (tokenCount > maxTok) {\n const ctx = { ...(state.ctx || {}), __needsSummarization: true };\n state = { ...state, ctx } as AgentState;\n break;\n }\n }\n\n // Agent step\n onProgress?.({ stage: \"agent\", message: \"Invoking model\" });\n if (cancelIfRequested(\"before_agent\")) break;\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n onProgress?.({ stage: \"agent\", message: \"Model response received\" });\n\n if (checkpointIfRequested(\"after_agent\")) break;\n\n const postGuardrails = getGuardrailConfig(state);\n if (postGuardrails.length > 0) {\n const store = ensureGuardrailStore(state);\n if (store.lastResponseLength !== state.messages.length) {\n const outcome = await evaluateGuardrails({\n guardrails: postGuardrails,\n phase: GuardrailPhase.Response,\n state,\n runtime: state.agent || runtime,\n options: opts,\n emit,\n });\n store.lastResponseLength = state.messages.length;\n state.guardrailResult = mergeGuardrailOutcomes(state.guardrailResult, outcome);\n const blocking = outcome.incidents.find((incident) => incident.disposition === \"block\");\n if (blocking) {\n const updatedMessages = [...state.messages];\n const replaced = updatedMessages.pop();\n updatedMessages.push({\n role: \"assistant\",\n name: \"guardrail\",\n content: blocking.reason || \"Response blocked by guardrail policy.\",\n metadata: {\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n replaced,\n },\n },\n } as any);\n state = { ...state, messages: updatedMessages } as AgentState;\n const ctx = (state.ctx = state.ctx || {});\n (ctx as any).__guardrailBlocked = {\n phase: GuardrailPhase.Response,\n incident: blocking,\n replaced,\n };\n break;\n } else if (outcome.incidents.length > 0) {\n const last = state.messages[state.messages.length - 1] as any;\n if (last) {\n last.metadata = {\n ...(last.metadata || {}),\n guardrail: {\n phase: GuardrailPhase.Response,\n incidents: outcome.incidents,\n },\n };\n }\n }\n }\n }\n } else {\n resumeStage = null;\n }\n\n const lastMsg: any = state.messages[state.messages.length - 1];\n const toolCalls: any[] = Array.isArray(lastMsg?.tool_calls) ? lastMsg.tool_calls : [];\n const toolCallCount = state.toolCallCount || 0;\n\n // Tool limit finalize gate\n if (state.ctx?.__finalizedDueToToolLimit) {\n break;\n }\n if (toolCallCount >= maxToolCalls && toolCalls.length > 0) {\n state = { ...state, ...(await finalizeNode(state)) } as AgentState;\n // One more assistant turn will occur, but without more tools ideally\n continue;\n }\n\n if (toolCalls.length === 0) break;\n\n // Run tools\n onProgress?.({ stage: \"tools\", message: \"Running tools\" });\n if (cancelIfRequested(\"before_tools\")) break;\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n onProgress?.({ stage: \"tools\", message: \"Tools finished\" });\n if (state.ctx?.__awaitingApproval) break;\n if (checkpointIfRequested(\"after_tools\")) break;\n if (state.ctx?.__finalizedDueToStructuredOutput) break;\n }\n\n // Best-effort: if a structured output schema is active but the model never called `response`,\n // append a force-finalize instruction and allow one more agent turn (without tools ideally).\n // This helps avoid \"completed but no response generated\" situations.\n if (opts.outputSchema && !(state as any).ctx?.__finalizedDueToStructuredOutput) {\n const last: any = state.messages[state.messages.length - 1];\n const lastHasToolCalls = Array.isArray(last?.tool_calls) && last.tool_calls.length > 0;\n\n // Only nudge if we appear to be done (no pending tool calls) but still no structured finalize.\n if (!lastHasToolCalls) {\n const forceMsg = {\n role: \"system\",\n content: [\n \"A structured output schema is active.\",\n \"You MUST now call tool `response` with the final JSON object that matches the schema.\",\n \"Do not write the JSON in the assistant message.\",\n \"Call `response` exactly once, then stop.\",\n ].join(\"\\n\"),\n } as any;\n\n // Avoid spamming the same instruction\n const alreadyForced = Boolean((state as any).ctx?.__structuredOutputForceFinalize);\n if (!alreadyForced) {\n const ctx = { ...(state.ctx || {}), __structuredOutputForceFinalize: true };\n state = { ...state, messages: [...state.messages, forceMsg], ctx } as AgentState;\n try {\n state = { ...state, ...(await agentCore(state)) } as AgentState;\n const lastAfter: any = state.messages[state.messages.length - 1];\n const toolCallsAfter: any[] = Array.isArray(lastAfter?.tool_calls) ? lastAfter.tool_calls : [];\n if (toolCallsAfter.length > 0) {\n state = { ...state, ...(await toolsNode(state)) } as AgentState;\n }\n } catch {\n // Ignore; caller will handle absence of output\n }\n }\n }\n }\n\n if (!pausedStage && typeof onStateChange === \"function\" && onStateChange(state)) {\n checkpointIfRequested(\"after_loop\");\n }\n\n return state;\n }\n\n const invokeAgent = async (input: AgentState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n const onEvent = config?.onEvent;\n const onProgress = config?.onProgress;\n const onStream = config?.onStream;\n const streamEnabled = config?.stream === true;\n const emit = (e: SmartAgentEvent) => { try { onEvent?.(e); } catch {} };\n const emitProgress = (progress: { stage?: string; message?: string; percent?: number; detail?: any }) => {\n try { onProgress?.(progress); } catch {}\n emit({ type: \"progress\", ...progress });\n };\n const traceSession = createTraceSession(opts);\n\n const ctx: Record<string, any> = {\n ...(input.ctx || {}),\n __onEvent: onEvent,\n __onProgress: emitProgress,\n __onStream: onStream,\n __streaming: streamEnabled,\n };\n if (traceSession) ctx.__traceSession = traceSession;\n if (config?.cancellationToken) ctx.__cancellationToken = config.cancellationToken;\n if ((config?.cancellationToken as AbortSignal | undefined)?.aborted !== undefined) {\n ctx.__abortSignal = config?.cancellationToken as AbortSignal;\n }\n if (config?.timeoutMs && config.timeoutMs > 0) {\n ctx.__deadline = Date.now() + config.timeoutMs;\n }\n\n const runtimeWithInvokeLimits: AgentRuntimeConfig = config?.limits\n ? { ...runtime, limits: { ...(runtime.limits || {}), ...config.limits } }\n : runtime;\n\n const initial: AgentState = {\n messages: input.messages || [],\n toolCallCount: input.toolCallCount || 0,\n toolCache: input.toolCache || {},\n toolHistory: input.toolHistory || [],\n metadata: input.metadata,\n ctx,\n pendingApprovals: input.pendingApprovals || [],\n agent: input.agent || runtimeWithInvokeLimits,\n usage: input.usage || { perRequest: [], totals: {} },\n };\n\n let res: AgentState;\n try {\n res = await runLoop(initial, config, emit);\n } catch (err: any) {\n await finalizeTraceSession(traceSession, {\n agentRuntime: runtime,\n status: \"error\",\n error: { message: err?.message, stack: err?.stack },\n });\n throw err;\n }\n\n await finalizeTraceSession(traceSession, {\n agentRuntime: res.agent || runtime,\n status: \"success\",\n });\n\n const finalMsg = res.messages[res.messages.length - 1];\n let content = \"\";\n if (typeof finalMsg?.content === \"string\") content = finalMsg.content;\n else if (Array.isArray(finalMsg?.content)) content = finalMsg.content.map((c: any) => (typeof c === \"string\" ? c : c?.text ?? c?.content ?? \"\")).join(\"\");\n\n let parsed: TOutput | undefined = undefined;\n const schema = opts.outputSchema as ZodSchema<TOutput> | undefined;\n if (schema && (res as any).ctx?.__structuredOutputParsed) {\n parsed = (res as any).ctx.__structuredOutputParsed as TOutput;\n } else if (schema && content) {\n // Fallback: try to parse JSON from assistant message\n let jsonText: string | null = null;\n const fenced = content.match(/```(?:json)?\\n([\\s\\S]*?)```/i);\n if (fenced && fenced[1]) jsonText = fenced[1].trim();\n else {\n const braceIdx = content.indexOf(\"{\");\n const bracketIdx = content.indexOf(\"[\");\n const start = [braceIdx, bracketIdx].filter(i => i >= 0).sort((a, b) => a - b)[0];\n if (start !== undefined) jsonText = content.slice(start).trim();\n }\n try {\n const raw = JSON.parse(jsonText ?? content);\n parsed = schema.parse(raw) as TOutput;\n } catch {}\n }\n\n emit({ type: \"finalAnswer\", content: typeof finalMsg?.content === 'string' ? finalMsg.content : content });\n if (streamEnabled && content) {\n onStream?.({ text: content, isFinal: true });\n emit({ type: \"stream\", text: content, isFinal: true });\n }\n\n return {\n content,\n output: parsed as TOutput | undefined,\n metadata: { usage: (res as any).usage },\n messages: res.messages,\n state: res as AgentState,\n };\n };\n\n const snapshotState = (state: AgentState, options?: SnapshotOptions) => captureSnapshot(state, options);\n\n const resumeAgent = async (snapshot: AgentSnapshot, config?: InvokeConfig, restoreOptions?: RestoreSnapshotOptions) => {\n const restoredState = restoreSnapshot(snapshot, restoreOptions);\n return invokeAgent(restoredState, config);\n };\n\n const resolveToolApproval = (state: AgentState, resolution: ToolApprovalResolution) =>\n resolveToolApprovalState(state, resolution);\n\n const instance: AgentInstance<TOutput> = {\n invoke: invokeAgent,\n snapshot: snapshotState,\n resume: resumeAgent,\n resolveToolApproval,\n asTool: ({ toolName, description, inputDescription }: { toolName: string; description?: string; inputDescription?: string }) => {\n const schema = z.object({ input: z.string().describe(inputDescription || \"Input for delegated agent\") });\n return createTool({\n name: toolName,\n description: description || `Delegate task to agent ${opts.name || 'Agent'}`,\n schema,\n func: async ({ input }) => {\n const res = await instance.invoke({ messages: [{ role: 'user', content: input } as any] });\n return { content: res.content };\n }\n });\n },\n asHandoff: ({ toolName, description, schema }: { toolName?: string; description?: string; schema?: ZodSchema<any>; }): HandoffDescriptor => {\n const finalName = toolName || `handoff_to_${runtime.name || 'agent'}`;\n const zschema = schema || z.object({ reason: z.string().describe('Reason for handoff') });\n createTool({\n name: finalName,\n description: description || `Handoff control to agent ${runtime.name || 'Agent'}`,\n schema: zschema,\n func: async (_args: any) => ({ __handoff: { runtime } })\n });\n return { type: 'handoff', toolName: finalName, description: description || '', schema: zschema, target: instance } as any;\n },\n __runtime: runtime,\n };\n\n if (opts.handoffs && Array.isArray(opts.handoffs)) {\n const handoffTools = opts.handoffs.map(h => {\n const schema = h.schema || z.object({ reason: z.string().describe('Reason for handoff') });\n return createTool({\n name: h.toolName,\n description: h.description || `Handoff to ${h.target.__runtime.name || 'agent'}`,\n schema,\n func: async (_args: any) => ({ __handoff: { runtime: h.target.__runtime } })\n });\n });\n runtime.tools = [...runtime.tools, ...handoffTools];\n }\n\n return instance;\n}\n","import type { Message, SmartAgentOptions, SmartState, ToolInterface } from \"../types.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { normalizeUsage } from \"../utils/usage.js\";\nimport { recordTraceEvent, sanitizeTracePayload, estimatePayloadBytes, getModelName, getProviderName } from \"../utils/tracing.js\";\n\nexport function createAgentNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n // Prefer dynamic runtime config from state.agent, fallback to initial opts\n const runtime = state.agent || {\n name: opts.name,\n version: opts.version,\n model: opts.model,\n tools: (opts.tools as any) || [],\n systemPrompt: opts.systemPrompt,\n limits: opts.limits,\n useTodoList: opts.useTodoList,\n outputSchema: (opts as any).outputSchema,\n };\n const tools: Array<ToolInterface<any, any, any>> = (runtime.tools as any) ?? [];\n const modelWithTools = (runtime.model)?.bindTools\n ? (runtime.model).bindTools(tools)\n : runtime.model;\n // 3) Prepend a single, fresh system prompt for this turn only\n const structuredOutputHint = runtime.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n const systemMsg = {\n role: 'system',\n content: buildSystemPrompt(\n [runtime.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n runtime.useTodoList === true,\n runtime.name || \"Agent\"\n )\n } as any;\n const messages = [systemMsg, ...state.messages];\n\n const traceSession = (state.ctx as any)?.__traceSession;\n const actorName = runtime.name ?? opts.name ?? \"agent\";\n const actorVersion = runtime.version ?? opts.version;\n const start = Date.now();\n const promptMessages = [systemMsg, ...state.messages];\n const shouldLogPrompt = !!traceSession && traceSession.resolvedConfig.logData;\n const promptPayload = shouldLogPrompt ? sanitizeTracePayload(promptMessages) : undefined;\n const promptBytes = promptPayload !== undefined ? estimatePayloadBytes(promptPayload) : undefined;\n\n let response: any;\n try {\n response = await modelWithTools.invoke(promptMessages);\n } catch (err: any) {\n const durationMs = Date.now() - start;\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Error\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n status: \"error\",\n durationMs,\n requestBytes: promptBytes,\n model: getModelName((runtime as any).model || (opts as any).model),\n provider: getProviderName((runtime as any).model || (opts as any).model),\n error: { message: err?.message || String(err), stack: err?.stack },\n messageList: promptMessages,\n });\n throw err;\n }\n const messagesWithResponse: Message[] = [\n ...messages,\n response as any,\n ];\n\n // ---- Usage tracking (per-request) ----\n const rawUsage = (response as any)?.usage || (response as any)?.response_metadata?.token_usage || (response as any)?.response_metadata?.usage;\n const normalized = normalizeUsage(rawUsage);\n const modelName = getModelName((runtime as any).model || (opts as any).model) || \"unknown_model\";\n const providerName = getProviderName((runtime as any).model || (opts as any).model);\n const durationMs = Date.now() - start;\n const shouldLogResponse = !!traceSession && traceSession.resolvedConfig.logData;\n const responsePayload = shouldLogResponse ? sanitizeTracePayload(response) : undefined;\n const responseBytes = responsePayload !== undefined ? estimatePayloadBytes(responsePayload) : undefined;\n\n recordTraceEvent(traceSession, {\n type: \"ai_call\",\n label: \"Assistant Response\",\n actor: { scope: \"agent\", name: actorName, role: \"assistant\", version: actorVersion },\n durationMs,\n inputTokens: normalized?.prompt_tokens,\n outputTokens: normalized?.completion_tokens,\n totalTokens: normalized?.total_tokens,\n cachedInputTokens: normalized?.prompt_tokens_details?.cached_tokens,\n requestBytes: promptBytes,\n responseBytes,\n model: modelName,\n provider: providerName,\n messageList: messagesWithResponse,\n });\n if (normalized) {\n const usageState = state.usage || { perRequest: [], totals: {} };\n const id = `${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n const turn = usageState.perRequest.length + 1;\n const timestamp = new Date().toISOString();\n const cachedInputTok = normalized.prompt_tokens_details.cached_tokens;\n usageState.perRequest.push({ id, modelName, usage: normalized, timestamp, turn, cachedInput: cachedInputTok });\n // Normalize token counts to aggregate totals\n const inputTok = normalized.prompt_tokens;\n const outputTok = normalized.completion_tokens;\n const totalTok = normalized.total_tokens;\n const key = modelName as string;\n const agg = usageState.totals[key] || { input: 0, output: 0, total: 0, cachedInput: 0 };\n usageState.totals[key] = {\n input: agg.input + (Number(inputTok) || 0),\n output: agg.output + (Number(outputTok) || 0),\n total: agg.total + (Number(totalTok) || 0),\n cachedInput: agg.cachedInput + (Number(cachedInputTok) || 0),\n };\n // Attach back so next nodes see updated state\n (state as any).usage = usageState;\n }\n\n return { messages: messagesWithResponse, usage: (state as any).usage };\n };\n}\n","// Lightweight message helpers to avoid hard dependency on LangChain\nimport type { SmartAgentOptions, SmartState, BaseMessage } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\n// Helper for lightweight message construction\nconst systemMessage = (content: string) => ({ role: 'system', content });\nconst humanMessage = (content: string) => ({ role: 'user', content });\n\n/**\n * Validates message sequence to ensure OpenAI API compatibility.\n * Every tool message must follow an assistant message with a matching tool_call.\n * This prevents \"messages with role 'tool' must be a response to a preceeding message with 'tool_calls'\" errors.\n */\nfunction validateMessageSequence(messages: BaseMessage[]): BaseMessage[] {\n const validated: BaseMessage[] = [];\n const pendingToolCallIds = new Set<string>();\n \n for (const m of messages) {\n if (m.role === 'assistant') {\n // Clear any pending tool calls when we see a new assistant message without tool_calls\n if (!m.tool_calls || m.tool_calls.length === 0) {\n pendingToolCallIds.clear();\n } else {\n // Register new tool calls\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) pendingToolCallIds.add(tc.id);\n });\n }\n validated.push(m);\n } else if (m.role === 'tool') {\n const toolCallId = m.tool_call_id;\n // Only include tool messages that have a pending (expected) tool_call_id\n if (toolCallId && pendingToolCallIds.has(toolCallId)) {\n pendingToolCallIds.delete(toolCallId);\n validated.push(m);\n }\n // Otherwise, this is an orphan tool message - skip it\n } else {\n // user, system messages - always include\n validated.push(m);\n }\n }\n \n return validated;\n}\n\n/**\n * Gets the summarization configuration normalized\n */\nfunction getSummarizationConfig(opts: SmartAgentOptions) {\n if (typeof opts.summarization === 'object') {\n return {\n enabled: opts.summarization.enable !== false,\n maxTokens: opts.summarization.maxTokens ?? 50000,\n // Max tokens we can send to the model for summarization prompt itself\n // This should be well under the model's context limit\n summaryPromptMaxTokens: opts.summarization.summaryPromptMaxTokens ?? 8000,\n promptTemplate: opts.summarization.promptTemplate\n };\n }\n // Fallback to default 50000 if not specified\n return {\n enabled: opts.summarization !== false,\n maxTokens: 50000,\n summaryPromptMaxTokens: 8000,\n promptTemplate: undefined\n }; \n}\n\n/**\n * Creates the summarization node.\n * \n * Logic:\n * 1. Check if summarization is enabled.\n * 2. Convert current conversation history into a text suitable for summarization.\n * 3. Invoke the model to generate a summary of the conversation.\n * 4. Rewrite the message history:\n * - All tool messages (role='tool') have their content replaced with \"SUMMARIZED\".\n * - A new assistant message calling 'summarize_context' is appended.\n * - A new tool message with the summary content is appended.\n */\nexport function createContextSummarizeNode(opts: SmartAgentOptions) {\n return async (state: SmartState): Promise<Partial<SmartState>> => {\n const config = getSummarizationConfig(opts);\n if (!config.enabled) return {};\n\n const model = (opts as any).model;\n const messages = state.messages || [];\n\n // Check if there are any tool messages that can be compressed\n const compressableMessages = messages.filter(m => m.role === 'tool' && m.content !== \"SUMMARIZED\");\n if (compressableMessages.length === 0) {\n // Nothing to compress. If we summarize, we only ADD tokens (summary).\n // Abort to prevent infinite loops or growing context.\n return {};\n }\n\n // 1. Generate Summary\n // We convert current messages to a simple text format for the model to summarize.\n // IMPORTANT: We must truncate the conversation to fit within summaryPromptMaxTokens\n // to avoid \"input too large\" errors from the model.\n \n // Build conversation text from RECENT messages, respecting token budget\n const summaryPromptMaxTokens = config.summaryPromptMaxTokens;\n // Reserve ~500 tokens for the system prompt and instructions\n const availableTokensForConversation = summaryPromptMaxTokens - 500;\n \n // Build messages from newest to oldest, stopping when we hit the budget\n const messageTexts: string[] = [];\n let accumulatedTokens = 0;\n \n // Process messages from end to start (most recent first)\n for (let i = messages.length - 1; i >= 0; i--) {\n const m = messages[i];\n let content = \"\";\n if (typeof m.content === \"string\") content = m.content;\n else if (Array.isArray(m.content)) {\n content = m.content.map((c: any) => c.text || JSON.stringify(c)).join(\" \");\n }\n \n // Truncate individual message content if it's too large (e.g., huge tool outputs)\n const maxContentLength = 2000; // ~500 tokens per message max\n if (content.length > maxContentLength) {\n content = content.substring(0, maxContentLength) + \"... [TRUNCATED]\";\n }\n \n let prefix = `${m.role.toUpperCase()}`;\n if (m.name) prefix += ` (${m.name})`;\n \n const messageText = `${prefix}: ${content}`;\n const messageTokens = countApproxTokens(messageText);\n \n if (accumulatedTokens + messageTokens > availableTokensForConversation) {\n // We've hit our budget, stop adding more messages\n // Add a note that earlier messages were omitted\n messageTexts.unshift(\"[Earlier conversation history omitted for brevity]\");\n break;\n }\n \n messageTexts.unshift(messageText);\n accumulatedTokens += messageTokens;\n }\n \n const conversationText = messageTexts.join(\"\\n\\n\");\n\n const previousSummary = Array.isArray(state.summaries) && state.summaries.length > 0\n ? state.summaries[state.summaries.length - 1]\n : \"\";\n\n const defaultPrompt = `Please summarize the following conversation history and update any previous summary.\nFocus on:\n- User goals and intent.\n- Key decisions made and actions taken.\n- Important tool outputs and data retrieved.\n- Current state of the task.\n\nPrevious summary (if any):\n${previousSummary || \"(none)\"}\n\nConversation:\n${conversationText}\n\nSummary:`;\n\n const template = config.promptTemplate || defaultPrompt;\n const promptBody = template\n .replace(/\\{\\{\\s*conversation\\s*\\}\\}/g, conversationText)\n .replace(/\\{\\{\\s*previousSummary\\s*\\}\\}/g, previousSummary || \"\");\n\n const summaryPrompt = [\n systemMessage(\"You are a helpful assistant that summarizes conversation history efficiently.\"),\n humanMessage(promptBody)\n ];\n\n let summaryText = \"Summary unavailable.\";\n try {\n const response = await model.invoke(summaryPrompt);\n summaryText = typeof response.content === \"string\" \n ? response.content \n : Array.isArray(response.content) \n ? response.content.map((c: any) => c.text || \"\").join(\"\")\n : JSON.stringify(response.content);\n } catch (err) {\n console.error(\"[ContextSummarize] Failed to generate summary:\", err);\n return {}; // Abort changes if summarization fails\n }\n\n // 2. Build a map of tool_call_id -> assistant message index\n // This ensures we only keep tool messages that have a matching assistant with tool_calls\n const toolCallIdToAssistantIdx = new Map<string, number>();\n messages.forEach((m, idx) => {\n if (m.role === 'assistant' && m.tool_calls && Array.isArray(m.tool_calls)) {\n m.tool_calls.forEach((tc: any) => {\n if (tc.id) {\n toolCallIdToAssistantIdx.set(tc.id, idx);\n }\n });\n }\n });\n\n // 3. Modify existing messages\n // Replace content of tool messages with \"SUMMARIZED\", but only if they have a matching assistant.\n // Filter out orphan tool messages that don't have a preceding assistant with tool_calls.\n const newMessages = messages.map((m) => {\n if (m.role === 'tool') {\n const toolCallId = m.tool_call_id;\n \n // Check if this tool message has a matching assistant with tool_calls\n if (!toolCallId || !toolCallIdToAssistantIdx.has(toolCallId)) {\n // Orphan tool message - mark for removal\n return null;\n }\n \n // Check if it's already summarized to avoid double-processing\n if (m.content === \"SUMMARIZED\") return m;\n \n return { \n ...m, \n content: \"SUMMARIZED\" \n };\n }\n return m;\n }).filter((m): m is NonNullable<typeof m> => m !== null);\n\n // 4. Validate message sequence - ensure every tool message follows an assistant with matching tool_calls\n const validatedMessages = validateMessageSequence(newMessages);\n\n // 5. Append the summarization interaction\n // We inject a fake tool call and response to represent the summarization event in the history.\n const summaryToolCallId = `call_summary_${Date.now()}`;\n \n // The assistant \"calls\" the summarizer\n const assistantSummaryCall: BaseMessage = {\n role: \"assistant\", // \"assistant\"\n content: \"Context limit reached. Summarizing conversation history to reduce token usage.\",\n tool_calls: [\n {\n id: summaryToolCallId,\n type: \"function\",\n function: {\n name: \"summarize_context\",\n arguments: \"{}\"\n }\n }\n ]\n };\n\n // The tool \"responds\" with the summary\n const toolSummaryResponse: BaseMessage = {\n role: \"tool\",\n tool_call_id: summaryToolCallId,\n name: \"summarize_context\", // Matches the tool name in the call\n content: summaryText\n };\n\n const summaries = Array.isArray(state.summaries) ? [...state.summaries, summaryText] : [summaryText];\n\n return {\n messages: [...validatedMessages, assistantSummaryCall, toolSummaryResponse] as any,\n summaries\n };\n };\n}\n","import { countApproxTokens } from \"./utilTokens.js\";\nimport { Message } from \"../types.js\";\n\nexport type TokenLimits = {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n};\n\nexport async function applyTokenLimits({\n state,\n limits,\n}: {\n state: { messages: Message[]; summaries?: string[] };\n limits: {\n contextTokenLimit: number;\n summaryTokenLimit: number;\n };\n}) {\n const messages = state.messages || [];\n const budget = limits.contextTokenLimit;\n let total = messages.reduce((acc, m) => acc + countApproxTokens(String((m as any).content || \"\")), 0);\n if (total <= budget) return state;\n\n const newMessages: Message[] = [...messages];\n\n return { ...state, messages: newMessages };\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./tool.js\";\n// no message helpers needed here\n\n// Create context tools like get_tool_response, manage_todo_list\nexport function createContextTools(\n stateRef: { toolHistory?: any[]; toolHistoryArchived?: any[]; todoList?: any[] },\n opts?: { planningEnabled?: boolean; outputSchema?: any }\n) {\n const tools = [] as any[];\n\n if (opts?.planningEnabled) {\n const manageTodo = createTool({\n name: \"manage_todo_list\",\n description:\n \"Manage a structured todo list to track progress and plan tasks throughout your coding session. Use this tool VERY frequently to ensure task visibility and proper planning.\\n\\nWhen to use this tool:\\n- Complex multi-step work requiring planning and tracking\\n- When user provides multiple tasks or requests (numbered/comma-separated)\\n- After receiving new instructions that require multiple steps\\n- BEFORE starting work on any todo (mark as in-progress)\\n- IMMEDIATELY after completing each todo (mark completed individually)\\n- When breaking down larger tasks into smaller actionable steps\\n- To give users visibility into your progress and planning\\n\\nWhen NOT to use:\\n- Single, trivial tasks that can be completed in one step\\n- Purely conversational/informational requests\\n- When just reading files or performing simple searches\\n\\nCRITICAL workflow:\\n1. Plan tasks by writing todo list with specific, actionable items\\n2. Complete the work for that specific todo\\n3. Mark that todo as completed IMMEDIATELY\\n4. Move to next todo and repeat\\n\\nTodo states:\\n- not-started: Todo not yet begun\\n- in-progress: Currently working (limit ONE at a time)\\n- completed: Finished successfully\\n\\nIMPORTANT: Mark todos completed as soon as they are done. Do not batch completions.\",\n schema: z.object({\n operation: z.enum([\"write\", \"read\"]),\n todoList: z.array(z.object({\n id: z.number().int().positive().describe(\"Sequential id starting from 1\"),\n title: z.string().min(1),\n description: z.string().min(1),\n status: z.enum([\"not-started\", \"in-progress\", \"completed\"]),\n evidence: z.string().max(200).optional()\n })).optional()\n }),\n func: async ({ operation, todoList }) => {\n const onEvent = (manageTodo as any)._stateRef?.__onEvent as undefined | ((e: any) => void);\n if (operation === \"read\") {\n const list = stateRef.todoList || [];\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation: \"read\", todoList: list });\n return list;\n }\n if (Array.isArray(todoList)) {\n stateRef.todoList = todoList;\n }\n const payload = {\n status: \"ok\",\n operation,\n count: Array.isArray(todoList) ? todoList.length : undefined,\n } as const;\n onEvent?.({ type: \"plan\", source: \"manage_todo_list\", operation: \"write\", todoList });\n return payload;\n }\n });\n (manageTodo as any)._stateRef = stateRef;\n tools.push(manageTodo);\n }\n\n // get_tool_response retrieves original raw output by executionId\n const getTool = createTool({\n name: \"get_tool_response\",\n description:\n \"RETRIEVE tool execution response: Use this to access the full output of a tool execution that shows as 'SUMMARIZED' in the tool history.\",\n schema: z.object({ executionId: z.string().describe(\"Tool execution id\") }),\n func: async ({ executionId }) => {\n let execution = stateRef.toolHistory?.find((t) => t.executionId === executionId);\n if (!execution) {\n execution = stateRef.toolHistoryArchived?.find((t) => t.executionId === executionId);\n }\n if (execution) {\n return execution.rawOutput || execution.output;\n }\n return \"Execution not found. Please check the executionId.\";\n }\n });\n // mark mutable stateRef for toolsNode sync\n (getTool as any)._stateRef = stateRef;\n tools.push(getTool);\n\n // Structured output finalize tool (response) if outputSchema provided\n if (opts?.outputSchema) {\n const responseTool = createTool({\n name: 'response',\n description: 'Finalize the answer by returning the final structured JSON matching the required schema. Call exactly once when you are fully done, then stop.',\n schema: opts.outputSchema.shape ? opts.outputSchema : z.any(),\n func: async (data: any) => {\n // Validate directly against provided schema\n try {\n const validated = opts.outputSchema.parse ? opts.outputSchema.parse(data) : data;\n // store parsed result for toolsNode to pick up (toolsNode already looks for __finalStructuredOutput?)\n return { __finalStructuredOutput: true, data: validated };\n } catch (e: any) {\n return { error: 'Schema validation failed', details: e?.message };\n }\n }\n });\n (responseTool as any)._stateRef = stateRef;\n tools.push(responseTool);\n }\n\n return tools;\n}\n","import { SmartState, SmartAgentOptions } from \"../types.js\";\nimport { countApproxTokens } from \"../utils/utilTokens.js\";\n\n/** Shared helper to compute whether we exceed token limit */\nfunction needsSummarization(state: SmartState, opts: SmartAgentOptions, summarizationEnabled: boolean): boolean {\n if (!summarizationEnabled) {\n return false;\n }\n\n // Determine the effective max tokens for summarization\n // Order of precedence:\n // 1. opts.summarization.maxTokens (if strictly defined)\n // 2. Default: 50000\n let maxTok: number | undefined;\n\n if (typeof opts.summarization === 'object' && typeof opts.summarization.maxTokens === 'number') {\n maxTok = opts.summarization.maxTokens;\n }\n \n // Default to 50000 if no limit specified but summarization is enabled\n if (maxTok === undefined) {\n maxTok = 50000;\n }\n\n try {\n const allText = (state.messages || [])\n .map((m: any) => {\n if (typeof m.content === \"string\") return m.content;\n if (Array.isArray(m.content)) {\n return m.content.map((c: any) => (typeof c === 'string' ? c : c?.text ?? c?.content ?? JSON.stringify(c))).join('');\n }\n // Handle object content (e.g., tool results)\n if (m.content && typeof m.content === 'object') {\n return JSON.stringify(m.content);\n }\n return '';\n })\n .join(\"\\n\");\n const tokenCount = countApproxTokens(allText);\n const needsSum = tokenCount > maxTok;\n // Debug log for development - can be removed in production\n if (process.env.DEBUG_SUMMARIZATION) {\n const msgCount = (state.messages || []).length;\n const toolMsgs = (state.messages || []).filter((m: any) => m.role === 'tool');\n const toolDetails = toolMsgs.map((m: any, i: number) => {\n const contentStr = typeof m.content === 'string' ? m.content : JSON.stringify(m.content);\n return `[${i}] id:${m.tool_call_id?.slice(-8) || 'none'} len:${contentStr.length} preview:\"${contentStr.slice(0, 30)}...\"`;\n });\n console.log(`[Summarization] Messages: ${msgCount}, Tool messages: ${toolMsgs.length}`);\n toolDetails.forEach(d => console.log(` ${d}`));\n console.log(`[Summarization] Token count: ${tokenCount}, Max: ${maxTok}, Needs summarization: ${needsSum}`);\n }\n return needsSum;\n } catch (e) {\n return false;\n }\n}\n\nexport function resolverDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function resolverDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function toolsDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function toolsDecision(state: SmartState) {\n const max = (opts.limits?.maxToolCalls ?? 10) as number;\n const count = state.toolCallCount || 0;\n if (count >= max) return \"toolLimitFinalize\";\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n\nexport function finalizeDecisionFactory(opts: SmartAgentOptions, summarizationEnabled: boolean) {\n return function finalizeDecision(state: SmartState) {\n return needsSummarization(state, opts, summarizationEnabled) ? \"contextSummarize\" : \"agent\";\n };\n}\n","import type { AgentInvokeResult, InvokeConfig, SmartAgentOptions, SmartState, SmartAgentInstance } from \"../types.js\";\nimport { ZodSchema } from \"zod\";\nimport { createAgent } from \"../agent.js\";\nimport { createContextTools } from \"../contextTools.js\";\nimport { createContextSummarizeNode } from \"../nodes/contextSummarize.js\";\nimport { buildSystemPrompt } from \"../prompts.js\";\nimport { resolverDecisionFactory, toolsDecisionFactory } from \"../graph/decisions.js\";\n\n// SmartAgent on top of core createAgent: adds system prompt, optional planning context tools, and token-aware summarization.\nexport function createSmartAgent<TOutput = unknown>(opts: SmartAgentOptions & { outputSchema?: ZodSchema<TOutput> }): SmartAgentInstance<TOutput> {\n // Prepare context tools (todo + get_tool_response). Avoid duplicating response tool; base agent will add it if schema provided.\n const stateRef: any = { toolHistory: undefined, toolHistoryArchived: undefined, todoList: undefined };\n const planningEnabled = opts.useTodoList === true;\n const contextTools = createContextTools(stateRef, { planningEnabled, outputSchema: undefined });\n const mergedTools = [...((opts.tools as any) ?? []), ...contextTools];\n\n // Compose base agent\n const base = createAgent<TOutput>({ ...opts, tools: mergedTools });\n\n let summarizationEnabled = false;\n if (typeof opts.summarization === 'object') {\n summarizationEnabled = opts.summarization.enable !== false;\n } else {\n summarizationEnabled = opts.summarization !== false; // default true if not object and not strictly false\n }\n\n const summarizer = summarizationEnabled ? createContextSummarizeNode(opts) : undefined;\n const decideBefore = resolverDecisionFactory(opts, summarizationEnabled);\n const decideAfter = toolsDecisionFactory(opts, summarizationEnabled);\n\n const structuredOutputHint = opts.outputSchema\n ? [\n 'A structured output schema is active.',\n 'Do NOT output the final JSON directly as an assistant message.',\n 'When completely finished, call tool `response` passing the final JSON matching the schema as its arguments (direct object).',\n 'Call it exactly once then STOP producing further assistant messages.'\n ].join('\\n')\n : '';\n\n function systemMessage(): any {\n const sys = buildSystemPrompt(\n [opts.systemPrompt, structuredOutputHint].filter(Boolean).join(\"\\n\"),\n opts.useTodoList === true,\n opts.name || \"Agent\"\n );\n return { role: 'system', content: sys } as any;\n }\n\n const instance: SmartAgentInstance<TOutput> = {\n invoke: async (input: SmartState, config?: InvokeConfig): Promise<AgentInvokeResult<TOutput>> => {\n // wire stateRef for context tools\n stateRef.toolHistory = input.toolHistory;\n stateRef.toolHistoryArchived = input.toolHistoryArchived;\n\n // Prepend a single system message once\n const alreadyHasSystem = Array.isArray(input.messages) && input.messages[0]?.role === 'system';\n const seedMessages = alreadyHasSystem ? [...(input.messages || [])] : [systemMessage(), ...(input.messages || [])];\n let state: SmartState = { ...input, messages: seedMessages } as SmartState;\n let lastResult: AgentInvokeResult<TOutput> | null = null;\n const effectiveMaxToolCalls = (config?.limits?.maxToolCalls ?? opts.limits?.maxToolCalls ?? 10) as number;\n const iterationLimit = Math.max(effectiveMaxToolCalls * 3 + 5, 30);\n\n for (let i = 0; i < iterationLimit; i++) {\n // Pre-agent summarization decision\n const next = summarizationEnabled ? decideBefore(state) : 'agent';\n if (next === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n // Prevent infinite loop if summarizer returns no changes (e.g. error or nothing to summarize)\n if (!delta || Object.keys(delta).length === 0) {\n // Summarization failed to produce a change. Proceed to agent to avoid stall, \n // though it might hit token limits.\n } else {\n state = { ...state, ...delta } as SmartState;\n continue; // run decision again before calling base\n }\n }\n\n // Delegate a full turn to base agent (includes tools + tool-limit finalize + structured output finalize)\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n // Preserve summaries from current state when merging with result state\n const currentSummaries = state.summaries;\n state = (res.state as SmartState) || { ...state, messages: res.messages };\n // Restore summaries if they were lost during state merge\n if (currentSummaries && currentSummaries.length > 0 && (!state.summaries || state.summaries.length === 0)) {\n state = { ...state, summaries: currentSummaries };\n }\n\n // Check if base agent signaled that summarization is needed (context too large)\n if ((state as any).ctx?.__needsSummarization && summarizer) {\n // Clear the flag\n const ctx = { ...(state.ctx || {}) };\n delete ctx.__needsSummarization;\n state = { ...state, ctx } as SmartState;\n // Run summarization\n const delta = await summarizer(state);\n // If delta is valid, apply and loop. If empty, we continue to next iteration (or break depending on flow)\n // Since we are inside the main loop, 'continue' will go to top of loop.\n // If delta empty, we just updated the ctx flag, so 'continue' at least retries with clean flag.\n if (delta && Object.keys(delta).length > 0) {\n state = { ...state, ...delta } as SmartState;\n }\n continue; // Loop will attempt another agent pass after summarization\n }\n\n // If structured output finalize triggered, base already stopped with parsed output\n if ((state as any).ctx?.__finalizedDueToStructuredOutput) break;\n\n // Post-tools summarization decision\n if (summarizationEnabled) {\n const after = decideAfter(state);\n if (after === 'contextSummarize' && summarizer) {\n const delta = await summarizer(state);\n if (delta && Object.keys(delta).length > 0) {\n state = { ...state, ...delta } as SmartState;\n // Loop will attempt another agent pass\n continue;\n }\n }\n }\n\n // If base produced an assistant message without tool calls (its normal stop), we're done.\n break;\n }\n\n // Fall back if base was never invoked (edge case)\n if (!lastResult) {\n const res = await base.invoke(state, config);\n lastResult = res as AgentInvokeResult<TOutput>;\n }\n\n // Ensure summaries are preserved in the final result\n if (state.summaries && state.summaries.length > 0) {\n if (lastResult.state) {\n lastResult = { ...lastResult, state: { ...lastResult.state, summaries: state.summaries } };\n } else {\n lastResult = { ...lastResult, state: { ...state, summaries: state.summaries } };\n }\n }\n\n return lastResult as AgentInvokeResult<TOutput>;\n },\n snapshot: base.snapshot,\n resume: base.resume,\n resolveToolApproval: base.resolveToolApproval,\n asTool: base.asTool,\n asHandoff: base.asHandoff,\n __runtime: base.__runtime,\n };\n\n return instance;\n}\n","import type { ContentPart } from \"../types.js\";\n\n// Convert content (string | parts[]) to a human-readable string for logging, token counting, or summarization.\nexport function contentToString(content: string | ContentPart[] | any): string {\n try {\n if (content == null) return \"\";\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((p) => {\n if (!p || typeof p !== \"object\") return String(p);\n if ((p as any).type === \"text\") return String((p as any).text ?? \"\");\n if ((p as any).type === \"image_url\") {\n const img = (p as any).image_url;\n const url = typeof img === \"string\" ? img : img?.url;\n const detail = typeof img === \"string\" ? undefined : img?.detail;\n return `[image:${url || \"unknown\"}${detail ? ` detail=${detail}` : \"\"}]`;\n }\n // generic fallback\n return JSON.stringify(p);\n })\n .join(\"\\n\");\n }\n // unknown object\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n}\n\n// Merge an array of messages' contents into a single string (used in token counting decisions)\nexport function mergeContentsToString(contents: Array<string | ContentPart[] | any>): string {\n return contents.map((c) => contentToString(c)).join(\"\\n\");\n}\n","import AjvModule, { type ValidateFunction, type ErrorObject, type Options } from \"ajv\";\nimport { z } from \"zod\";\nimport type { JSONSchema7 } from \"json-schema\";\nimport type {\n GuardrailRule,\n GuardrailContext,\n GuardrailDisposition,\n SmartAgentInstance,\n} from \"../types.js\";\nimport { contentToString, mergeContentsToString } from \"../utils/content.js\";\n\nconst Ajv = (AjvModule as unknown as { default?: new (options?: Options) => any })?.default ?? (AjvModule as unknown as new (options?: Options) => any);\nconst defaultAjv = new Ajv({ allErrors: true } satisfies Options);\n(defaultAjv as any).opts.strict = false;\n\nfunction ensureRegExp(pattern: RegExp | string, flags?: string): RegExp {\n if (pattern instanceof RegExp) return pattern;\n return new RegExp(pattern, flags ?? \"i\");\n}\n\nfunction latestText(context: GuardrailContext): string {\n return contentToString(context.latestMessage?.content ?? \"\");\n}\n\nfunction threadText(context: GuardrailContext): string {\n return mergeContentsToString(context.messages.map((msg) => msg.content));\n}\n\nexport type RegexRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n pattern: RegExp | string;\n flags?: string;\n matchDisposition?: GuardrailDisposition;\n selector?: (context: GuardrailContext) => string;\n allowIfMatch?: boolean;\n failureMessage?: string;\n};\n\nexport function regexRule(options: RegexRuleOptions): GuardrailRule {\n const regex = ensureRegExp(options.pattern, options.flags);\n const selector = options.selector || latestText;\n const failureMessage =\n options.failureMessage || `Message violates pattern: ${regex.toString()}`;\n const matchDisposition = options.matchDisposition || \"block\";\n const allowIfMatch = options.allowIfMatch === true;\n\n return {\n id: options.id,\n title: options.title || \"Regex compliance\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n const matches = regex.test(text);\n const passed = allowIfMatch ? matches : !matches;\n const disposition = matches ? matchDisposition : \"allow\";\n return {\n passed,\n reason: matches ? failureMessage : undefined,\n disposition,\n details: matches ? { pattern: regex.toString(), textSnippet: text.slice(0, 200) } : undefined,\n };\n },\n };\n}\n\nexport type JsonSchemaRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n schema: JSONSchema7 | z.ZodTypeAny;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowOnParseError?: boolean;\n};\n\nfunction compileValidator(\n schema: JSONSchema7 | z.ZodTypeAny\n): ((input: unknown) => { valid: boolean; errors?: string[] }) {\n if ((schema as z.ZodTypeAny)?._def) {\n const typed = schema as z.ZodTypeAny;\n return (input: unknown) => {\n const result = typed.safeParse(input);\n return {\n valid: result.success,\n errors: result.success\n ? undefined\n : result.error.issues.map((issue) => issue.message),\n };\n };\n }\n\n const validator: ValidateFunction = defaultAjv.compile(schema as JSONSchema7);\n return (input: unknown) => {\n const valid = validator(input);\n const errors = (validator.errors as ErrorObject[] | null | undefined)?.map((err) => {\n const path = (\"instancePath\" in err && typeof err.instancePath === \"string\" && err.instancePath.length > 0)\n ? err.instancePath\n : ((err as any).dataPath as string | undefined);\n return `${path || \"/\"} ${err.message || \"invalid\"}`;\n });\n return { valid: !!valid, errors };\n };\n}\n\nexport function jsonSchemaRule(options: JsonSchemaRuleOptions): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"block\";\n const validator = compileValidator(options.schema);\n\n return {\n id: options.id,\n title: options.title || \"JSON schema validation\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch (err) {\n if (options.allowOnParseError) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message content is not valid JSON.\",\n details: { error: err instanceof Error ? err.message : String(err) },\n };\n }\n\n const result = validator(parsed);\n if (result.valid) {\n return { passed: true };\n }\n return {\n passed: false,\n disposition,\n reason: \"Message JSON failed schema validation.\",\n details: { errors: result.errors },\n };\n },\n };\n}\n\nexport type CodeDetectionRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n selector?: (context: GuardrailContext) => string;\n disposition?: GuardrailDisposition;\n allowList?: Array<RegExp | string>;\n};\n\nfunction containsAllowListed(text: string, allowList?: Array<RegExp | string>): boolean {\n if (!allowList?.length) return false;\n return allowList.some((pattern) => ensureRegExp(pattern).test(text));\n}\n\nconst codePattern = /```[\\s\\S]*?```|\\b(function|class|import|export|const|let|var)\\b|<[^>]+>/i;\n\nexport function codePresenceRule(options: CodeDetectionRuleOptions = {}): GuardrailRule {\n const selector = options.selector || latestText;\n const disposition = options.disposition || \"warn\";\n\n return {\n id: options.id,\n title: options.title || \"Code presence detection\",\n description: options.description,\n async evaluate(context) {\n const text = selector(context) ?? \"\";\n if (!text) return { passed: true };\n if (containsAllowListed(text, options.allowList)) {\n return { passed: true };\n }\n const matches = codePattern.test(text);\n if (!matches) return { passed: true };\n return {\n passed: false,\n disposition,\n reason: \"Potential code content detected in message.\",\n details: { snippet: text.slice(0, 200) },\n };\n },\n };\n}\n\nconst guardianSchema = z.object({\n allow: z.boolean().describe(\"Whether the message should be allowed.\"),\n disposition: z.enum([\"allow\", \"warn\", \"block\"]).optional(),\n reason: z\n .string()\n .max(400, \"Reason must be 400 characters or fewer.\")\n .optional(),\n details: z.record(z.any()).optional(),\n});\n\nexport type AgentRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n agent: SmartAgentInstance<z.infer<typeof guardianSchema>>;\n systemPrompt?: string;\n payloadBuilder?: (context: GuardrailContext) => string;\n dispositionFallback?: GuardrailDisposition;\n};\n\nfunction defaultPayload(context: GuardrailContext): string {\n const latest = latestText(context);\n const transcript = threadText(context);\n return JSON.stringify(\n {\n phase: context.phase,\n latestMessage: latest,\n transcript,\n metadata: {\n runtime: {\n name: context.runtime?.name,\n version: context.runtime?.version,\n },\n },\n },\n null,\n 2\n );\n}\n\nexport function agentVerdictRule(options: AgentRuleOptions): GuardrailRule {\n const payloadBuilder = options.payloadBuilder || defaultPayload;\n const fallbackDisposition = options.dispositionFallback || \"block\";\n\n return {\n id: options.id,\n title: options.title || \"Agent-based guardrail\",\n description: options.description,\n async evaluate(context) {\n const payload = payloadBuilder(context);\n const systemPrompt =\n options.systemPrompt ||\n \"You are a safety auditor. Review the provided conversation payload and decide whether it should continue. Return JSON with keys allow (boolean), optional disposition ('allow' | 'warn' | 'block'), optional reason (string), and optional details (object).\";\n\n const review = await options.agent.invoke({\n messages: [\n { role: \"system\", content: systemPrompt } as any,\n { role: \"user\", content: payload } as any,\n ],\n });\n\n let parsed = review.output;\n if (!parsed) {\n try {\n parsed = guardianSchema.parse(JSON.parse(review.content));\n } catch {\n parsed = guardianSchema.parse({ allow: false, reason: \"Guard agent did not return structured output.\" });\n }\n }\n\n const disposition = parsed.disposition || (parsed.allow ? \"allow\" : fallbackDisposition);\n return {\n passed: parsed.allow,\n disposition,\n reason: parsed.reason,\n details: parsed.details,\n };\n },\n };\n}\n\nexport type CustomRuleCallback = (\n context: GuardrailContext\n) =>\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n | Promise<\n | boolean\n | {\n allow: boolean;\n reason?: string;\n disposition?: GuardrailDisposition;\n details?: Record<string, any>;\n }\n >;\n\nexport type CustomRuleOptions = {\n id?: string;\n title?: string;\n description?: string;\n callback: CustomRuleCallback;\n defaultDisposition?: GuardrailDisposition;\n};\n\nexport function customCallbackRule(options: CustomRuleOptions): GuardrailRule {\n const fallbackDisposition = options.defaultDisposition || \"block\";\n return {\n id: options.id,\n title: options.title || \"Custom callback guardrail\",\n description: options.description,\n async evaluate(context) {\n const outcome = await options.callback(context);\n if (typeof outcome === \"boolean\") {\n return {\n passed: outcome,\n disposition: outcome ? \"allow\" : fallbackDisposition,\n };\n }\n return {\n passed: outcome.allow,\n disposition: outcome.disposition || (outcome.allow ? \"allow\" : fallbackDisposition),\n reason: outcome.reason,\n details: outcome.details,\n };\n },\n };\n}\n","import { GuardrailPhase, type ConversationGuardrail } from \"../types.js\";\nimport { evaluateGuardrails, createGuardrail } from \"./engine.js\";\nimport {\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n} from \"./checks.js\";\nimport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n} from \"./checks.js\";\n\nexport {\n evaluateGuardrails,\n createGuardrail,\n regexRule,\n jsonSchemaRule,\n codePresenceRule,\n agentVerdictRule,\n customCallbackRule,\n};\n\nexport type {\n RegexRuleOptions,\n JsonSchemaRuleOptions,\n CodeDetectionRuleOptions,\n AgentRuleOptions,\n CustomRuleOptions,\n CustomRuleCallback,\n};\n\ntype GuardrailPresetBase = {\n guardrailId?: string;\n guardrailTitle?: string;\n guardrailDescription?: string;\n phases?: GuardrailPhase[];\n haltOnViolation?: boolean;\n onViolation?: ConversationGuardrail[\"onViolation\"];\n metadata?: Record<string, any>;\n};\n\nexport type RegexGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<RegexRuleOptions, \"pattern\">;\n};\n\nexport function createRegexGuardrail(\n pattern: RegExp | string,\n options?: RegexGuardrailOptions\n): ConversationGuardrail {\n const rule = regexRule({ pattern, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"Regex Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type JsonGuardrailOptions = GuardrailPresetBase & {\n rule?: Omit<JsonSchemaRuleOptions, \"schema\">;\n};\n\nexport function createJsonGuardrail(\n schema: JsonSchemaRuleOptions[\"schema\"],\n options?: JsonGuardrailOptions\n): ConversationGuardrail {\n const rule = jsonSchemaRule({ schema, ...(options?.rule || {}) });\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || options?.rule?.title || \"JSON Schema Guardrail\",\n description: options?.guardrailDescription || options?.rule?.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n\nexport type CodeGuardrailOptions = GuardrailPresetBase & {\n rule?: CodeDetectionRuleOptions;\n};\n\nexport function createCodeGuardrail(options?: CodeGuardrailOptions): ConversationGuardrail {\n const ruleOptions = { disposition: \"warn\" as const, ...(options?.rule || {}) };\n const rule = codePresenceRule(ruleOptions);\n return createGuardrail({\n id: options?.guardrailId,\n title: options?.guardrailTitle || ruleOptions.title || \"Code Presence Guardrail\",\n description: options?.guardrailDescription || ruleOptions.description,\n appliesTo: options?.phases,\n checks: [rule],\n haltOnViolation: options?.haltOnViolation,\n onViolation: options?.onViolation,\n metadata: options?.metadata,\n });\n}\n"]}
|