Sign In

@agentskit/core

Package Overview
Dependencies
Maintainers
1
Versions
29
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@agentskit/core - npm Package Compare versions

Comparing version
1.12.6
to
1.12.7
+7
dist/chunk-VWKK6GKY.js
import {b,i,a,c}from'./chunk-4PAWFNZ5.js';var x=0;function w(e){return `${e}-${Date.now()}-${x++}`}function h(){let e=new Set;return {addObserver(t){return e.add(t),()=>{e.delete(t);}},emit(t){for(let o of e)try{let a=o.on(t);a&&typeof a.catch=="function"&&a.catch(()=>{});}catch{}}}}function D(e){return {id:w("msg"),role:e.role,content:e.content,status:e.status??"complete",metadata:e.metadata,toolCallId:e.toolCallId,createdAt:new Date}}function v(e){return e!=null&&typeof e=="object"&&Symbol.asyncIterator in e}function E(e){if(e==null)return "";if(typeof e=="string"||e instanceof Error)return String(e);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}async function T(e,t,o,a){let n=e.execute?.(t,o);if(v(n)){let s="";for await(let m of n)s+=String(m),a?.(s);return s}let r=await n;return E(r)}function C(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return {}}}function k(e){let t=new Set;return {async init(o){o.init&&!t.has(o.name)&&(await o.init(),t.add(o.name));},async disposeAll(){for(let o of t)try{await e.get(o)?.dispose?.();}catch{}t.clear();}}}async function M(e,t){let o="",a$1="";try{let n=e.stream();for await(let r of n)if(r.type==="text"&&r.content)o+=r.content,t.onText?.(o);else if(r.type==="reasoning"&&r.content)a$1+=r.content,t.onReasoning?.(a$1);else if(r.type==="tool_call")await t.onToolCall?.(r);else if(r.type==="tool_result"&&r.content)t.onToolResult?.(r.content);else if(r.type==="usage"&&r.usage)t.onUsage?.(r.usage);else if(r.type==="error"){t.onError?.(new b({code:i.AK_ADAPTER_STREAM_FAILED,message:r.content??"Stream error",hint:"Key/network/model/provider"}));return}else if(r.type==="done")break;t.onDone(o);}catch(n){let r=n instanceof a?n:new b({code:i.AK_ADAPTER_STREAM_FAILED,message:`Stream failed: ${n instanceof Error?n.message:String(n)}`,hint:"Adapter/provider",cause:n});t.onError?.(r);}}function I(...e){let t=new Map;for(let o of e)if(o)for(let a of o)t.set(a.name,a);return t}async function $(e,t){if(e.length===0)return {systemPrompt:t,skillTools:[]};let o=e.map(s=>`--- ${s.name} ---
${s.systemPrompt}`),n=`${t?`${t}
`:""}${o.join(`
`)}`,r=[];for(let s of e)if(s.onActivate){let m=await s.onActivate();r.push(...m.tools??[]);}return {systemPrompt:n,skillTools:r}}async function S(e,t,o){e&&await import('./tool-authorization-internal.js').then(a=>a.authorize(e,t,o));}async function z(e){let{tool:t,toolCall:o,context:a,emitter:n,lifecycle:r,onPartial:s,onConfirm:m,validate:g,authorize:y}=e,c$1=Date.now();if(!t?.execute){let i$1=new c({code:i.AK_TOOL_NOT_FOUND,message:`Tool "${o.name}" not found or has no execute function`,hint:"Register an executable tool in ChatConfig, e.g. { tools: [myTool] }."});return n.emit({type:"error",error:i$1}),{status:"error",error:i$1.toString(),durationMs:Date.now()-c$1}}if(g&&t.schema){let i$1=g(t.schema,o.args);if(!i$1.valid){let l=new c({code:i.AK_TOOL_INVALID_INPUT,message:i$1.message??`Tool "${o.name}" received invalid arguments`});return n.emit({type:"error",error:l}),{status:"error",error:l.toString(),durationMs:Date.now()-c$1}}}if(t.requiresConfirmation){if(!m)return {status:"skipped",result:"No confirmation handler",durationMs:Date.now()-c$1};if(!await m(o))return {status:"skipped",result:"Tool execution declined by confirmation handler",durationMs:Date.now()-c$1}}try{await S(y,o,{...a,tool:t,phase:"execute"});}catch(i){let l=i;return n.emit({type:"error",error:l}),{status:"error",error:l.toString(),durationMs:Date.now()-c$1}}await r.init(t),n.emit({type:"tool:start",name:o.name,args:o.args});try{let i=await T(t,o.args,a,s);return n.emit({type:"tool:end",name:o.name,result:i,durationMs:Date.now()-c$1}),{status:"complete",result:i,durationMs:Date.now()-c$1}}catch(i$1){let l=i$1 instanceof c?i$1:new c({code:i.AK_TOOL_EXEC_FAILED,message:`Tool "${o.name}" threw during execution: ${i$1 instanceof Error?i$1.message:String(i$1)}`,hint:"Check the tool execute() implementation.",cause:i$1});return n.emit({type:"error",error:l}),n.emit({type:"tool:end",name:o.name,result:`Error: ${l.message}`,durationMs:Date.now()-c$1}),{status:"error",error:l.toString(),durationMs:Date.now()-c$1}}}export{w as a,h as b,D as c,T as d,C as e,k as f,M as g,I as h,$ as i,S as j,z as k};//# sourceMappingURL=chunk-VWKK6GKY.js.map
//# sourceMappingURL=chunk-VWKK6GKY.js.map
{"version":3,"sources":["../src/primitives.ts","../src/agent-loop.ts"],"names":["nextId","generateId","prefix","createEventEmitter","observers","observer","event","result","buildMessage","params","isAsyncIterable","value","serializeToolResult","executeToolCall","tool","args","context","onPartialResult","raw","accumulated","chunk","safeParseArgs","parsed","createToolLifecycle","tools","initialized","name","consumeStream","source","handlers","accumulatedText","accumulatedReasoning","iterator","AdapterError","ErrorCodes","error","err","AgentsKitError","buildToolMap","sources","map","activateSkills","skills","prompt","prompts","system","skill","a","auth","fn","call","m","executeSafeTool","options","toolCall","emitter","lifecycle","onPartial","onConfirm","validate","authorize","began","ToolError","v"],"mappings":"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","file":"chunk-VWKK6GKY.js","sourcesContent":["import { AdapterError, AgentsKitError, ErrorCodes } from './errors'\nimport type {\n AgentEvent,\n Message,\n MessageRole,\n MessageStatus,\n Observer,\n StreamChunk,\n StreamSource,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\nimport type { TokenUsage } from './types/stream'\n\nlet nextId = 0\n\nexport function generateId(prefix: string): string {\n return `${prefix}-${Date.now()}-${nextId++}`\n}\n\nexport function createEventEmitter() {\n const observers = new Set<Observer>()\n\n return {\n addObserver(observer: Observer): () => void {\n observers.add(observer)\n return () => { observers.delete(observer) }\n },\n emit(event: AgentEvent): void {\n for (const observer of observers) {\n try {\n const result = observer.on(event)\n if (result && typeof (result as Promise<void>).catch === 'function') {\n (result as Promise<void>).catch(() => {})\n }\n } catch {\n // Observer errors must never break the main loop.\n }\n }\n },\n }\n}\n\nexport function buildMessage(params: {\n role: MessageRole\n content: string\n status?: MessageStatus\n metadata?: Record<string, unknown>\n toolCallId?: string\n}): Message {\n return {\n id: generateId('msg'),\n role: params.role,\n content: params.content,\n status: params.status ?? 'complete',\n metadata: params.metadata,\n toolCallId: params.toolCallId,\n createdAt: new Date(),\n }\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return value != null && typeof value === 'object' && Symbol.asyncIterator in value\n}\n\nfunction serializeToolResult(result: unknown): string {\n if (result == null) return ''\n if (typeof result === 'string' || result instanceof Error) return String(result)\n\n try {\n return JSON.stringify(result) ?? String(result)\n } catch {\n return String(result)\n }\n}\n\nexport async function executeToolCall(\n tool: ToolDefinition,\n args: Record<string, unknown>,\n context: ToolExecutionContext,\n onPartialResult?: (accumulated: string) => void,\n): Promise<string> {\n const raw = tool.execute?.(args, context)\n\n if (isAsyncIterable(raw)) {\n let accumulated = ''\n for await (const chunk of raw) {\n accumulated += String(chunk)\n onPartialResult?.(accumulated)\n }\n return accumulated\n }\n\n const result = await raw\n return serializeToolResult(result)\n}\n\nexport function safeParseArgs(args: string): Record<string, unknown> {\n try {\n const parsed = JSON.parse(args)\n return parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : {}\n } catch {\n return {}\n }\n}\n\nexport function createToolLifecycle(tools: Map<string, ToolDefinition>) {\n const initialized = new Set<string>()\n\n return {\n async init(tool: ToolDefinition): Promise<void> {\n if (tool.init && !initialized.has(tool.name)) {\n await tool.init()\n initialized.add(tool.name)\n }\n },\n async disposeAll(): Promise<void> {\n for (const name of initialized) {\n try {\n await tools.get(name)?.dispose?.()\n } catch {\n // Dispose errors should not propagate.\n }\n }\n initialized.clear()\n },\n }\n}\n\nexport interface ConsumeStreamHandlers {\n onText?: (accumulated: string) => void\n onReasoning?: (accumulated: string) => void\n onToolCall?: (chunk: StreamChunk) => Promise<void> | void\n onToolResult?: (content: string) => void\n onUsage?: (usage: TokenUsage) => void\n onError?: (error: Error) => void\n onDone: (accumulatedText: string) => void\n}\n\nexport async function consumeStream(\n source: StreamSource,\n handlers: ConsumeStreamHandlers,\n): Promise<void> {\n let accumulatedText = ''\n let accumulatedReasoning = ''\n\n try {\n const iterator = source.stream()\n for await (const chunk of iterator) {\n if (chunk.type === 'text' && chunk.content) {\n accumulatedText += chunk.content\n handlers.onText?.(accumulatedText)\n } else if (chunk.type === 'reasoning' && chunk.content) {\n accumulatedReasoning += chunk.content\n handlers.onReasoning?.(accumulatedReasoning)\n } else if (chunk.type === 'tool_call') {\n await handlers.onToolCall?.(chunk)\n } else if (chunk.type === 'tool_result' && chunk.content) {\n handlers.onToolResult?.(chunk.content)\n } else if (chunk.type === 'usage' && chunk.usage) {\n handlers.onUsage?.(chunk.usage)\n } else if (chunk.type === 'error') {\n handlers.onError?.(new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: chunk.content ?? 'Stream error',\n hint: 'Key/network/model/provider',\n }))\n return\n } else if (chunk.type === 'done') {\n break\n }\n }\n handlers.onDone(accumulatedText)\n } catch (error) {\n const err = error instanceof AgentsKitError\n ? error\n : new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Stream failed: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Adapter/provider',\n cause: error,\n })\n handlers.onError?.(err)\n }\n}\n","import { ToolError, ErrorCodes } from './errors'\nimport { executeToolCall, createToolLifecycle, createEventEmitter } from './primitives'\nimport type {\n ArgsValidator,\n MaybePromise,\n SkillDefinition,\n ToolCall,\n ToolAuthorizationContext,\n ToolAuthorizer,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\n\n// --- buildToolMap ---\n\nexport function buildToolMap(\n ...sources: Array<ToolDefinition[] | undefined>\n): Map<string, ToolDefinition> {\n const map = new Map<string, ToolDefinition>()\n for (const source of sources) {\n if (!source) continue\n for (const tool of source) map.set(tool.name, tool)\n }\n return map\n}\n\n// --- activateSkills ---\n\nexport interface ActivateSkillsResult {\n systemPrompt: string | undefined\n skillTools: ToolDefinition[]\n}\n\nexport async function activateSkills(\n skills: SkillDefinition[],\n prompt?: string,\n): Promise<ActivateSkillsResult> {\n if (skills.length === 0) {\n return { systemPrompt: prompt, skillTools: [] }\n }\n\n const prompts = skills.map(s => `--- ${s.name} ---\\n${s.systemPrompt}`)\n const base = prompt ? `${prompt}\\n\\n` : ''\n const system = `${base}${prompts.join('\\n\\n')}`\n\n const tools: ToolDefinition[] = []\n for (const skill of skills) {\n if (skill.onActivate) {\n const a = await skill.onActivate()\n tools.push(...(a.tools ?? []))\n }\n }\n\n return { systemPrompt: system, skillTools: tools }\n}\n\n// --- executeSafeTool ---\n\nexport interface ToolExecResult {\n status: 'complete' | 'error' | 'skipped'\n result?: string\n error?: string\n durationMs: number\n}\n\nexport interface ExecuteSafeToolOptions {\n tool: ToolDefinition | undefined\n toolCall: ToolCall\n context: ToolExecutionContext\n emitter: ReturnType<typeof createEventEmitter>\n lifecycle: ReturnType<typeof createToolLifecycle>\n onPartial?: (result: string) => void\n onConfirm?: (toolCall: ToolCall) => MaybePromise<boolean>\n /** Opt-in arg validation against `tool.schema` (ADR-0008). */\n validate?: ArgsValidator\n authorize?: ToolAuthorizer\n}\n\nexport async function auth(fn: ToolAuthorizer | undefined, call: ToolCall, context: ToolAuthorizationContext): Promise<void> {\n if (!fn) return\n await import('./tool-authorization-internal.js').then(m => m.authorize(fn, call, context))\n}\n\n\nexport async function executeSafeTool(\n options: ExecuteSafeToolOptions,\n): Promise<ToolExecResult> {\n const { tool, toolCall, context, emitter, lifecycle, onPartial, onConfirm, validate, authorize } = options\n const began = Date.now()\n\n // Missing tool\n if (!tool?.execute) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_NOT_FOUND,\n message: `Tool \"${toolCall.name}\" not found or has no execute function`,\n hint: 'Register an executable tool in ChatConfig, e.g. { tools: [myTool] }.',\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n if (validate && tool.schema) {\n const v = validate(tool.schema, toolCall.args)\n if (!v.valid) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: v.message ?? `Tool \"${toolCall.name}\" received invalid arguments`,\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n }\n\n // Requires confirmation — refuse by default when no approver is configured (RT6)\n if (tool.requiresConfirmation) {\n if (!onConfirm) {\n return {\n status: 'skipped',\n result: 'No confirmation handler',\n durationMs: Date.now() - began,\n }\n }\n const confirmed = await onConfirm(toolCall)\n if (!confirmed) {\n return { status: 'skipped', result: 'Tool execution declined by confirmation handler', durationMs: Date.now() - began }\n }\n }\n\n try {\n await auth(authorize, toolCall, { ...context, tool, phase: 'execute' })\n } catch (error) {\n const err = error as ToolError\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n await lifecycle.init(tool)\n\n emitter.emit({ type: 'tool:start', name: toolCall.name, args: toolCall.args })\n\n try {\n const result = await executeToolCall(\n tool,\n toolCall.args,\n context,\n onPartial,\n )\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result,\n durationMs: Date.now() - began,\n })\n return { status: 'complete', result, durationMs: Date.now() - began }\n } catch (error) {\n const err = error instanceof ToolError\n ? error\n : new ToolError({\n code: ErrorCodes.AK_TOOL_EXEC_FAILED,\n message: `Tool \"${toolCall.name}\" threw during execution: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Check the tool execute() implementation.',\n cause: error,\n })\n // Emit error before tool:end so trackers can mark the active tool span.\n emitter.emit({ type: 'error', error: err })\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result: `Error: ${err.message}`,\n durationMs: Date.now() - began,\n })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n}\n"]}
+8
-8

@@ -1,15 +0,15 @@

'use strict';var O="https://www.agentskit.io/docs";function Me(t,e,o,l){let s=[`error[${t}]: ${e}`];return o&&s.push(` --> Hint: ${o}`),l&&s.push(` --> Docs: ${l}`),s.join(`
`)}var _=class extends Error{constructor(e){super(e.message),this.name="AgentsKitError",this.code=e.code,this.hint=e.hint,this.docsUrl=e.docsUrl,this.cause=e.cause;}toString(){return Me(this.code,this.message,this.hint,this.docsUrl)}},N=class extends _{constructor(e){super({docsUrl:`${O}/adapters`,...e}),this.name="AdapterError";}},R=class extends _{constructor(e){super({docsUrl:`${O}/tools`,...e}),this.name="ToolError";}},q=class extends _{constructor(e){super({docsUrl:`${O}/memory`,...e}),this.name="MemoryError";}},j=class extends _{constructor(e){super({docsUrl:`${O}/configuration`,...e}),this.name="ConfigError";}},X=class extends _{constructor(e){super({docsUrl:`${O}/agents/runtime`,...e}),this.name="RuntimeError";}},G=class extends _{constructor(e){super({docsUrl:`${O}/production/security/mandatory-sandbox`,...e}),this.name="SandboxError";}},H=class extends _{constructor(e){super({docsUrl:`${O}/agents/skills`,...e}),this.name="SkillError";}},b={AK_ADAPTER_MISSING:"AK_ADAPTER_MISSING",AK_ADAPTER_STREAM_FAILED:"AK_ADAPTER_STREAM_FAILED",AK_TOOL_NOT_FOUND:"AK_TOOL_NOT_FOUND",AK_TOOL_EXEC_FAILED:"AK_TOOL_EXEC_FAILED",AK_TOOL_PEER_MISSING:"AK_TOOL_PEER_MISSING",AK_TOOL_INVALID_INPUT:"AK_TOOL_INVALID_INPUT",AK_TOOL_QUOTA_EXCEEDED:"AK_TOOL_QUOTA_EXCEEDED",AK_TOOL_FORBIDDEN:"AK_TOOL_FORBIDDEN",AK_MEMORY_LOAD_FAILED:"AK_MEMORY_LOAD_FAILED",AK_MEMORY_SAVE_FAILED:"AK_MEMORY_SAVE_FAILED",AK_MEMORY_DESERIALIZE_FAILED:"AK_MEMORY_DESERIALIZE_FAILED",AK_MEMORY_PEER_MISSING:"AK_MEMORY_PEER_MISSING",AK_MEMORY_REMOTE_HTTP:"AK_MEMORY_REMOTE_HTTP",AK_CONFIG_INVALID:"AK_CONFIG_INVALID",AK_RUNTIME_INVALID_INPUT:"AK_RUNTIME_INVALID_INPUT",AK_RUNTIME_STEP_FAILED:"AK_RUNTIME_STEP_FAILED",AK_RUNTIME_DELEGATE_FAILED:"AK_RUNTIME_DELEGATE_FAILED",AK_SANDBOX_DENIED:"AK_SANDBOX_DENIED",AK_SANDBOX_INVALID_TOOL:"AK_SANDBOX_INVALID_TOOL",AK_SANDBOX_PEER_MISSING:"AK_SANDBOX_PEER_MISSING",AK_SANDBOX_BACKEND_FAILED:"AK_SANDBOX_BACKEND_FAILED",AK_SKILL_INVALID:"AK_SKILL_INVALID",AK_SKILL_DUPLICATE:"AK_SKILL_DUPLICATE"};var Pe=0;function ce(t){return `${t}-${Date.now()}-${Pe++}`}function Y(){let t=new Set;return {addObserver(e){return t.add(e),()=>{t.delete(e);}},emit(e){for(let o of t)try{let l=o.on(e);l&&typeof l.catch=="function"&&l.catch(()=>{});}catch{}}}}function I(t){return {id:ce("msg"),role:t.role,content:t.content,status:t.status??"complete",metadata:t.metadata,toolCallId:t.toolCallId,createdAt:new Date}}function we(t){return t!=null&&typeof t=="object"&&Symbol.asyncIterator in t}async function Q(t,e,o,l){let s=t.execute?.(e,o);if(we(s)){let m="";for await(let p of s)m+=String(p),l?.(m);return m}let r=await s;return r==null?"":String(r)}function Z(t){try{let e=JSON.parse(t);return e&&typeof e=="object"?e:{}}catch{return {}}}function U(t){let e=new Set;return {async init(o){o.init&&!e.has(o.name)&&(await o.init(),e.add(o.name));},async disposeAll(){for(let o of e)try{await t.get(o)?.dispose?.();}catch{}e.clear();}}}async function W(t,e){let o="",l="";try{let s=t.stream();for await(let r of s)if(r.type==="text"&&r.content)o+=r.content,e.onText?.(o);else if(r.type==="reasoning"&&r.content)l+=r.content,e.onReasoning?.(l);else if(r.type==="tool_call")await e.onToolCall?.(r);else if(r.type==="tool_result"&&r.content)e.onToolResult?.(r.content);else if(r.type==="usage"&&r.usage)e.onUsage?.(r.usage);else if(r.type==="error"){e.onError?.(new N({code:b.AK_ADAPTER_STREAM_FAILED,message:r.content??"Stream error",hint:"Key/network/model/provider"}));return}else if(r.type==="done")break;e.onDone(o);}catch(s){let r=s instanceof _?s:new N({code:b.AK_ADAPTER_STREAM_FAILED,message:`Stream failed: ${s instanceof Error?s.message:String(s)}`,hint:"Adapter/provider",cause:s});e.onError?.(r);}}function z(...t){let e=new Map;for(let o of t)if(o)for(let l of o)e.set(l.name,l);return e}async function ee(t,e){if(t.length===0)return {systemPrompt:e,skillTools:[]};let o=t.map(m=>`--- ${m.name} ---
${m.systemPrompt}`),s=`${e?`${e}
'use strict';var O="https://www.agentskit.io/docs";function Me(e,t,o,l){let s=[`error[${e}]: ${t}`];return o&&s.push(` --> Hint: ${o}`),l&&s.push(` --> Docs: ${l}`),s.join(`
`)}var _=class extends Error{constructor(t){super(t.message),this.name="AgentsKitError",this.code=t.code,this.hint=t.hint,this.docsUrl=t.docsUrl,this.cause=t.cause;}toString(){return Me(this.code,this.message,this.hint,this.docsUrl)}},N=class extends _{constructor(t){super({docsUrl:`${O}/adapters`,...t}),this.name="AdapterError";}},R=class extends _{constructor(t){super({docsUrl:`${O}/tools`,...t}),this.name="ToolError";}},q=class extends _{constructor(t){super({docsUrl:`${O}/memory`,...t}),this.name="MemoryError";}},j=class extends _{constructor(t){super({docsUrl:`${O}/configuration`,...t}),this.name="ConfigError";}},X=class extends _{constructor(t){super({docsUrl:`${O}/agents/runtime`,...t}),this.name="RuntimeError";}},G=class extends _{constructor(t){super({docsUrl:`${O}/production/security/mandatory-sandbox`,...t}),this.name="SandboxError";}},H=class extends _{constructor(t){super({docsUrl:`${O}/agents/skills`,...t}),this.name="SkillError";}},b={AK_ADAPTER_MISSING:"AK_ADAPTER_MISSING",AK_ADAPTER_STREAM_FAILED:"AK_ADAPTER_STREAM_FAILED",AK_TOOL_NOT_FOUND:"AK_TOOL_NOT_FOUND",AK_TOOL_EXEC_FAILED:"AK_TOOL_EXEC_FAILED",AK_TOOL_PEER_MISSING:"AK_TOOL_PEER_MISSING",AK_TOOL_INVALID_INPUT:"AK_TOOL_INVALID_INPUT",AK_TOOL_QUOTA_EXCEEDED:"AK_TOOL_QUOTA_EXCEEDED",AK_TOOL_FORBIDDEN:"AK_TOOL_FORBIDDEN",AK_MEMORY_LOAD_FAILED:"AK_MEMORY_LOAD_FAILED",AK_MEMORY_SAVE_FAILED:"AK_MEMORY_SAVE_FAILED",AK_MEMORY_DESERIALIZE_FAILED:"AK_MEMORY_DESERIALIZE_FAILED",AK_MEMORY_PEER_MISSING:"AK_MEMORY_PEER_MISSING",AK_MEMORY_REMOTE_HTTP:"AK_MEMORY_REMOTE_HTTP",AK_CONFIG_INVALID:"AK_CONFIG_INVALID",AK_RUNTIME_INVALID_INPUT:"AK_RUNTIME_INVALID_INPUT",AK_RUNTIME_STEP_FAILED:"AK_RUNTIME_STEP_FAILED",AK_RUNTIME_DELEGATE_FAILED:"AK_RUNTIME_DELEGATE_FAILED",AK_SANDBOX_DENIED:"AK_SANDBOX_DENIED",AK_SANDBOX_INVALID_TOOL:"AK_SANDBOX_INVALID_TOOL",AK_SANDBOX_PEER_MISSING:"AK_SANDBOX_PEER_MISSING",AK_SANDBOX_BACKEND_FAILED:"AK_SANDBOX_BACKEND_FAILED",AK_SKILL_INVALID:"AK_SKILL_INVALID",AK_SKILL_DUPLICATE:"AK_SKILL_DUPLICATE"};var Pe=0;function ce(e){return `${e}-${Date.now()}-${Pe++}`}function Y(){let e=new Set;return {addObserver(t){return e.add(t),()=>{e.delete(t);}},emit(t){for(let o of e)try{let l=o.on(t);l&&typeof l.catch=="function"&&l.catch(()=>{});}catch{}}}}function I(e){return {id:ce("msg"),role:e.role,content:e.content,status:e.status??"complete",metadata:e.metadata,toolCallId:e.toolCallId,createdAt:new Date}}function we(e){return e!=null&&typeof e=="object"&&Symbol.asyncIterator in e}function _e(e){if(e==null)return "";if(typeof e=="string"||e instanceof Error)return String(e);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}async function Q(e,t,o,l){let s=e.execute?.(t,o);if(we(s)){let m="";for await(let p of s)m+=String(p),l?.(m);return m}let r=await s;return _e(r)}function Z(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return {}}}function U(e){let t=new Set;return {async init(o){o.init&&!t.has(o.name)&&(await o.init(),t.add(o.name));},async disposeAll(){for(let o of t)try{await e.get(o)?.dispose?.();}catch{}t.clear();}}}async function W(e,t){let o="",l="";try{let s=e.stream();for await(let r of s)if(r.type==="text"&&r.content)o+=r.content,t.onText?.(o);else if(r.type==="reasoning"&&r.content)l+=r.content,t.onReasoning?.(l);else if(r.type==="tool_call")await t.onToolCall?.(r);else if(r.type==="tool_result"&&r.content)t.onToolResult?.(r.content);else if(r.type==="usage"&&r.usage)t.onUsage?.(r.usage);else if(r.type==="error"){t.onError?.(new N({code:b.AK_ADAPTER_STREAM_FAILED,message:r.content??"Stream error",hint:"Key/network/model/provider"}));return}else if(r.type==="done")break;t.onDone(o);}catch(s){let r=s instanceof _?s:new N({code:b.AK_ADAPTER_STREAM_FAILED,message:`Stream failed: ${s instanceof Error?s.message:String(s)}`,hint:"Adapter/provider",cause:s});t.onError?.(r);}}function z(...e){let t=new Map;for(let o of e)if(o)for(let l of o)t.set(l.name,l);return t}async function ee(e,t){if(e.length===0)return {systemPrompt:t,skillTools:[]};let o=e.map(m=>`--- ${m.name} ---
${m.systemPrompt}`),s=`${t?`${t}
`:""}${o.join(`
`)}`,r=[];for(let m of t)if(m.onActivate){let p=await m.onActivate();r.push(...p.tools??[]);}return {systemPrompt:s,skillTools:r}}async function te(t,e,o){t&&await import('./tool-authorization-internal.js').then(l=>l.authorize(t,e,o));}async function re(t){let{tool:e,toolCall:o,context:l,emitter:s,lifecycle:r,onPartial:m,onConfirm:p,validate:C,authorize:v}=t,g=Date.now();if(!e?.execute){let d=new R({code:b.AK_TOOL_NOT_FOUND,message:`Tool "${o.name}" not found or has no execute function`,hint:"Register an executable tool in ChatConfig, e.g. { tools: [myTool] }."});return s.emit({type:"error",error:d}),{status:"error",error:d.toString(),durationMs:Date.now()-g}}if(C&&e.schema){let d=C(e.schema,o.args);if(!d.valid){let c=new R({code:b.AK_TOOL_INVALID_INPUT,message:d.message??`Tool "${o.name}" received invalid arguments`});return s.emit({type:"error",error:c}),{status:"error",error:c.toString(),durationMs:Date.now()-g}}}if(e.requiresConfirmation){if(!p)return {status:"skipped",result:"No confirmation handler",durationMs:Date.now()-g};if(!await p(o))return {status:"skipped",result:"Tool execution declined by confirmation handler",durationMs:Date.now()-g}}try{await te(v,o,{...l,tool:e,phase:"execute"});}catch(d){let c=d;return s.emit({type:"error",error:c}),{status:"error",error:c.toString(),durationMs:Date.now()-g}}await r.init(e),s.emit({type:"tool:start",name:o.name,args:o.args});try{let d=await Q(e,o.args,l,m);return s.emit({type:"tool:end",name:o.name,result:d,durationMs:Date.now()-g}),{status:"complete",result:d,durationMs:Date.now()-g}}catch(d){let c=d instanceof R?d:new R({code:b.AK_TOOL_EXEC_FAILED,message:`Tool "${o.name}" threw during execution: ${d instanceof Error?d.message:String(d)}`,hint:"Check the tool execute() implementation.",cause:d});return s.emit({type:"error",error:c}),s.emit({type:"tool:end",name:o.name,result:`Error: ${c.message}`,durationMs:Date.now()-g}),{status:"error",error:c.toString(),durationMs:Date.now()-g}}}function _e(t,e){let o=`${t.content} ${t.source??""}`.toLowerCase(),l=e.toLowerCase().split(/\s+/).filter(Boolean);return l.length===0?0:l.reduce((s,r)=>o.includes(r)?s+1:s,0)}function ke(t){let{documents:e,limit:o=4}=t;return {async retrieve(l){return [...e].map(s=>({...s,score:s.score??_e(s,l.query)})).filter(s=>(s.score??0)>0).sort((s,r)=>(r.score??0)-(s.score??0)).slice(0,o)}}}function oe(t){return t.length===0?"":t.map((e,o)=>{let l=e.source?`Source: ${e.source}
`)}`,r=[];for(let m of e)if(m.onActivate){let p=await m.onActivate();r.push(...p.tools??[]);}return {systemPrompt:s,skillTools:r}}async function te(e,t,o){e&&await import('./tool-authorization-internal.js').then(l=>l.authorize(e,t,o));}async function re(e){let{tool:t,toolCall:o,context:l,emitter:s,lifecycle:r,onPartial:m,onConfirm:p,validate:C,authorize:S}=e,g=Date.now();if(!t?.execute){let d=new R({code:b.AK_TOOL_NOT_FOUND,message:`Tool "${o.name}" not found or has no execute function`,hint:"Register an executable tool in ChatConfig, e.g. { tools: [myTool] }."});return s.emit({type:"error",error:d}),{status:"error",error:d.toString(),durationMs:Date.now()-g}}if(C&&t.schema){let d=C(t.schema,o.args);if(!d.valid){let c=new R({code:b.AK_TOOL_INVALID_INPUT,message:d.message??`Tool "${o.name}" received invalid arguments`});return s.emit({type:"error",error:c}),{status:"error",error:c.toString(),durationMs:Date.now()-g}}}if(t.requiresConfirmation){if(!p)return {status:"skipped",result:"No confirmation handler",durationMs:Date.now()-g};if(!await p(o))return {status:"skipped",result:"Tool execution declined by confirmation handler",durationMs:Date.now()-g}}try{await te(S,o,{...l,tool:t,phase:"execute"});}catch(d){let c=d;return s.emit({type:"error",error:c}),{status:"error",error:c.toString(),durationMs:Date.now()-g}}await r.init(t),s.emit({type:"tool:start",name:o.name,args:o.args});try{let d=await Q(t,o.args,l,m);return s.emit({type:"tool:end",name:o.name,result:d,durationMs:Date.now()-g}),{status:"complete",result:d,durationMs:Date.now()-g}}catch(d){let c=d instanceof R?d:new R({code:b.AK_TOOL_EXEC_FAILED,message:`Tool "${o.name}" threw during execution: ${d instanceof Error?d.message:String(d)}`,hint:"Check the tool execute() implementation.",cause:d});return s.emit({type:"error",error:c}),s.emit({type:"tool:end",name:o.name,result:`Error: ${c.message}`,durationMs:Date.now()-g}),{status:"error",error:c.toString(),durationMs:Date.now()-g}}}function ke(e,t){let o=`${e.content} ${e.source??""}`.toLowerCase(),l=t.toLowerCase().split(/\s+/).filter(Boolean);return l.length===0?0:l.reduce((s,r)=>o.includes(r)?s+1:s,0)}function Ie(e){let{documents:t,limit:o=4}=e;return {async retrieve(l){return [...t].map(s=>({...s,score:s.score??ke(s,l.query)})).filter(s=>(s.score??0)>0).sort((s,r)=>(r.score??0)-(s.score??0)).slice(0,o)}}}function oe(e){return e.length===0?"":e.map((t,o)=>{let l=t.source?`Source: ${t.source}
`:"";return `[${o+1}]
${l}${e.content}`}).join(`
${l}${t.content}`}).join(`
`)}function ue(t){if(!t)return;let e=Number.isFinite(t.promptTokens)&&t.promptTokens>=0?t.promptTokens:0,o=Number.isFinite(t.completionTokens)&&t.completionTokens>=0?t.completionTokens:0;return {promptTokens:e,completionTokens:o}}function me(t,e){let o=Number.isFinite(e.promptTokens)&&e.promptTokens>=0?e.promptTokens:0,l=Number.isFinite(e.completionTokens)&&e.completionTokens>=0?e.completionTokens:0,s=Number.isFinite(e.totalTokens)&&e.totalTokens>=0?e.totalTokens:0;return {promptTokens:t.promptTokens+o,completionTokens:t.completionTokens+l,totalTokens:t.totalTokens+s}}function $(t,e,o){return t.map(l=>l.id===e?o(l):l)}function ge(t,e,o,l){return $(t,e,s=>({...s,toolCalls:(s.toolCalls??[]).map(r=>r.id===o?{...r,...l}:r)}))}function de(t,e,o,l){let s=o.map(m=>l({role:"tool",content:m.result??m.error??"",toolCallId:m.id})),r=l({role:"assistant",content:"",status:"streaming"});return {messages:[...t.map(m=>m.id===e?{...m,status:"complete"}:m),...s,r],nextAssistantId:r.id}}async function fe(t,e,o,l,s){let r=Ie(e,l),m=t.retriever&&o?await t.retriever.retrieve({query:o,messages:e}):[],p=De(oe(m));return {messages:p?[p,...r]:r,context:{systemPrompt:l,temperature:t.temperature,maxTokens:t.maxTokens,tools:s,metadata:m.length>0?{retrievedDocuments:m}:void 0}}}function Ie(t,e){return !e||t.some(o=>o.role==="system"&&o.content===e)?t:[I({role:"system",content:e}),...t]}function De(t){return t?I({role:"system",content:`Use the retrieved context below when it is relevant.
`)}function ue(e){if(!e)return;let t=Number.isFinite(e.promptTokens)&&e.promptTokens>=0?e.promptTokens:0,o=Number.isFinite(e.completionTokens)&&e.completionTokens>=0?e.completionTokens:0;return {promptTokens:t,completionTokens:o}}function me(e,t){let o=Number.isFinite(t.promptTokens)&&t.promptTokens>=0?t.promptTokens:0,l=Number.isFinite(t.completionTokens)&&t.completionTokens>=0?t.completionTokens:0,s=Number.isFinite(t.totalTokens)&&t.totalTokens>=0?t.totalTokens:0;return {promptTokens:e.promptTokens+o,completionTokens:e.completionTokens+l,totalTokens:e.totalTokens+s}}function $(e,t,o){return e.map(l=>l.id===t?o(l):l)}function ge(e,t,o,l){return $(e,t,s=>({...s,toolCalls:(s.toolCalls??[]).map(r=>r.id===o?{...r,...l}:r)}))}function de(e,t,o,l){let s=o.map(m=>l({role:"tool",content:m.result??m.error??"",toolCallId:m.id})),r=l({role:"assistant",content:"",status:"streaming"});return {messages:[...e.map(m=>m.id===t?{...m,status:"complete"}:m),...s,r],nextAssistantId:r.id}}async function fe(e,t,o,l,s){let r=De(t,l),m=e.retriever&&o?await e.retriever.retrieve({query:o,messages:t}):[],p=Re(oe(m));return {messages:p?[p,...r]:r,context:{systemPrompt:l,temperature:e.temperature,maxTokens:e.maxTokens,tools:s,metadata:m.length>0?{retrievedDocuments:m}:void 0}}}function De(e,t){return !t||e.some(o=>o.role==="system"&&o.content===t)?e:[I({role:"system",content:t}),...e]}function Re(e){return e?I({role:"system",content:`Use the retrieved context below when it is relevant.
${t}`}):null}function Re(t){let e=t,o=e.systemPrompt,l,s=0,r={messages:t.initialMessages??[],status:"idle",input:"",error:null,usage:{promptTokens:0,completionTokens:0,totalTokens:0}},m=new Set,p=Y(),C=z(e.tools),v=U(C),g=false,d=false,c=false,f,h=async(n,a)=>{let i=e.authorizeToolCall,u=i?await i(n,a):{allowed:true};return i===e.authorizeToolCall&&C.get(n.name)?.execute===a.tool?.execute?u:{allowed:false}},M=n=>{C=z(e.tools,n),v=U(C);},w=async()=>{if(d)return;d=true;let n=await ee(e.skills??[],e.systemPrompt);o=n.systemPrompt,n.skillTools.length>0&&M(n.skillTools);};w();for(let n of e.observers??[])p.addObserver(n);let P=()=>{for(let n of m)n();},A=n=>{r=typeof n=="function"?n(r):n,ve(r.messages),P();},ve=async n=>{if(f=[n,e.memory],!c){for(c=true;f;){let[a,i]=f;f=void 0;try{await i?.save(a),i&&p.emit({type:"memory:save",messageCount:a.length});}catch{}}c=false;}},se=async()=>{if(!(g||!e.memory)){g=true;try{let n=await e.memory.load();n.length>0&&r.messages.length===0&&(r={...r,messages:n},p.emit({type:"memory:load",messageCount:n.length}),P());}catch{}}};se();let K=(n,a)=>{A(i=>({...i,messages:$(i.messages,n,a)}));},D=(n,a,i)=>{A(u=>({...u,messages:ge(u.messages,n,a,i)}));},ie=(n,a,i)=>re({tool:n,toolCall:a,context:{messages:r.messages,call:a},emitter:p,lifecycle:v,validate:e.validateArgs,authorize:h,onPartial:i}),Se=async(n,a,i)=>{let u=a.toolCall;if(!u)return;let x=C.get(u.name),y={id:u.id,name:u.name,args:Z(u.args),result:u.result,status:x?.requiresConfirmation?"requires_confirmation":"pending"};if(await te(h,y,{messages:r.messages,tool:x,phase:"propose"}),i!==s||(K(n,T=>({...T,toolCalls:[...T.toolCalls??[],y]})),await e.onToolCall?.(y,{messages:r.messages,tool:x}),i!==s))return;if(x?.requiresConfirmation){u.result&&D(n,y.id,{result:u.result,status:"complete"});return}x?.execute&&D(n,y.id,{status:"running"});let E=await ie(x,y,T=>{i===s&&D(n,y.id,{result:T});});i===s&&D(n,y.id,{status:E.status==="complete"?"complete":"error",result:E.result,error:E.error});},ae=async(n,a,i)=>{await w();let u=await fe(e,r.messages,a,o,[...C.values()]);if(i!==s)return false;l=e.adapter.createSource(u);let x=Date.now(),y=false,E;return p.emit({type:"llm:start",messageCount:u.messages.length}),await W(l,{onText(T){i===s&&(y||(p.emit({type:"llm:first-token",latencyMs:Date.now()-x}),y=true),K(n,S=>({...S,content:T})));},onReasoning(T){i===s&&K(n,S=>({...S,metadata:{...S.metadata,reasoning:T}}));},async onToolCall(T){i===s&&await Se(n,T,i);},onToolResult(T){i===s&&K(n,S=>({...S,metadata:{...S.metadata,toolResult:T}}));},onUsage(T){if(i!==s)return;let S=ue(T);S&&(E=S),A(L=>({...L,messages:$(L.messages,n,k=>({...k,metadata:{...k.metadata,usage:T}})),usage:me(L.usage,T)}));},onError(T){i===s&&(s++,K(n,S=>({...S,status:"error"})),A(S=>({...S,status:"error",error:T})),p.emit({type:"error",error:T}),e.onError?.(T));},onDone(T){i===s&&p.emit({type:"llm:end",content:T,...E?{usage:E}:{},durationMs:Date.now()-x});}}),i===s},le=n=>{let a;A(i=>({...i,messages:i.messages.map(u=>u.id!==n?u:(a={...u,status:"complete"},a)),status:"idle",error:null})),a&&e.onMessage?.(a);},Ee=(n,a)=>{let i="";return A(u=>{let{messages:x,nextAssistantId:y}=de(u.messages,n,a,I);return i=y,{...u,messages:x,status:"streaming",error:null}}),i},V=async(n,a)=>{let i=n;for(let u=e.maxToolIterations??5;u>0;u--){let y=r.messages.find(S=>S.id===i)?.toolCalls??[],E=y.some(S=>S.status!=="complete"&&S.status!=="error");if(!y.length||E){le(i);return}if(i=Ee(i,y),!await ae(i,"",a))return}le(i);},F=async(n,a,i)=>{await ae(n,a,i)&&await V(n,i);},B={getState:()=>r,subscribe(n){return m.add(n),()=>{m.delete(n);}},async send(n){if(!n.trim())return;r.status==="streaming"&&B.stop(),s++;let a=I({role:"user",content:n}),i=I({role:"assistant",content:"",status:"streaming"});A(u=>({...u,messages:[...u.messages,a,i],status:"streaming",input:"",error:null})),await F(i.id,n,s);},stop(){s++,l?.abort();let n=r.messages.filter(a=>a.status==="streaming");A(a=>({...a,messages:a.messages.map(i=>i.status==="streaming"?{...i,status:"complete"}:i),status:"idle"})),n.forEach(a=>e.onMessage?.({...a,status:"complete"}));},async retry(){let n=[...r.messages];if(n.length<2)return;let a=n[n.length-1],i=n[n.length-2];if(a.role!=="assistant"||i.role!=="user")return;s++;let u=n.slice(0,-1),x=I({role:"assistant",content:"",status:"streaming"});A(y=>({...y,messages:[...u,x],status:"streaming",error:null})),await F(x.id,i.content,s);},async edit(n,a,i={}){let u=r.messages,x=u.findIndex(k=>k.id===n);if(x===-1)return;let y=u[x];if(y.role!=="user"){A(k=>({...k,messages:k.messages.map(J=>J.id===n?{...J,content:a}:J)}));return}let E=i.regenerate!==false,T=u.slice(0,x).concat({...y,content:a});if(!E){A(k=>({...k,messages:T}));return}s++,l?.abort();let S=I({role:"assistant",content:"",status:"streaming"}),L=[...T,S];A(k=>({...k,messages:L,status:"streaming",error:null})),await F(S.id,a,s);},async regenerate(n){let a=r.messages;if(a.length<2)return;let i;if(n){if(i=a.findIndex(T=>T.id===n&&T.role==="assistant"),i===-1)return}else if(i=a.length-1,a[i].role!=="assistant")return;let u=i-1;for(;u>=0&&a[u].role!=="user";)u--;if(u<0)return;s++,l?.abort();let x=a.slice(0,i),y=I({role:"assistant",content:"",status:"streaming"}),E=[...x,y];A(T=>({...T,messages:E,status:"streaming",error:null})),await F(y.id,a[u].content,s);},setInput(n){A(a=>({...a,input:n}));},setMessages(n){A(a=>({...a,messages:n}));},async clear(){await v.disposeAll(),A(n=>({...n,messages:[],status:"idle",error:null,usage:{promptTokens:0,completionTokens:0,totalTokens:0}})),await e.memory?.clear?.();},proposeToolCall:n=>import('./tool-proposal-internal.js').then(a=>a.withAuthority(B,n,i=>[C.get(i),e.validateArgs,e.onToolCall,h])),async approve(n){let a=r.messages.find(y=>y.toolCalls?.some(E=>E.id===n&&E.status==="requires_confirmation")),i=a?.toolCalls?.find(y=>y.id===n);if(!a||!i)return;let u=C.get(i.name);if(!u?.execute)return;D(a.id,n,{status:"running"});let x=await ie({...u,requiresConfirmation:false},i,y=>D(a.id,n,{result:y}));D(a.id,n,{status:x.status==="complete"?"complete":"error",result:x.result,error:x.error}),await V(a.id,s);},async deny(n,a){let i=r.messages.find(x=>x.toolCalls?.some(y=>y.id===n&&y.status==="requires_confirmation")),u=i?.toolCalls?.find(x=>x.id===n);!i||!u||(D(i.id,n,{status:"error",error:`Permission denied: ${a??"user denied access"}`}),await V(i.id,s));},updateConfig(n){v.disposeAll(),e={...e,...n},d=false,M(),w(),se();}};return B}function pe(t){return JSON.parse(JSON.stringify({version:1,messages:t}))}function ye(t){return t?.messages?t.messages.map(e=>({...e,createdAt:new Date(e.createdAt)})):[]}function be(t=[]){let e=[...t];return {async load(){return [...e]},async save(o){e=[...o];},async clear(){e=[];}}}function Oe(t){return {async load(){if(typeof localStorage>"u")return [];let e=localStorage.getItem(t);if(!e)return [];try{return ye(JSON.parse(e))}catch{return []}},async save(e){typeof localStorage>"u"||localStorage.setItem(t,JSON.stringify(pe(e)));},async clear(){typeof localStorage>"u"||localStorage.removeItem(t);}}}function Ne(t){return t}var Te={name:"approximate",count(t){let e=0;for(let o of t)e+=Math.ceil(((o.role?.length??0)+(o.content?.length??0))/4)+2;return e},countDetailed(t){let e=t.map(o=>Math.ceil(((o.role?.length??0)+(o.content?.length??0))/4)+2);return {total:e.reduce((o,l)=>o+l,0),perMessage:e}}};function Ke(t,e){return !t||t.length===0?0:e.count(t.map(o=>({role:"system",content:`${o.name}:${o.description??""}:${JSON.stringify(o.schema??{})}`})))}async function ne(t){return typeof t=="number"?t:await t}async function Le(t){let e=t.counter??Te,o=t.strategy??"drop-oldest",l=Math.max(1,t.keepRecent??1),s=t.reserveForOutput??0,r=t.budget-s;if(r<=0)throw new Error(`Budget must exceed reserveForOutput (${t.budget} \u2264 ${s})`);let m=t.systemPrompt?{id:"__system",role:"system",content:t.systemPrompt,status:"complete",createdAt:new Date(0)}:void 0,p=m?await ne(e.count([m])):0,C=await ne(Ke(t.tools,e)),v=p+C;if(v>r)throw new Error(`System prompt + tools (${v} tokens) exceed budget (${r}). Shrink system prompt or raise budget.`);let g=[...t.messages],d=[],c=async h=>ne(e.count(h)),f=v+await c(g);if(o==="sliding-window")for(;g.length>l&&f>r;)d.push(g.shift()),f=v+await c(g);else if(o==="drop-oldest")for(;g.length>l&&f>r;)d.push(g.shift()),f=v+await c(g);else if(o==="summarize"){if(!t.summarizer)throw new Error("strategy='summarize' requires a summarizer function");for(;g.length>l&&f>r;)d.push(g.shift()),f=v+await c(g);if(d.length>0){let h=await t.summarizer(d);g.unshift(h),f=v+await c(g);}}return {messages:g,systemPrompt:t.systemPrompt,tokens:{system:p,messages:f-v,tools:C,total:f,budget:r},dropped:d,fits:f<=r,strategy:o}}function he(){let t="",e=[],o={},l=false,s=false,r=0,m=()=>{for(;r<t.length&&/\s/.test(t[r]);)r++;},p=()=>{if(t[r]!=='"')return -1;let c=r+1;for(;c<t.length;){let f=t[c];if(f==="\\"){c+=2;continue}if(f==='"')return c+1;c++;}return -1},C=(c,f)=>{let h=0,M=r,w=false,P=false;for(;M<t.length;){let A=t[M];if(w)P?P=false:A==="\\"?P=true:A==='"'&&(w=false);else if(A==='"')w=true;else if(A===c)h++;else if(A===f&&(h--,h===0))return M+1;M++;}return -1},v=()=>{let c=r;for(;c<t.length;){let f=t[c];if(f===","||f==="}"||/\s/.test(f))return c;c++;}return -1},g=()=>{if(m(),r>=t.length)return null;let c=t[r],f=-1;if(c==='"'?f=p():c==="{"?f=C("{","}"):c==="["?f=C("[","]"):f=v(),f<0)return null;let h=t.slice(r,f);try{return {end:f,raw:h,value:JSON.parse(h)}}catch{return null}},d=()=>{let c=[];if(s)return c;if(!l){if(m(),r>=t.length)return c;if(t[r]!=="{")throw new Error(`Expected '{' at position ${r}`);r++,l=true;}for(;;){if(m(),r>=t.length)return c;if(t[r]==="}")return r++,s=true,c;if(t[r]===","){r++;continue}let f=p();if(f<0)return c;let h=t.slice(r,f),M=JSON.parse(h),w=r;if(r=f,m(),t[r]!==":")return r=w,c;r++;let P=g();if(!P)return r=w,c;let A={field:M,value:P.value,raw:P.raw,offset:P.end};o[M]=P.value,e.push(A),c.push(A),r=P.end;}};return {push(c){return t+=c,d()},end(){let c=d();if(!s)throw new Error("Progressive JSON ended without closing `}`");return c},get events(){return e},get value(){return o},get buffer(){return t}}}function Fe(t,e,o,l={}){let s=he(),r=new Set(l.triggerFields??[]),m=r.size===0,p=false,C=()=>{},v=new Promise(h=>{C=h;}),g={},d=h=>{g[h.field]=h.value,l.onField?.(h),p||(m||r.has(h.field))&&(m||r.delete(h.field),(m||r.size===0)&&(p=true,C({...g})));},c=async()=>{for await(let h of e)for(let M of s.push(h))d(M);for(let h of s.end())d(h);p||(p=true,C({...g}));},f=(async()=>{let h=c(),M=await v,w={id:o.callId,name:t.name,args:M,status:"running"},P=t.execute?Promise.resolve(t.execute(M,{messages:o.messages,call:w})):Promise.resolve(void 0),[A]=await Promise.all([P,h]);return A})();return {get fields(){return s.events.slice()},get finalArgs(){return g},execution:f}}function Ue(t,e={}){let o=Math.max(1,e.maxActive??50),l=Math.max(0,e.maxRetrieved??10),s=r=>r.length<=o?{hot:r.slice(),cold:[]}:{hot:r.slice(r.length-o),cold:r.slice(0,r.length-o)};return {async load(){let r=[...await t.load()],{hot:m,cold:p}=s(r);if(p.length===0)return m;let C=[];e.retriever&&l>0&&(C=[...await e.retriever({hot:m,cold:p,maxRetrieved:l})]);let v=new Set(m.map(d=>d.id)),g=C.filter(d=>!v.has(d.id));return xe(g,m)},async save(r){let m=[...await t.load()],{cold:p}=s(m),C=new Set(r.map(g=>g.id)),v=p.filter(g=>!C.has(g.id));await t.save(xe(v,r));},async clear(){await t.clear?.();},async size(){return (await t.load()).length},async loadAll(){return [...await t.load()]}}}function xe(t,e){let o=[...t,...e];return o.sort((l,s)=>l.createdAt.getTime()-s.createdAt.getTime()),o}function Ae(t){return {type:"text",text:t}}function ze(t,e={}){return {type:"image",source:t,...e}}function $e(t,e={}){return {type:"audio",source:t,...e}}function Ve(t,e={}){return {type:"video",source:t,...e}}function Be(t,e={}){return {type:"file",source:t,...e}}function Ce(t){let e=[];for(let o of t)switch(o.type){case "text":e.push(o.text);break;case "image":e.push(`[image: ${o.source}]`);break;case "audio":e.push(`[audio: ${o.source}]`);break;case "video":e.push(`[video: ${o.source}]`);break;case "file":e.push(`[file: ${o.filename??o.source}]`);break}return e.join(`
`)}function Je(t,e){if(e&&e.length>0)return {text:Ce(e),parts:e};let o=t??"";return {text:o,parts:o?[Ae(o)]:[]}}function qe(t,e){return t.filter(o=>o.type===e)}exports.AdapterError=N;exports.AgentsKitError=_;exports.ConfigError=j;exports.ErrorCodes=b;exports.MemoryError=q;exports.RuntimeError=X;exports.SandboxError=G;exports.SkillError=H;exports.ToolError=R;exports.activateSkills=ee;exports.approximateCounter=Te;exports.audioPart=$e;exports.buildMessage=I;exports.buildToolMap=z;exports.compileBudget=Le;exports.consumeStream=W;exports.createChatController=Re;exports.createEventEmitter=Y;exports.createInMemoryMemory=be;exports.createLocalStorageMemory=Oe;exports.createProgressiveArgParser=he;exports.createStaticRetriever=ke;exports.createToolLifecycle=U;exports.createVirtualizedMemory=Ue;exports.defineTool=Ne;exports.deserializeMessages=ye;exports.executeSafeTool=re;exports.executeToolCall=Q;exports.executeToolProgressively=Fe;exports.filePart=Be;exports.filterParts=qe;exports.formatRetrievedDocuments=oe;exports.generateId=ce;exports.imagePart=ze;exports.normalizeContent=Je;exports.partsToText=Ce;exports.safeParseArgs=Z;exports.serializeMessages=pe;exports.textPart=Ae;exports.videoPart=Ve;//# sourceMappingURL=index.cjs.map
${e}`}):null}function be(e){let t=e,o=t.systemPrompt,l,s=0,r={messages:e.initialMessages??[],status:"idle",input:"",error:null,usage:{promptTokens:0,completionTokens:0,totalTokens:0}},m=new Set,p=Y(),C=z(t.tools),S=U(C),g=false,d=false,c=false,f,h=async(n,a)=>{let i=t.authorizeToolCall,u=i?await i(n,a):{allowed:true};return i===t.authorizeToolCall&&C.get(n.name)?.execute===a.tool?.execute?u:{allowed:false}},M=n=>{C=z(t.tools,n),S=U(C);},w=async()=>{if(d)return;d=true;let n=await ee(t.skills??[],t.systemPrompt);o=n.systemPrompt,n.skillTools.length>0&&M(n.skillTools);};w();for(let n of t.observers??[])p.addObserver(n);let P=()=>{for(let n of m)n();},A=n=>{r=typeof n=="function"?n(r):n,Se(r.messages),P();},Se=async n=>{if(f=[n,t.memory],!c){for(c=true;f;){let[a,i]=f;f=void 0;try{await i?.save(a),i&&p.emit({type:"memory:save",messageCount:a.length});}catch{}}c=false;}},se=async()=>{if(!(g||!t.memory)){g=true;try{let n=await t.memory.load();n.length>0&&r.messages.length===0&&(r={...r,messages:n},p.emit({type:"memory:load",messageCount:n.length}),P());}catch{}}};se();let K=(n,a)=>{A(i=>({...i,messages:$(i.messages,n,a)}));},D=(n,a,i)=>{A(u=>({...u,messages:ge(u.messages,n,a,i)}));},ie=(n,a,i)=>re({tool:n,toolCall:a,context:{messages:r.messages,call:a},emitter:p,lifecycle:S,validate:t.validateArgs,authorize:h,onPartial:i}),ve=async(n,a,i)=>{let u=a.toolCall;if(!u)return;let x=C.get(u.name),y={id:u.id,name:u.name,args:Z(u.args),result:u.result,status:x?.requiresConfirmation?"requires_confirmation":"pending"};if(await te(h,y,{messages:r.messages,tool:x,phase:"propose"}),i!==s||(K(n,T=>({...T,toolCalls:[...T.toolCalls??[],y]})),await t.onToolCall?.(y,{messages:r.messages,tool:x}),i!==s))return;if(x?.requiresConfirmation){u.result&&D(n,y.id,{result:u.result,status:"complete"});return}x?.execute&&D(n,y.id,{status:"running"});let E=await ie(x,y,T=>{i===s&&D(n,y.id,{result:T});});i===s&&D(n,y.id,{status:E.status==="complete"?"complete":"error",result:E.result,error:E.error});},ae=async(n,a,i)=>{await w();let u=await fe(t,r.messages,a,o,[...C.values()]);if(i!==s)return false;l=t.adapter.createSource(u);let x=Date.now(),y=false,E;return p.emit({type:"llm:start",messageCount:u.messages.length}),await W(l,{onText(T){i===s&&(y||(p.emit({type:"llm:first-token",latencyMs:Date.now()-x}),y=true),K(n,v=>({...v,content:T})));},onReasoning(T){i===s&&K(n,v=>({...v,metadata:{...v.metadata,reasoning:T}}));},async onToolCall(T){i===s&&await ve(n,T,i);},onToolResult(T){i===s&&K(n,v=>({...v,metadata:{...v.metadata,toolResult:T}}));},onUsage(T){if(i!==s)return;let v=ue(T);v&&(E=v),A(L=>({...L,messages:$(L.messages,n,k=>({...k,metadata:{...k.metadata,usage:T}})),usage:me(L.usage,T)}));},onError(T){i===s&&(s++,K(n,v=>({...v,status:"error"})),A(v=>({...v,status:"error",error:T})),p.emit({type:"error",error:T}),t.onError?.(T));},onDone(T){i===s&&p.emit({type:"llm:end",content:T,...E?{usage:E}:{},durationMs:Date.now()-x});}}),i===s},le=n=>{let a;A(i=>({...i,messages:i.messages.map(u=>u.id!==n?u:(a={...u,status:"complete"},a)),status:"idle",error:null})),a&&t.onMessage?.(a);},Ee=(n,a)=>{let i="";return A(u=>{let{messages:x,nextAssistantId:y}=de(u.messages,n,a,I);return i=y,{...u,messages:x,status:"streaming",error:null}}),i},V=async(n,a)=>{let i=n;for(let u=t.maxToolIterations??5;u>0;u--){let y=r.messages.find(v=>v.id===i)?.toolCalls??[],E=y.some(v=>v.status!=="complete"&&v.status!=="error");if(!y.length||E){le(i);return}if(i=Ee(i,y),!await ae(i,"",a))return}le(i);},F=async(n,a,i)=>{await ae(n,a,i)&&await V(n,i);},B={getState:()=>r,subscribe(n){return m.add(n),()=>{m.delete(n);}},async send(n){if(!n.trim())return;r.status==="streaming"&&B.stop(),s++;let a=I({role:"user",content:n}),i=I({role:"assistant",content:"",status:"streaming"});A(u=>({...u,messages:[...u.messages,a,i],status:"streaming",input:"",error:null})),await F(i.id,n,s);},stop(){s++,l?.abort();let n=r.messages.filter(a=>a.status==="streaming");A(a=>({...a,messages:a.messages.map(i=>i.status==="streaming"?{...i,status:"complete"}:i),status:"idle"})),n.forEach(a=>t.onMessage?.({...a,status:"complete"}));},async retry(){let n=[...r.messages];if(n.length<2)return;let a=n[n.length-1],i=n[n.length-2];if(a.role!=="assistant"||i.role!=="user")return;s++;let u=n.slice(0,-1),x=I({role:"assistant",content:"",status:"streaming"});A(y=>({...y,messages:[...u,x],status:"streaming",error:null})),await F(x.id,i.content,s);},async edit(n,a,i={}){let u=r.messages,x=u.findIndex(k=>k.id===n);if(x===-1)return;let y=u[x];if(y.role!=="user"){A(k=>({...k,messages:k.messages.map(J=>J.id===n?{...J,content:a}:J)}));return}let E=i.regenerate!==false,T=u.slice(0,x).concat({...y,content:a});if(!E){A(k=>({...k,messages:T}));return}s++,l?.abort();let v=I({role:"assistant",content:"",status:"streaming"}),L=[...T,v];A(k=>({...k,messages:L,status:"streaming",error:null})),await F(v.id,a,s);},async regenerate(n){let a=r.messages;if(a.length<2)return;let i;if(n){if(i=a.findIndex(T=>T.id===n&&T.role==="assistant"),i===-1)return}else if(i=a.length-1,a[i].role!=="assistant")return;let u=i-1;for(;u>=0&&a[u].role!=="user";)u--;if(u<0)return;s++,l?.abort();let x=a.slice(0,i),y=I({role:"assistant",content:"",status:"streaming"}),E=[...x,y];A(T=>({...T,messages:E,status:"streaming",error:null})),await F(y.id,a[u].content,s);},setInput(n){A(a=>({...a,input:n}));},setMessages(n){A(a=>({...a,messages:n}));},async clear(){await S.disposeAll(),A(n=>({...n,messages:[],status:"idle",error:null,usage:{promptTokens:0,completionTokens:0,totalTokens:0}})),await t.memory?.clear?.();},proposeToolCall:n=>import('./tool-proposal-internal.js').then(a=>a.withAuthority(B,n,i=>[C.get(i),t.validateArgs,t.onToolCall,h])),async approve(n){let a=r.messages.find(y=>y.toolCalls?.some(E=>E.id===n&&E.status==="requires_confirmation")),i=a?.toolCalls?.find(y=>y.id===n);if(!a||!i)return;let u=C.get(i.name);if(!u?.execute)return;D(a.id,n,{status:"running"});let x=await ie({...u,requiresConfirmation:false},i,y=>D(a.id,n,{result:y}));D(a.id,n,{status:x.status==="complete"?"complete":"error",result:x.result,error:x.error}),await V(a.id,s);},async deny(n,a){let i=r.messages.find(x=>x.toolCalls?.some(y=>y.id===n&&y.status==="requires_confirmation")),u=i?.toolCalls?.find(x=>x.id===n);!i||!u||(D(i.id,n,{status:"error",error:`Permission denied: ${a??"user denied access"}`}),await V(i.id,s));},updateConfig(n){S.disposeAll(),t={...t,...n},d=false,M(),w(),se();}};return B}function pe(e){return JSON.parse(JSON.stringify({version:1,messages:e}))}function ye(e){return e?.messages?e.messages.map(t=>({...t,createdAt:new Date(t.createdAt)})):[]}function Oe(e=[]){let t=[...e];return {async load(){return [...t]},async save(o){t=[...o];},async clear(){t=[];}}}function Ne(e){return {async load(){if(typeof localStorage>"u")return [];let t=localStorage.getItem(e);if(!t)return [];try{return ye(JSON.parse(t))}catch{return []}},async save(t){typeof localStorage>"u"||localStorage.setItem(e,JSON.stringify(pe(t)));},async clear(){typeof localStorage>"u"||localStorage.removeItem(e);}}}function Ke(e){return e}var Te={name:"approximate",count(e){let t=0;for(let o of e)t+=Math.ceil(((o.role?.length??0)+(o.content?.length??0))/4)+2;return t},countDetailed(e){let t=e.map(o=>Math.ceil(((o.role?.length??0)+(o.content?.length??0))/4)+2);return {total:t.reduce((o,l)=>o+l,0),perMessage:t}}};function Le(e,t){return !e||e.length===0?0:t.count(e.map(o=>({role:"system",content:`${o.name}:${o.description??""}:${JSON.stringify(o.schema??{})}`})))}async function ne(e){return typeof e=="number"?e:await e}async function Fe(e){let t=e.counter??Te,o=e.strategy??"drop-oldest",l=Math.max(1,e.keepRecent??1),s=e.reserveForOutput??0,r=e.budget-s;if(r<=0)throw new Error(`Budget must exceed reserveForOutput (${e.budget} \u2264 ${s})`);let m=e.systemPrompt?{id:"__system",role:"system",content:e.systemPrompt,status:"complete",createdAt:new Date(0)}:void 0,p=m?await ne(t.count([m])):0,C=await ne(Le(e.tools,t)),S=p+C;if(S>r)throw new Error(`System prompt + tools (${S} tokens) exceed budget (${r}). Shrink system prompt or raise budget.`);let g=[...e.messages],d=[],c=async h=>ne(t.count(h)),f=S+await c(g);if(o==="sliding-window")for(;g.length>l&&f>r;)d.push(g.shift()),f=S+await c(g);else if(o==="drop-oldest")for(;g.length>l&&f>r;)d.push(g.shift()),f=S+await c(g);else if(o==="summarize"){if(!e.summarizer)throw new Error("strategy='summarize' requires a summarizer function");for(;g.length>l&&f>r;)d.push(g.shift()),f=S+await c(g);if(d.length>0){let h=await e.summarizer(d);g.unshift(h),f=S+await c(g);}}return {messages:g,systemPrompt:e.systemPrompt,tokens:{system:p,messages:f-S,tools:C,total:f,budget:r},dropped:d,fits:f<=r,strategy:o}}function he(){let e="",t=[],o={},l=false,s=false,r=0,m=()=>{for(;r<e.length&&/\s/.test(e[r]);)r++;},p=()=>{if(e[r]!=='"')return -1;let c=r+1;for(;c<e.length;){let f=e[c];if(f==="\\"){c+=2;continue}if(f==='"')return c+1;c++;}return -1},C=(c,f)=>{let h=0,M=r,w=false,P=false;for(;M<e.length;){let A=e[M];if(w)P?P=false:A==="\\"?P=true:A==='"'&&(w=false);else if(A==='"')w=true;else if(A===c)h++;else if(A===f&&(h--,h===0))return M+1;M++;}return -1},S=()=>{let c=r;for(;c<e.length;){let f=e[c];if(f===","||f==="}"||/\s/.test(f))return c;c++;}return -1},g=()=>{if(m(),r>=e.length)return null;let c=e[r],f=-1;if(c==='"'?f=p():c==="{"?f=C("{","}"):c==="["?f=C("[","]"):f=S(),f<0)return null;let h=e.slice(r,f);try{return {end:f,raw:h,value:JSON.parse(h)}}catch{return null}},d=()=>{let c=[];if(s)return c;if(!l){if(m(),r>=e.length)return c;if(e[r]!=="{")throw new Error(`Expected '{' at position ${r}`);r++,l=true;}for(;;){if(m(),r>=e.length)return c;if(e[r]==="}")return r++,s=true,c;if(e[r]===","){r++;continue}let f=p();if(f<0)return c;let h=e.slice(r,f),M=JSON.parse(h),w=r;if(r=f,m(),e[r]!==":")return r=w,c;r++;let P=g();if(!P)return r=w,c;let A={field:M,value:P.value,raw:P.raw,offset:P.end};o[M]=P.value,t.push(A),c.push(A),r=P.end;}};return {push(c){return e+=c,d()},end(){let c=d();if(!s)throw new Error("Progressive JSON ended without closing `}`");return c},get events(){return t},get value(){return o},get buffer(){return e}}}function Ue(e,t,o,l={}){let s=he(),r=new Set(l.triggerFields??[]),m=r.size===0,p=false,C=()=>{},S=new Promise(h=>{C=h;}),g={},d=h=>{g[h.field]=h.value,l.onField?.(h),p||(m||r.has(h.field))&&(m||r.delete(h.field),(m||r.size===0)&&(p=true,C({...g})));},c=async()=>{for await(let h of t)for(let M of s.push(h))d(M);for(let h of s.end())d(h);p||(p=true,C({...g}));},f=(async()=>{let h=c(),M=await S,w={id:o.callId,name:e.name,args:M,status:"running"},P=e.execute?Promise.resolve(e.execute(M,{messages:o.messages,call:w})):Promise.resolve(void 0),[A]=await Promise.all([P,h]);return A})();return {get fields(){return s.events.slice()},get finalArgs(){return g},execution:f}}function ze(e,t={}){let o=Math.max(1,t.maxActive??50),l=Math.max(0,t.maxRetrieved??10),s=r=>r.length<=o?{hot:r.slice(),cold:[]}:{hot:r.slice(r.length-o),cold:r.slice(0,r.length-o)};return {async load(){let r=[...await e.load()],{hot:m,cold:p}=s(r);if(p.length===0)return m;let C=[];t.retriever&&l>0&&(C=[...await t.retriever({hot:m,cold:p,maxRetrieved:l})]);let S=new Set(m.map(d=>d.id)),g=C.filter(d=>!S.has(d.id));return xe(g,m)},async save(r){let m=[...await e.load()],{cold:p}=s(m),C=new Set(r.map(g=>g.id)),S=p.filter(g=>!C.has(g.id));await e.save(xe(S,r));},async clear(){await e.clear?.();},async size(){return (await e.load()).length},async loadAll(){return [...await e.load()]}}}function xe(e,t){let o=[...e,...t];return o.sort((l,s)=>l.createdAt.getTime()-s.createdAt.getTime()),o}function Ae(e){return {type:"text",text:e}}function $e(e,t={}){return {type:"image",source:e,...t}}function Ve(e,t={}){return {type:"audio",source:e,...t}}function Be(e,t={}){return {type:"video",source:e,...t}}function Je(e,t={}){return {type:"file",source:e,...t}}function Ce(e){let t=[];for(let o of e)switch(o.type){case "text":t.push(o.text);break;case "image":t.push(`[image: ${o.source}]`);break;case "audio":t.push(`[audio: ${o.source}]`);break;case "video":t.push(`[video: ${o.source}]`);break;case "file":t.push(`[file: ${o.filename??o.source}]`);break}return t.join(`
`)}function qe(e,t){if(t&&t.length>0)return {text:Ce(t),parts:t};let o=e??"";return {text:o,parts:o?[Ae(o)]:[]}}function je(e,t){return e.filter(o=>o.type===t)}exports.AdapterError=N;exports.AgentsKitError=_;exports.ConfigError=j;exports.ErrorCodes=b;exports.MemoryError=q;exports.RuntimeError=X;exports.SandboxError=G;exports.SkillError=H;exports.ToolError=R;exports.activateSkills=ee;exports.approximateCounter=Te;exports.audioPart=Ve;exports.buildMessage=I;exports.buildToolMap=z;exports.compileBudget=Fe;exports.consumeStream=W;exports.createChatController=be;exports.createEventEmitter=Y;exports.createInMemoryMemory=Oe;exports.createLocalStorageMemory=Ne;exports.createProgressiveArgParser=he;exports.createStaticRetriever=Ie;exports.createToolLifecycle=U;exports.createVirtualizedMemory=ze;exports.defineTool=Ke;exports.deserializeMessages=ye;exports.executeSafeTool=re;exports.executeToolCall=Q;exports.executeToolProgressively=Ue;exports.filePart=Je;exports.filterParts=je;exports.formatRetrievedDocuments=oe;exports.generateId=ce;exports.imagePart=$e;exports.normalizeContent=qe;exports.partsToText=Ce;exports.safeParseArgs=Z;exports.serializeMessages=pe;exports.textPart=Ae;exports.videoPart=Be;//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map

@@ -1,2 +0,2 @@

import {b,h,f,i,c,k,g,e,j}from'./chunk-MNAKU42O.js';export{i as activateSkills,c as buildMessage,h as buildToolMap,g as consumeStream,b as createEventEmitter,f as createToolLifecycle,k as executeSafeTool,d as executeToolCall,a as generateId,e as safeParseArgs}from'./chunk-MNAKU42O.js';export{a as approximateCounter,b as compileBudget}from'./chunk-T7ZO4R4E.js';export{b as AdapterError,a as AgentsKitError,e as ConfigError,i as ErrorCodes,d as MemoryError,f as RuntimeError,g as SandboxError,h as SkillError,c as ToolError}from'./chunk-4PAWFNZ5.js';function Me(e,t){let i=`${e.content} ${e.source??""}`.toLowerCase(),c=t.toLowerCase().split(/\s+/).filter(Boolean);return c.length===0?0:c.reduce((a,o)=>i.includes(o)?a+1:a,0)}function we(e){let{documents:t,limit:i=4}=e;return {async retrieve(c){return [...t].map(a=>({...a,score:a.score??Me(a,c.query)})).filter(a=>(a.score??0)>0).sort((a,o)=>(o.score??0)-(a.score??0)).slice(0,i)}}}function L(e){return e.length===0?"":e.map((t,i)=>{let c=t.source?`Source: ${t.source}
import {b,h,f,i,c,k,g,e,j}from'./chunk-VWKK6GKY.js';export{i as activateSkills,c as buildMessage,h as buildToolMap,g as consumeStream,b as createEventEmitter,f as createToolLifecycle,k as executeSafeTool,d as executeToolCall,a as generateId,e as safeParseArgs}from'./chunk-VWKK6GKY.js';export{a as approximateCounter,b as compileBudget}from'./chunk-T7ZO4R4E.js';export{b as AdapterError,a as AgentsKitError,e as ConfigError,i as ErrorCodes,d as MemoryError,f as RuntimeError,g as SandboxError,h as SkillError,c as ToolError}from'./chunk-4PAWFNZ5.js';function Me(e,t){let i=`${e.content} ${e.source??""}`.toLowerCase(),c=t.toLowerCase().split(/\s+/).filter(Boolean);return c.length===0?0:c.reduce((a,o)=>i.includes(o)?a+1:a,0)}function we(e){let{documents:t,limit:i=4}=e;return {async retrieve(c){return [...t].map(a=>({...a,score:a.score??Me(a,c.query)})).filter(a=>(a.score??0)>0).sort((a,o)=>(o.score??0)-(a.score??0)).slice(0,i)}}}function L(e){return e.length===0?"":e.map((t,i)=>{let c=t.source?`Source: ${t.source}
`:"";return `[${i+1}]

@@ -3,0 +3,0 @@ ${c}${t.content}`}).join(`

@@ -1,3 +0,3 @@

'use strict';var w="https://www.agentskit.io/docs";function S(t,e,g,c){let r=[`error[${t}]: ${e}`];return g&&r.push(` --> Hint: ${g}`),c&&r.push(` --> Docs: ${c}`),r.join(`
`)}var I=class extends Error{constructor(e){super(e.message),this.name="AgentsKitError",this.code=e.code,this.hint=e.hint,this.docsUrl=e.docsUrl,this.cause=e.cause;}toString(){return S(this.code,this.message,this.hint,this.docsUrl)}};var m=class extends I{constructor(e){super({docsUrl:`${w}/tools`,...e}),this.name="ToolError";}};var _={AK_TOOL_NOT_FOUND:"AK_TOOL_NOT_FOUND",AK_TOOL_INVALID_INPUT:"AK_TOOL_INVALID_INPUT",AK_CONFIG_INVALID:"AK_CONFIG_INVALID"};function h(t,e,g=1/0,c=true){let r=i=>{let f=new WeakSet,l=[{value:i,depth:0}],A=0;for(;l.length>0;){let n=l.pop(),o=n.value;if(n.exit){f.delete(o);continue}if((++A>1e4||n.depth>32)&&e(),o===null||typeof o=="boolean")continue;if(typeof o=="string"){o.length>g&&e();continue}if(typeof o=="number"){Number.isFinite(o)||e();continue}typeof o!="object"&&e();let T=Array.isArray(o),p=T?Array.prototype:Object.getPrototypeOf(o);if(!T&&p!==Object.prototype&&p!==null&&e(),f.has(o)&&e(),f.add(o),l.push({value:o,depth:n.depth,exit:true}),T){let a=o;a.length>1e4&&e();for(let s=a.length-1;s>=0;s--)l.push({value:a[s],depth:n.depth+1});continue}let u=Object.keys(o);u.length>1e4&&e();for(let a=u.length-1;a>=0;a--){let s=u[a];s.length>256&&e();let d=Object.getOwnPropertyDescriptor(o,s);(!d||d.get||d.set)&&e(),l.push({value:d.value,depth:n.depth+1});}}};try{c&&r(t);let i=structuredClone(t);return r(i),(typeof i!="object"||i===null||Array.isArray(i))&&e(),i}catch{return e()}}var x=0;function L(t){return `${t}-${Date.now()}-${x++}`}function y(t){return {id:L("msg"),role:t.role,content:t.content,status:t.status??"complete",metadata:t.metadata,toolCallId:t.toolCallId,createdAt:new Date}}async function D(t,e,g){t&&await import('./tool-authorization-internal.js').then(c=>c.authorize(t,e,g));}var O=new WeakMap;async function U(t,e,g){let c=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;if(!c.test(e.id))throw new m({code:_.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});for(let l of t.getState().messages){let A=l.toolCalls?.find(n=>n.id===e.id);if(A)return A}let r=O.get(t);r||(r=new Map,O.set(t,r));let i=r.get(e.id);if(i)return i;let f=(async()=>{if(!c.test(e.name))throw new m({code:_.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});let l=()=>{throw new m({code:_.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal arguments"})},A=h(e.args,l,16384),[n,o,T,p]=g(e.name);if(!n?.requiresConfirmation||!n.execute)throw new m({code:n?_.AK_CONFIG_INVALID:_.AK_TOOL_NOT_FOUND,message:"Tool is not registered for confirmation"});if(o&&n.schema){let s=o(n.schema,A);if(!s.valid)throw new m({code:_.AK_TOOL_INVALID_INPUT,message:s.message??"Invalid tool arguments"})}let u={...e,args:A,status:"requires_confirmation"};await D(p,u,{messages:t.getState().messages,tool:n,phase:"propose"});let a={...y({role:"assistant",content:""}),toolCalls:[u]};t.setMessages([...t.getState().messages,a]);try{await T?.(u,{messages:t.getState().messages,tool:n});}catch(s){throw t.setMessages(t.getState().messages.map(d=>d.id!==a.id?d:{...d,toolCalls:d.toolCalls?.map(E=>E.id!==u.id?E:{...E,status:"error",error:s instanceof Error?s.message:"Tool proposal rejected"})})),s}return u})();r.set(e.id,f);try{return await f}finally{r.delete(e.id);}}exports.withAuthority=U;//# sourceMappingURL=tool-proposal-internal.cjs.map
'use strict';var S="https://www.agentskit.io/docs";function w(t,e,g,c){let r=[`error[${t}]: ${e}`];return g&&r.push(` --> Hint: ${g}`),c&&r.push(` --> Docs: ${c}`),r.join(`
`)}var I=class extends Error{constructor(e){super(e.message),this.name="AgentsKitError",this.code=e.code,this.hint=e.hint,this.docsUrl=e.docsUrl,this.cause=e.cause;}toString(){return w(this.code,this.message,this.hint,this.docsUrl)}};var m=class extends I{constructor(e){super({docsUrl:`${S}/tools`,...e}),this.name="ToolError";}};var A={AK_TOOL_NOT_FOUND:"AK_TOOL_NOT_FOUND",AK_TOOL_INVALID_INPUT:"AK_TOOL_INVALID_INPUT",AK_CONFIG_INVALID:"AK_CONFIG_INVALID"};function y(t,e,g=1/0,c=true){let r=i=>{let _=new WeakSet,l=[{value:i,depth:0}],f=0;for(;l.length>0;){let n=l.pop(),o=n.value;if(n.exit){_.delete(o);continue}if((++f>1e4||n.depth>32)&&e(),o===null||typeof o=="boolean")continue;if(typeof o=="string"){o.length>g&&e();continue}if(typeof o=="number"){Number.isFinite(o)||e();continue}typeof o!="object"&&e();let T=Array.isArray(o),p=T?Array.prototype:Object.getPrototypeOf(o);if(!T&&p!==Object.prototype&&p!==null&&e(),_.has(o)&&e(),_.add(o),l.push({value:o,depth:n.depth,exit:true}),T){let a=o;a.length>1e4&&e();for(let s=a.length-1;s>=0;s--)l.push({value:a[s],depth:n.depth+1});continue}let u=Object.keys(o);u.length>1e4&&e();for(let a=u.length-1;a>=0;a--){let s=u[a];s.length>256&&e();let d=Object.getOwnPropertyDescriptor(o,s);(!d||d.get||d.set)&&e(),l.push({value:d.value,depth:n.depth+1});}}};try{c&&r(t);let i=structuredClone(t);return r(i),(typeof i!="object"||i===null||Array.isArray(i))&&e(),i}catch{return e()}}var x=0;function L(t){return `${t}-${Date.now()}-${x++}`}function h(t){return {id:L("msg"),role:t.role,content:t.content,status:t.status??"complete",metadata:t.metadata,toolCallId:t.toolCallId,createdAt:new Date}}async function D(t,e,g){t&&await import('./tool-authorization-internal.js').then(c=>c.authorize(t,e,g));}var O=new WeakMap;async function U(t,e,g){let c=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;if(!c.test(e.id))throw new m({code:A.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});for(let l of t.getState().messages){let f=l.toolCalls?.find(n=>n.id===e.id);if(f)return f}let r=O.get(t);r||(r=new Map,O.set(t,r));let i=r.get(e.id);if(i)return i;let _=(async()=>{if(!c.test(e.name))throw new m({code:A.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});let l=()=>{throw new m({code:A.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal arguments"})},f=y(e.args,l,16384),[n,o,T,p]=g(e.name);if(!n?.requiresConfirmation||!n.execute)throw new m({code:n?A.AK_CONFIG_INVALID:A.AK_TOOL_NOT_FOUND,message:"Tool is not registered for confirmation"});if(o&&n.schema){let s=o(n.schema,f);if(!s.valid)throw new m({code:A.AK_TOOL_INVALID_INPUT,message:s.message??"Invalid tool arguments"})}let u={...e,args:f,status:"requires_confirmation"};await D(p,u,{messages:t.getState().messages,tool:n,phase:"propose"});let a={...h({role:"assistant",content:""}),toolCalls:[u]};t.setMessages([...t.getState().messages,a]);try{await T?.(u,{messages:t.getState().messages,tool:n});}catch(s){throw t.setMessages(t.getState().messages.map(d=>d.id!==a.id?d:{...d,toolCalls:d.toolCalls?.map(E=>E.id!==u.id?E:{...E,status:"error",error:s instanceof Error?s.message:"Tool proposal rejected"})})),s}return u})();r.set(e.id,_);try{return await _}finally{r.delete(e.id);}}exports.withAuthority=U;//# sourceMappingURL=tool-proposal-internal.cjs.map
//# sourceMappingURL=tool-proposal-internal.cjs.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/errors.ts","../src/json-validation.ts","../src/primitives.ts","../src/agent-loop.ts","../src/tool-proposal-internal.ts"],"names":["DOCS_BASE","formatError","code","message","hint","docsUrl","lines","AgentsKitError","options","ToolError","ErrorCodes","cloneJsonRecord","input","invalid","maxStringLength","preflight","assertJson","root","active","stack","nodes","item","value","isArray","prototype","array","index","keys","key","descriptor","snapshot","nextId","generateId","prefix","buildMessage","params","auth","fn","call","context","m","pending","withAuthority","controller","proposal","resolve","identifier","existing","calls","operation","invalidArgs","args","tool","validateArgs","onToolCall","authorize","validation","error","current"],"mappings":"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","file":"tool-proposal-internal.cjs","sourcesContent":["// ---------------------------------------------------------------------------\n// AgentsKit didactic error system — Rust-compiler-style helpful errors\n// ---------------------------------------------------------------------------\n\nconst DOCS_BASE = 'https://www.agentskit.io/docs'\n\n/**\n * Format an error for display, Rust-compiler style.\n *\n * Example output:\n * ```\n * error[AK_ADAPTER_MISSING]: No adapter provided\n * --> Hint: Pass an adapter when creating the chat controller, e.g.\n * createChatController({ adapter: openaiAdapter() })\n * --> Docs: https://www.agentskit.io/docs/adapters\n * ```\n */\nfunction formatError(code: string, message: string, hint?: string, docsUrl?: string): string {\n const lines: string[] = [`error[${code}]: ${message}`]\n if (hint) lines.push(` --> Hint: ${hint}`)\n if (docsUrl) lines.push(` --> Docs: ${docsUrl}`)\n return lines.join('\\n')\n}\n\n// ---------------------------------------------------------------------------\n// Base class\n// ---------------------------------------------------------------------------\n\nexport class AgentsKitError extends Error {\n readonly code: string\n readonly hint: string | undefined\n readonly docsUrl: string | undefined\n readonly cause: unknown\n\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super(options.message)\n this.name = 'AgentsKitError'\n this.code = options.code\n this.hint = options.hint\n this.docsUrl = options.docsUrl\n this.cause = options.cause\n }\n\n override toString(): string {\n return formatError(this.code, this.message, this.hint, this.docsUrl)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Subclasses\n// ---------------------------------------------------------------------------\n\nexport class AdapterError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/adapters`, ...options })\n this.name = 'AdapterError'\n }\n}\n\nexport class ToolError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/tools`, ...options })\n this.name = 'ToolError'\n }\n}\n\nexport class MemoryError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/memory`, ...options })\n this.name = 'MemoryError'\n }\n}\n\nexport class ConfigError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/configuration`, ...options })\n this.name = 'ConfigError'\n }\n}\n\nexport class RuntimeError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/agents/runtime`, ...options })\n this.name = 'RuntimeError'\n }\n}\n\nexport class SandboxError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/production/security/mandatory-sandbox`, ...options })\n this.name = 'SandboxError'\n }\n}\n\nexport class SkillError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/agents/skills`, ...options })\n this.name = 'SkillError'\n }\n}\n\n// ---------------------------------------------------------------------------\n// Error code constants\n// ---------------------------------------------------------------------------\n\nexport const ErrorCodes = {\n // Adapter errors\n AK_ADAPTER_MISSING: 'AK_ADAPTER_MISSING',\n AK_ADAPTER_STREAM_FAILED: 'AK_ADAPTER_STREAM_FAILED',\n\n // Tool errors\n AK_TOOL_NOT_FOUND: 'AK_TOOL_NOT_FOUND',\n AK_TOOL_EXEC_FAILED: 'AK_TOOL_EXEC_FAILED',\n AK_TOOL_PEER_MISSING: 'AK_TOOL_PEER_MISSING',\n AK_TOOL_INVALID_INPUT: 'AK_TOOL_INVALID_INPUT',\n AK_TOOL_QUOTA_EXCEEDED: 'AK_TOOL_QUOTA_EXCEEDED',\n AK_TOOL_FORBIDDEN: 'AK_TOOL_FORBIDDEN',\n\n // Memory errors\n AK_MEMORY_LOAD_FAILED: 'AK_MEMORY_LOAD_FAILED',\n AK_MEMORY_SAVE_FAILED: 'AK_MEMORY_SAVE_FAILED',\n AK_MEMORY_DESERIALIZE_FAILED: 'AK_MEMORY_DESERIALIZE_FAILED',\n AK_MEMORY_PEER_MISSING: 'AK_MEMORY_PEER_MISSING',\n AK_MEMORY_REMOTE_HTTP: 'AK_MEMORY_REMOTE_HTTP',\n\n // Config errors\n AK_CONFIG_INVALID: 'AK_CONFIG_INVALID',\n\n // Runtime errors\n AK_RUNTIME_INVALID_INPUT: 'AK_RUNTIME_INVALID_INPUT',\n AK_RUNTIME_STEP_FAILED: 'AK_RUNTIME_STEP_FAILED',\n AK_RUNTIME_DELEGATE_FAILED: 'AK_RUNTIME_DELEGATE_FAILED',\n\n // Sandbox errors\n AK_SANDBOX_DENIED: 'AK_SANDBOX_DENIED',\n AK_SANDBOX_INVALID_TOOL: 'AK_SANDBOX_INVALID_TOOL',\n AK_SANDBOX_PEER_MISSING: 'AK_SANDBOX_PEER_MISSING',\n AK_SANDBOX_BACKEND_FAILED: 'AK_SANDBOX_BACKEND_FAILED',\n\n // Skill errors\n AK_SKILL_INVALID: 'AK_SKILL_INVALID',\n AK_SKILL_DUPLICATE: 'AK_SKILL_DUPLICATE',\n} as const\n","export function cloneJsonRecord(\n input: unknown,\n invalid: () => never,\n maxStringLength = Infinity,\n preflight = true,\n): Record<string, unknown> {\n const assertJson = (root: unknown): void => {\n const active = new WeakSet<object>()\n const stack: Array<{ value: unknown; depth: number; exit?: boolean }> = [{ value: root, depth: 0 }]\n let nodes = 0\n while (stack.length > 0) {\n const item = stack.pop()!\n const value = item.value\n if (item.exit) { active.delete(value as object); continue }\n if (++nodes > 10_000 || item.depth > 32) invalid()\n if (value === null || typeof value === 'boolean') continue\n if (typeof value === 'string') { if (value.length > maxStringLength) invalid(); continue }\n if (typeof value === 'number') { if (!Number.isFinite(value)) invalid(); continue }\n if (typeof value !== 'object') invalid()\n const isArray = Array.isArray(value)\n const prototype = isArray ? Array.prototype : Object.getPrototypeOf(value) as unknown\n if (!isArray && prototype !== Object.prototype && prototype !== null) invalid()\n if (active.has(value)) invalid()\n active.add(value)\n stack.push({ value, depth: item.depth, exit: true })\n if (isArray) {\n const array = value as unknown[]\n if (array.length > 10_000) invalid()\n for (let index = array.length - 1; index >= 0; index--) {\n stack.push({ value: array[index], depth: item.depth + 1 })\n }\n continue\n }\n const keys = Object.keys(value)\n if (keys.length > 10_000) invalid()\n for (let index = keys.length - 1; index >= 0; index--) {\n const key = keys[index]!\n if (key.length > 256) invalid()\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n if (!descriptor || descriptor.get || descriptor.set) invalid()\n stack.push({ value: descriptor.value, depth: item.depth + 1 })\n }\n }\n }\n try {\n if (preflight) assertJson(input)\n const snapshot = structuredClone(input) as unknown\n assertJson(snapshot)\n if (typeof snapshot !== 'object' || snapshot === null || Array.isArray(snapshot)) invalid()\n return snapshot as Record<string, unknown>\n } catch {\n return invalid()\n }\n}\n","import { AdapterError, AgentsKitError, ErrorCodes } from './errors'\nimport type {\n AgentEvent,\n Message,\n MessageRole,\n MessageStatus,\n Observer,\n StreamChunk,\n StreamSource,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\nimport type { TokenUsage } from './types/stream'\n\nlet nextId = 0\n\nexport function generateId(prefix: string): string {\n return `${prefix}-${Date.now()}-${nextId++}`\n}\n\nexport function createEventEmitter() {\n const observers = new Set<Observer>()\n\n return {\n addObserver(observer: Observer): () => void {\n observers.add(observer)\n return () => { observers.delete(observer) }\n },\n emit(event: AgentEvent): void {\n for (const observer of observers) {\n try {\n const result = observer.on(event)\n if (result && typeof (result as Promise<void>).catch === 'function') {\n (result as Promise<void>).catch(() => {})\n }\n } catch {\n // Observer errors must never break the main loop.\n }\n }\n },\n }\n}\n\nexport function buildMessage(params: {\n role: MessageRole\n content: string\n status?: MessageStatus\n metadata?: Record<string, unknown>\n toolCallId?: string\n}): Message {\n return {\n id: generateId('msg'),\n role: params.role,\n content: params.content,\n status: params.status ?? 'complete',\n metadata: params.metadata,\n toolCallId: params.toolCallId,\n createdAt: new Date(),\n }\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return value != null && typeof value === 'object' && Symbol.asyncIterator in value\n}\n\nexport async function executeToolCall(\n tool: ToolDefinition,\n args: Record<string, unknown>,\n context: ToolExecutionContext,\n onPartialResult?: (accumulated: string) => void,\n): Promise<string> {\n const raw = tool.execute?.(args, context)\n\n if (isAsyncIterable(raw)) {\n let accumulated = ''\n for await (const chunk of raw) {\n accumulated += String(chunk)\n onPartialResult?.(accumulated)\n }\n return accumulated\n }\n\n const result = await raw\n return result == null ? '' : String(result)\n}\n\nexport function safeParseArgs(args: string): Record<string, unknown> {\n try {\n const parsed = JSON.parse(args)\n return parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : {}\n } catch {\n return {}\n }\n}\n\nexport function createToolLifecycle(tools: Map<string, ToolDefinition>) {\n const initialized = new Set<string>()\n\n return {\n async init(tool: ToolDefinition): Promise<void> {\n if (tool.init && !initialized.has(tool.name)) {\n await tool.init()\n initialized.add(tool.name)\n }\n },\n async disposeAll(): Promise<void> {\n for (const name of initialized) {\n try {\n await tools.get(name)?.dispose?.()\n } catch {\n // Dispose errors should not propagate.\n }\n }\n initialized.clear()\n },\n }\n}\n\nexport interface ConsumeStreamHandlers {\n onText?: (accumulated: string) => void\n onReasoning?: (accumulated: string) => void\n onToolCall?: (chunk: StreamChunk) => Promise<void> | void\n onToolResult?: (content: string) => void\n onUsage?: (usage: TokenUsage) => void\n onError?: (error: Error) => void\n onDone: (accumulatedText: string) => void\n}\n\nexport async function consumeStream(\n source: StreamSource,\n handlers: ConsumeStreamHandlers,\n): Promise<void> {\n let accumulatedText = ''\n let accumulatedReasoning = ''\n\n try {\n const iterator = source.stream()\n for await (const chunk of iterator) {\n if (chunk.type === 'text' && chunk.content) {\n accumulatedText += chunk.content\n handlers.onText?.(accumulatedText)\n } else if (chunk.type === 'reasoning' && chunk.content) {\n accumulatedReasoning += chunk.content\n handlers.onReasoning?.(accumulatedReasoning)\n } else if (chunk.type === 'tool_call') {\n await handlers.onToolCall?.(chunk)\n } else if (chunk.type === 'tool_result' && chunk.content) {\n handlers.onToolResult?.(chunk.content)\n } else if (chunk.type === 'usage' && chunk.usage) {\n handlers.onUsage?.(chunk.usage)\n } else if (chunk.type === 'error') {\n handlers.onError?.(new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: chunk.content ?? 'Stream error',\n hint: 'Key/network/model/provider',\n }))\n return\n } else if (chunk.type === 'done') {\n break\n }\n }\n handlers.onDone(accumulatedText)\n } catch (error) {\n const err = error instanceof AgentsKitError\n ? error\n : new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Stream failed: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Adapter/provider',\n cause: error,\n })\n handlers.onError?.(err)\n }\n}\n","import { ToolError, ErrorCodes } from './errors'\nimport { executeToolCall, createToolLifecycle, createEventEmitter } from './primitives'\nimport type {\n ArgsValidator,\n MaybePromise,\n SkillDefinition,\n ToolCall,\n ToolAuthorizationContext,\n ToolAuthorizer,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\n\n// --- buildToolMap ---\n\nexport function buildToolMap(\n ...sources: Array<ToolDefinition[] | undefined>\n): Map<string, ToolDefinition> {\n const map = new Map<string, ToolDefinition>()\n for (const source of sources) {\n if (!source) continue\n for (const tool of source) map.set(tool.name, tool)\n }\n return map\n}\n\n// --- activateSkills ---\n\nexport interface ActivateSkillsResult {\n systemPrompt: string | undefined\n skillTools: ToolDefinition[]\n}\n\nexport async function activateSkills(\n skills: SkillDefinition[],\n prompt?: string,\n): Promise<ActivateSkillsResult> {\n if (skills.length === 0) {\n return { systemPrompt: prompt, skillTools: [] }\n }\n\n const prompts = skills.map(s => `--- ${s.name} ---\\n${s.systemPrompt}`)\n const base = prompt ? `${prompt}\\n\\n` : ''\n const system = `${base}${prompts.join('\\n\\n')}`\n\n const tools: ToolDefinition[] = []\n for (const skill of skills) {\n if (skill.onActivate) {\n const a = await skill.onActivate()\n tools.push(...(a.tools ?? []))\n }\n }\n\n return { systemPrompt: system, skillTools: tools }\n}\n\n// --- executeSafeTool ---\n\nexport interface ToolExecResult {\n status: 'complete' | 'error' | 'skipped'\n result?: string\n error?: string\n durationMs: number\n}\n\nexport interface ExecuteSafeToolOptions {\n tool: ToolDefinition | undefined\n toolCall: ToolCall\n context: ToolExecutionContext\n emitter: ReturnType<typeof createEventEmitter>\n lifecycle: ReturnType<typeof createToolLifecycle>\n onPartial?: (result: string) => void\n onConfirm?: (toolCall: ToolCall) => MaybePromise<boolean>\n /** Opt-in arg validation against `tool.schema` (ADR-0008). */\n validate?: ArgsValidator\n authorize?: ToolAuthorizer\n}\n\nexport async function auth(fn: ToolAuthorizer | undefined, call: ToolCall, context: ToolAuthorizationContext): Promise<void> {\n if (!fn) return\n await import('./tool-authorization-internal.js').then(m => m.authorize(fn, call, context))\n}\n\n\nexport async function executeSafeTool(\n options: ExecuteSafeToolOptions,\n): Promise<ToolExecResult> {\n const { tool, toolCall, context, emitter, lifecycle, onPartial, onConfirm, validate, authorize } = options\n const began = Date.now()\n\n // Missing tool\n if (!tool?.execute) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_NOT_FOUND,\n message: `Tool \"${toolCall.name}\" not found or has no execute function`,\n hint: 'Register an executable tool in ChatConfig, e.g. { tools: [myTool] }.',\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n if (validate && tool.schema) {\n const v = validate(tool.schema, toolCall.args)\n if (!v.valid) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: v.message ?? `Tool \"${toolCall.name}\" received invalid arguments`,\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n }\n\n // Requires confirmation — refuse by default when no approver is configured (RT6)\n if (tool.requiresConfirmation) {\n if (!onConfirm) {\n return {\n status: 'skipped',\n result: 'No confirmation handler',\n durationMs: Date.now() - began,\n }\n }\n const confirmed = await onConfirm(toolCall)\n if (!confirmed) {\n return { status: 'skipped', result: 'Tool execution declined by confirmation handler', durationMs: Date.now() - began }\n }\n }\n\n try {\n await auth(authorize, toolCall, { ...context, tool, phase: 'execute' })\n } catch (error) {\n const err = error as ToolError\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n await lifecycle.init(tool)\n\n emitter.emit({ type: 'tool:start', name: toolCall.name, args: toolCall.args })\n\n try {\n const result = await executeToolCall(\n tool,\n toolCall.args,\n context,\n onPartial,\n )\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result,\n durationMs: Date.now() - began,\n })\n return { status: 'complete', result, durationMs: Date.now() - began }\n } catch (error) {\n const err = error instanceof ToolError\n ? error\n : new ToolError({\n code: ErrorCodes.AK_TOOL_EXEC_FAILED,\n message: `Tool \"${toolCall.name}\" threw during execution: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Check the tool execute() implementation.',\n cause: error,\n })\n // Emit error before tool:end so trackers can mark the active tool span.\n emitter.emit({ type: 'error', error: err })\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result: `Error: ${err.message}`,\n durationMs: Date.now() - began,\n })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n}\n","import { ErrorCodes, ToolError } from './errors'\nimport { cloneJsonRecord } from './json-validation'\nimport { buildMessage } from './primitives'\nimport { auth } from './agent-loop'\nimport type { ArgsValidator, ChatController, MaybePromise, ToolAuthorizer, ToolCall, ToolCallHandlerContext, ToolDefinition } from './types'\n\ntype Proposal = Pick<ToolCall, 'id' | 'name' | 'args'>\ntype Authority = readonly [\n ToolDefinition | undefined,\n ArgsValidator | undefined,\n ((toolCall: ToolCall, context: ToolCallHandlerContext) => MaybePromise<void>) | undefined,\n ToolAuthorizer | undefined,\n]\nconst pending = new WeakMap<ChatController, Map<string, Promise<ToolCall>>>()\n\nexport async function withAuthority(\n controller: ChatController,\n proposal: Proposal,\n resolve: (name: string) => Authority,\n): Promise<ToolCall> {\n const identifier = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/\n if (!identifier.test(proposal.id)) {\n throw new ToolError({ code: ErrorCodes.AK_TOOL_INVALID_INPUT, message: 'Invalid tool proposal identity' })\n }\n for (const message of controller.getState().messages) {\n const existing = message.toolCalls?.find(call => call.id === proposal.id)\n if (existing) return existing\n }\n let calls = pending.get(controller)\n if (!calls) { calls = new Map(); pending.set(controller, calls) }\n const active = calls.get(proposal.id)\n if (active) return active\n const operation = (async () => {\n if (!identifier.test(proposal.name)) {\n throw new ToolError({ code: ErrorCodes.AK_TOOL_INVALID_INPUT, message: 'Invalid tool proposal identity' })\n }\n const invalidArgs = (): never => {\n throw new ToolError({ code: ErrorCodes.AK_TOOL_INVALID_INPUT, message: 'Invalid tool proposal arguments' })\n }\n const args = cloneJsonRecord(proposal.args, invalidArgs, 16_384)\n const [tool, validateArgs, onToolCall, authorize] = resolve(proposal.name)\n if (!tool?.requiresConfirmation || !tool.execute) {\n throw new ToolError({\n code: tool ? ErrorCodes.AK_CONFIG_INVALID : ErrorCodes.AK_TOOL_NOT_FOUND,\n message: 'Tool is not registered for confirmation',\n })\n }\n if (validateArgs && tool.schema) {\n const validation = validateArgs(tool.schema, args)\n if (!validation.valid) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: validation.message ?? 'Invalid tool arguments',\n })\n }\n }\n const call: ToolCall = { ...proposal, args, status: 'requires_confirmation' }\n await auth(authorize, call, { messages: controller.getState().messages, tool, phase: 'propose' })\n const message = { ...buildMessage({ role: 'assistant', content: '' }), toolCalls: [call] }\n controller.setMessages([...controller.getState().messages, message])\n try {\n await onToolCall?.(call, { messages: controller.getState().messages, tool })\n } catch (error) {\n controller.setMessages(controller.getState().messages.map(current => current.id !== message.id ? current : {\n ...current,\n toolCalls: current.toolCalls?.map(existing => existing.id !== call.id ? existing : {\n ...existing,\n status: 'error',\n error: error instanceof Error ? error.message : 'Tool proposal rejected',\n }),\n }))\n throw error\n }\n return call\n })()\n calls.set(proposal.id, operation)\n try { return await operation } finally { calls.delete(proposal.id) }\n}\n"]}
{"version":3,"sources":["../src/errors.ts","../src/json-validation.ts","../src/primitives.ts","../src/agent-loop.ts","../src/tool-proposal-internal.ts"],"names":["DOCS_BASE","formatError","code","message","hint","docsUrl","lines","AgentsKitError","options","ToolError","ErrorCodes","cloneJsonRecord","input","invalid","maxStringLength","preflight","assertJson","root","active","stack","nodes","item","value","isArray","prototype","array","index","keys","key","descriptor","snapshot","nextId","generateId","prefix","buildMessage","params","auth","fn","call","context","m","pending","withAuthority","controller","proposal","resolve","identifier","existing","calls","operation","invalidArgs","args","tool","validateArgs","onToolCall","authorize","validation","error","current"],"mappings":"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","file":"tool-proposal-internal.cjs","sourcesContent":["// ---------------------------------------------------------------------------\n// AgentsKit didactic error system — Rust-compiler-style helpful errors\n// ---------------------------------------------------------------------------\n\nconst DOCS_BASE = 'https://www.agentskit.io/docs'\n\n/**\n * Format an error for display, Rust-compiler style.\n *\n * Example output:\n * ```\n * error[AK_ADAPTER_MISSING]: No adapter provided\n * --> Hint: Pass an adapter when creating the chat controller, e.g.\n * createChatController({ adapter: openaiAdapter() })\n * --> Docs: https://www.agentskit.io/docs/adapters\n * ```\n */\nfunction formatError(code: string, message: string, hint?: string, docsUrl?: string): string {\n const lines: string[] = [`error[${code}]: ${message}`]\n if (hint) lines.push(` --> Hint: ${hint}`)\n if (docsUrl) lines.push(` --> Docs: ${docsUrl}`)\n return lines.join('\\n')\n}\n\n// ---------------------------------------------------------------------------\n// Base class\n// ---------------------------------------------------------------------------\n\nexport class AgentsKitError extends Error {\n readonly code: string\n readonly hint: string | undefined\n readonly docsUrl: string | undefined\n readonly cause: unknown\n\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super(options.message)\n this.name = 'AgentsKitError'\n this.code = options.code\n this.hint = options.hint\n this.docsUrl = options.docsUrl\n this.cause = options.cause\n }\n\n override toString(): string {\n return formatError(this.code, this.message, this.hint, this.docsUrl)\n }\n}\n\n// ---------------------------------------------------------------------------\n// Subclasses\n// ---------------------------------------------------------------------------\n\nexport class AdapterError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/adapters`, ...options })\n this.name = 'AdapterError'\n }\n}\n\nexport class ToolError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/tools`, ...options })\n this.name = 'ToolError'\n }\n}\n\nexport class MemoryError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/memory`, ...options })\n this.name = 'MemoryError'\n }\n}\n\nexport class ConfigError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/configuration`, ...options })\n this.name = 'ConfigError'\n }\n}\n\nexport class RuntimeError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/agents/runtime`, ...options })\n this.name = 'RuntimeError'\n }\n}\n\nexport class SandboxError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/production/security/mandatory-sandbox`, ...options })\n this.name = 'SandboxError'\n }\n}\n\nexport class SkillError extends AgentsKitError {\n constructor(options: {\n code: string\n message: string\n hint?: string\n docsUrl?: string\n cause?: unknown\n }) {\n super({ docsUrl: `${DOCS_BASE}/agents/skills`, ...options })\n this.name = 'SkillError'\n }\n}\n\n// ---------------------------------------------------------------------------\n// Error code constants\n// ---------------------------------------------------------------------------\n\nexport const ErrorCodes = {\n // Adapter errors\n AK_ADAPTER_MISSING: 'AK_ADAPTER_MISSING',\n AK_ADAPTER_STREAM_FAILED: 'AK_ADAPTER_STREAM_FAILED',\n\n // Tool errors\n AK_TOOL_NOT_FOUND: 'AK_TOOL_NOT_FOUND',\n AK_TOOL_EXEC_FAILED: 'AK_TOOL_EXEC_FAILED',\n AK_TOOL_PEER_MISSING: 'AK_TOOL_PEER_MISSING',\n AK_TOOL_INVALID_INPUT: 'AK_TOOL_INVALID_INPUT',\n AK_TOOL_QUOTA_EXCEEDED: 'AK_TOOL_QUOTA_EXCEEDED',\n AK_TOOL_FORBIDDEN: 'AK_TOOL_FORBIDDEN',\n\n // Memory errors\n AK_MEMORY_LOAD_FAILED: 'AK_MEMORY_LOAD_FAILED',\n AK_MEMORY_SAVE_FAILED: 'AK_MEMORY_SAVE_FAILED',\n AK_MEMORY_DESERIALIZE_FAILED: 'AK_MEMORY_DESERIALIZE_FAILED',\n AK_MEMORY_PEER_MISSING: 'AK_MEMORY_PEER_MISSING',\n AK_MEMORY_REMOTE_HTTP: 'AK_MEMORY_REMOTE_HTTP',\n\n // Config errors\n AK_CONFIG_INVALID: 'AK_CONFIG_INVALID',\n\n // Runtime errors\n AK_RUNTIME_INVALID_INPUT: 'AK_RUNTIME_INVALID_INPUT',\n AK_RUNTIME_STEP_FAILED: 'AK_RUNTIME_STEP_FAILED',\n AK_RUNTIME_DELEGATE_FAILED: 'AK_RUNTIME_DELEGATE_FAILED',\n\n // Sandbox errors\n AK_SANDBOX_DENIED: 'AK_SANDBOX_DENIED',\n AK_SANDBOX_INVALID_TOOL: 'AK_SANDBOX_INVALID_TOOL',\n AK_SANDBOX_PEER_MISSING: 'AK_SANDBOX_PEER_MISSING',\n AK_SANDBOX_BACKEND_FAILED: 'AK_SANDBOX_BACKEND_FAILED',\n\n // Skill errors\n AK_SKILL_INVALID: 'AK_SKILL_INVALID',\n AK_SKILL_DUPLICATE: 'AK_SKILL_DUPLICATE',\n} as const\n","export function cloneJsonRecord(\n input: unknown,\n invalid: () => never,\n maxStringLength = Infinity,\n preflight = true,\n): Record<string, unknown> {\n const assertJson = (root: unknown): void => {\n const active = new WeakSet<object>()\n const stack: Array<{ value: unknown; depth: number; exit?: boolean }> = [{ value: root, depth: 0 }]\n let nodes = 0\n while (stack.length > 0) {\n const item = stack.pop()!\n const value = item.value\n if (item.exit) { active.delete(value as object); continue }\n if (++nodes > 10_000 || item.depth > 32) invalid()\n if (value === null || typeof value === 'boolean') continue\n if (typeof value === 'string') { if (value.length > maxStringLength) invalid(); continue }\n if (typeof value === 'number') { if (!Number.isFinite(value)) invalid(); continue }\n if (typeof value !== 'object') invalid()\n const isArray = Array.isArray(value)\n const prototype = isArray ? Array.prototype : Object.getPrototypeOf(value) as unknown\n if (!isArray && prototype !== Object.prototype && prototype !== null) invalid()\n if (active.has(value)) invalid()\n active.add(value)\n stack.push({ value, depth: item.depth, exit: true })\n if (isArray) {\n const array = value as unknown[]\n if (array.length > 10_000) invalid()\n for (let index = array.length - 1; index >= 0; index--) {\n stack.push({ value: array[index], depth: item.depth + 1 })\n }\n continue\n }\n const keys = Object.keys(value)\n if (keys.length > 10_000) invalid()\n for (let index = keys.length - 1; index >= 0; index--) {\n const key = keys[index]!\n if (key.length > 256) invalid()\n const descriptor = Object.getOwnPropertyDescriptor(value, key)\n if (!descriptor || descriptor.get || descriptor.set) invalid()\n stack.push({ value: descriptor.value, depth: item.depth + 1 })\n }\n }\n }\n try {\n if (preflight) assertJson(input)\n const snapshot = structuredClone(input) as unknown\n assertJson(snapshot)\n if (typeof snapshot !== 'object' || snapshot === null || Array.isArray(snapshot)) invalid()\n return snapshot as Record<string, unknown>\n } catch {\n return invalid()\n }\n}\n","import { AdapterError, AgentsKitError, ErrorCodes } from './errors'\nimport type {\n AgentEvent,\n Message,\n MessageRole,\n MessageStatus,\n Observer,\n StreamChunk,\n StreamSource,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\nimport type { TokenUsage } from './types/stream'\n\nlet nextId = 0\n\nexport function generateId(prefix: string): string {\n return `${prefix}-${Date.now()}-${nextId++}`\n}\n\nexport function createEventEmitter() {\n const observers = new Set<Observer>()\n\n return {\n addObserver(observer: Observer): () => void {\n observers.add(observer)\n return () => { observers.delete(observer) }\n },\n emit(event: AgentEvent): void {\n for (const observer of observers) {\n try {\n const result = observer.on(event)\n if (result && typeof (result as Promise<void>).catch === 'function') {\n (result as Promise<void>).catch(() => {})\n }\n } catch {\n // Observer errors must never break the main loop.\n }\n }\n },\n }\n}\n\nexport function buildMessage(params: {\n role: MessageRole\n content: string\n status?: MessageStatus\n metadata?: Record<string, unknown>\n toolCallId?: string\n}): Message {\n return {\n id: generateId('msg'),\n role: params.role,\n content: params.content,\n status: params.status ?? 'complete',\n metadata: params.metadata,\n toolCallId: params.toolCallId,\n createdAt: new Date(),\n }\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return value != null && typeof value === 'object' && Symbol.asyncIterator in value\n}\n\nfunction serializeToolResult(result: unknown): string {\n if (result == null) return ''\n if (typeof result === 'string' || result instanceof Error) return String(result)\n\n try {\n return JSON.stringify(result) ?? String(result)\n } catch {\n return String(result)\n }\n}\n\nexport async function executeToolCall(\n tool: ToolDefinition,\n args: Record<string, unknown>,\n context: ToolExecutionContext,\n onPartialResult?: (accumulated: string) => void,\n): Promise<string> {\n const raw = tool.execute?.(args, context)\n\n if (isAsyncIterable(raw)) {\n let accumulated = ''\n for await (const chunk of raw) {\n accumulated += String(chunk)\n onPartialResult?.(accumulated)\n }\n return accumulated\n }\n\n const result = await raw\n return serializeToolResult(result)\n}\n\nexport function safeParseArgs(args: string): Record<string, unknown> {\n try {\n const parsed = JSON.parse(args)\n return parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : {}\n } catch {\n return {}\n }\n}\n\nexport function createToolLifecycle(tools: Map<string, ToolDefinition>) {\n const initialized = new Set<string>()\n\n return {\n async init(tool: ToolDefinition): Promise<void> {\n if (tool.init && !initialized.has(tool.name)) {\n await tool.init()\n initialized.add(tool.name)\n }\n },\n async disposeAll(): Promise<void> {\n for (const name of initialized) {\n try {\n await tools.get(name)?.dispose?.()\n } catch {\n // Dispose errors should not propagate.\n }\n }\n initialized.clear()\n },\n }\n}\n\nexport interface ConsumeStreamHandlers {\n onText?: (accumulated: string) => void\n onReasoning?: (accumulated: string) => void\n onToolCall?: (chunk: StreamChunk) => Promise<void> | void\n onToolResult?: (content: string) => void\n onUsage?: (usage: TokenUsage) => void\n onError?: (error: Error) => void\n onDone: (accumulatedText: string) => void\n}\n\nexport async function consumeStream(\n source: StreamSource,\n handlers: ConsumeStreamHandlers,\n): Promise<void> {\n let accumulatedText = ''\n let accumulatedReasoning = ''\n\n try {\n const iterator = source.stream()\n for await (const chunk of iterator) {\n if (chunk.type === 'text' && chunk.content) {\n accumulatedText += chunk.content\n handlers.onText?.(accumulatedText)\n } else if (chunk.type === 'reasoning' && chunk.content) {\n accumulatedReasoning += chunk.content\n handlers.onReasoning?.(accumulatedReasoning)\n } else if (chunk.type === 'tool_call') {\n await handlers.onToolCall?.(chunk)\n } else if (chunk.type === 'tool_result' && chunk.content) {\n handlers.onToolResult?.(chunk.content)\n } else if (chunk.type === 'usage' && chunk.usage) {\n handlers.onUsage?.(chunk.usage)\n } else if (chunk.type === 'error') {\n handlers.onError?.(new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: chunk.content ?? 'Stream error',\n hint: 'Key/network/model/provider',\n }))\n return\n } else if (chunk.type === 'done') {\n break\n }\n }\n handlers.onDone(accumulatedText)\n } catch (error) {\n const err = error instanceof AgentsKitError\n ? error\n : new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Stream failed: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Adapter/provider',\n cause: error,\n })\n handlers.onError?.(err)\n }\n}\n","import { ToolError, ErrorCodes } from './errors'\nimport { executeToolCall, createToolLifecycle, createEventEmitter } from './primitives'\nimport type {\n ArgsValidator,\n MaybePromise,\n SkillDefinition,\n ToolCall,\n ToolAuthorizationContext,\n ToolAuthorizer,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\n\n// --- buildToolMap ---\n\nexport function buildToolMap(\n ...sources: Array<ToolDefinition[] | undefined>\n): Map<string, ToolDefinition> {\n const map = new Map<string, ToolDefinition>()\n for (const source of sources) {\n if (!source) continue\n for (const tool of source) map.set(tool.name, tool)\n }\n return map\n}\n\n// --- activateSkills ---\n\nexport interface ActivateSkillsResult {\n systemPrompt: string | undefined\n skillTools: ToolDefinition[]\n}\n\nexport async function activateSkills(\n skills: SkillDefinition[],\n prompt?: string,\n): Promise<ActivateSkillsResult> {\n if (skills.length === 0) {\n return { systemPrompt: prompt, skillTools: [] }\n }\n\n const prompts = skills.map(s => `--- ${s.name} ---\\n${s.systemPrompt}`)\n const base = prompt ? `${prompt}\\n\\n` : ''\n const system = `${base}${prompts.join('\\n\\n')}`\n\n const tools: ToolDefinition[] = []\n for (const skill of skills) {\n if (skill.onActivate) {\n const a = await skill.onActivate()\n tools.push(...(a.tools ?? []))\n }\n }\n\n return { systemPrompt: system, skillTools: tools }\n}\n\n// --- executeSafeTool ---\n\nexport interface ToolExecResult {\n status: 'complete' | 'error' | 'skipped'\n result?: string\n error?: string\n durationMs: number\n}\n\nexport interface ExecuteSafeToolOptions {\n tool: ToolDefinition | undefined\n toolCall: ToolCall\n context: ToolExecutionContext\n emitter: ReturnType<typeof createEventEmitter>\n lifecycle: ReturnType<typeof createToolLifecycle>\n onPartial?: (result: string) => void\n onConfirm?: (toolCall: ToolCall) => MaybePromise<boolean>\n /** Opt-in arg validation against `tool.schema` (ADR-0008). */\n validate?: ArgsValidator\n authorize?: ToolAuthorizer\n}\n\nexport async function auth(fn: ToolAuthorizer | undefined, call: ToolCall, context: ToolAuthorizationContext): Promise<void> {\n if (!fn) return\n await import('./tool-authorization-internal.js').then(m => m.authorize(fn, call, context))\n}\n\n\nexport async function executeSafeTool(\n options: ExecuteSafeToolOptions,\n): Promise<ToolExecResult> {\n const { tool, toolCall, context, emitter, lifecycle, onPartial, onConfirm, validate, authorize } = options\n const began = Date.now()\n\n // Missing tool\n if (!tool?.execute) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_NOT_FOUND,\n message: `Tool \"${toolCall.name}\" not found or has no execute function`,\n hint: 'Register an executable tool in ChatConfig, e.g. { tools: [myTool] }.',\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n if (validate && tool.schema) {\n const v = validate(tool.schema, toolCall.args)\n if (!v.valid) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: v.message ?? `Tool \"${toolCall.name}\" received invalid arguments`,\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n }\n\n // Requires confirmation — refuse by default when no approver is configured (RT6)\n if (tool.requiresConfirmation) {\n if (!onConfirm) {\n return {\n status: 'skipped',\n result: 'No confirmation handler',\n durationMs: Date.now() - began,\n }\n }\n const confirmed = await onConfirm(toolCall)\n if (!confirmed) {\n return { status: 'skipped', result: 'Tool execution declined by confirmation handler', durationMs: Date.now() - began }\n }\n }\n\n try {\n await auth(authorize, toolCall, { ...context, tool, phase: 'execute' })\n } catch (error) {\n const err = error as ToolError\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n await lifecycle.init(tool)\n\n emitter.emit({ type: 'tool:start', name: toolCall.name, args: toolCall.args })\n\n try {\n const result = await executeToolCall(\n tool,\n toolCall.args,\n context,\n onPartial,\n )\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result,\n durationMs: Date.now() - began,\n })\n return { status: 'complete', result, durationMs: Date.now() - began }\n } catch (error) {\n const err = error instanceof ToolError\n ? error\n : new ToolError({\n code: ErrorCodes.AK_TOOL_EXEC_FAILED,\n message: `Tool \"${toolCall.name}\" threw during execution: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Check the tool execute() implementation.',\n cause: error,\n })\n // Emit error before tool:end so trackers can mark the active tool span.\n emitter.emit({ type: 'error', error: err })\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result: `Error: ${err.message}`,\n durationMs: Date.now() - began,\n })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n}\n","import { ErrorCodes, ToolError } from './errors'\nimport { cloneJsonRecord } from './json-validation'\nimport { buildMessage } from './primitives'\nimport { auth } from './agent-loop'\nimport type { ArgsValidator, ChatController, MaybePromise, ToolAuthorizer, ToolCall, ToolCallHandlerContext, ToolDefinition } from './types'\n\ntype Proposal = Pick<ToolCall, 'id' | 'name' | 'args'>\ntype Authority = readonly [\n ToolDefinition | undefined,\n ArgsValidator | undefined,\n ((toolCall: ToolCall, context: ToolCallHandlerContext) => MaybePromise<void>) | undefined,\n ToolAuthorizer | undefined,\n]\nconst pending = new WeakMap<ChatController, Map<string, Promise<ToolCall>>>()\n\nexport async function withAuthority(\n controller: ChatController,\n proposal: Proposal,\n resolve: (name: string) => Authority,\n): Promise<ToolCall> {\n const identifier = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/\n if (!identifier.test(proposal.id)) {\n throw new ToolError({ code: ErrorCodes.AK_TOOL_INVALID_INPUT, message: 'Invalid tool proposal identity' })\n }\n for (const message of controller.getState().messages) {\n const existing = message.toolCalls?.find(call => call.id === proposal.id)\n if (existing) return existing\n }\n let calls = pending.get(controller)\n if (!calls) { calls = new Map(); pending.set(controller, calls) }\n const active = calls.get(proposal.id)\n if (active) return active\n const operation = (async () => {\n if (!identifier.test(proposal.name)) {\n throw new ToolError({ code: ErrorCodes.AK_TOOL_INVALID_INPUT, message: 'Invalid tool proposal identity' })\n }\n const invalidArgs = (): never => {\n throw new ToolError({ code: ErrorCodes.AK_TOOL_INVALID_INPUT, message: 'Invalid tool proposal arguments' })\n }\n const args = cloneJsonRecord(proposal.args, invalidArgs, 16_384)\n const [tool, validateArgs, onToolCall, authorize] = resolve(proposal.name)\n if (!tool?.requiresConfirmation || !tool.execute) {\n throw new ToolError({\n code: tool ? ErrorCodes.AK_CONFIG_INVALID : ErrorCodes.AK_TOOL_NOT_FOUND,\n message: 'Tool is not registered for confirmation',\n })\n }\n if (validateArgs && tool.schema) {\n const validation = validateArgs(tool.schema, args)\n if (!validation.valid) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: validation.message ?? 'Invalid tool arguments',\n })\n }\n }\n const call: ToolCall = { ...proposal, args, status: 'requires_confirmation' }\n await auth(authorize, call, { messages: controller.getState().messages, tool, phase: 'propose' })\n const message = { ...buildMessage({ role: 'assistant', content: '' }), toolCalls: [call] }\n controller.setMessages([...controller.getState().messages, message])\n try {\n await onToolCall?.(call, { messages: controller.getState().messages, tool })\n } catch (error) {\n controller.setMessages(controller.getState().messages.map(current => current.id !== message.id ? current : {\n ...current,\n toolCalls: current.toolCalls?.map(existing => existing.id !== call.id ? existing : {\n ...existing,\n status: 'error',\n error: error instanceof Error ? error.message : 'Tool proposal rejected',\n }),\n }))\n throw error\n }\n return call\n })()\n calls.set(proposal.id, operation)\n try { return await operation } finally { calls.delete(proposal.id) }\n}\n"]}

@@ -1,2 +0,2 @@

import {a}from'./chunk-JAODCWFD.js';import {j,c as c$1}from'./chunk-MNAKU42O.js';import {c,i}from'./chunk-4PAWFNZ5.js';var I=new WeakMap;async function L(e,o,w){let f=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;if(!f.test(o.id))throw new c({code:i.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});for(let m of e.getState().messages){let r=m.toolCalls?.find(t=>t.id===o.id);if(r)return r}let a$1=I.get(e);a$1||(a$1=new Map,I.set(e,a$1));let c$2=a$1.get(o.id);if(c$2)return c$2;let T=(async()=>{if(!f.test(o.name))throw new c({code:i.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});let m=()=>{throw new c({code:i.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal arguments"})},r=a(o.args,m,16384),[t,C,y,p]=w(o.name);if(!t?.requiresConfirmation||!t.execute)throw new c({code:t?i.AK_CONFIG_INVALID:i.AK_TOOL_NOT_FOUND,message:"Tool is not registered for confirmation"});if(C&&t.schema){let i$1=C(t.schema,r);if(!i$1.valid)throw new c({code:i.AK_TOOL_INVALID_INPUT,message:i$1.message??"Invalid tool arguments"})}let l={...o,args:r,status:"requires_confirmation"};await j(p,l,{messages:e.getState().messages,tool:t,phase:"propose"});let A={...c$1({role:"assistant",content:""}),toolCalls:[l]};e.setMessages([...e.getState().messages,A]);try{await y?.(l,{messages:e.getState().messages,tool:t});}catch(i){throw e.setMessages(e.getState().messages.map(d=>d.id!==A.id?d:{...d,toolCalls:d.toolCalls?.map(g=>g.id!==l.id?g:{...g,status:"error",error:i instanceof Error?i.message:"Tool proposal rejected"})})),i}return l})();a$1.set(o.id,T);try{return await T}finally{a$1.delete(o.id);}}export{L as withAuthority};//# sourceMappingURL=tool-proposal-internal.js.map
import {a}from'./chunk-JAODCWFD.js';import {j,c as c$1}from'./chunk-VWKK6GKY.js';import {c,i}from'./chunk-4PAWFNZ5.js';var I=new WeakMap;async function L(e,o,w){let f=/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;if(!f.test(o.id))throw new c({code:i.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});for(let m of e.getState().messages){let r=m.toolCalls?.find(t=>t.id===o.id);if(r)return r}let a$1=I.get(e);a$1||(a$1=new Map,I.set(e,a$1));let c$2=a$1.get(o.id);if(c$2)return c$2;let T=(async()=>{if(!f.test(o.name))throw new c({code:i.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal identity"});let m=()=>{throw new c({code:i.AK_TOOL_INVALID_INPUT,message:"Invalid tool proposal arguments"})},r=a(o.args,m,16384),[t,C,y,p]=w(o.name);if(!t?.requiresConfirmation||!t.execute)throw new c({code:t?i.AK_CONFIG_INVALID:i.AK_TOOL_NOT_FOUND,message:"Tool is not registered for confirmation"});if(C&&t.schema){let i$1=C(t.schema,r);if(!i$1.valid)throw new c({code:i.AK_TOOL_INVALID_INPUT,message:i$1.message??"Invalid tool arguments"})}let l={...o,args:r,status:"requires_confirmation"};await j(p,l,{messages:e.getState().messages,tool:t,phase:"propose"});let A={...c$1({role:"assistant",content:""}),toolCalls:[l]};e.setMessages([...e.getState().messages,A]);try{await y?.(l,{messages:e.getState().messages,tool:t});}catch(i){throw e.setMessages(e.getState().messages.map(d=>d.id!==A.id?d:{...d,toolCalls:d.toolCalls?.map(g=>g.id!==l.id?g:{...g,status:"error",error:i instanceof Error?i.message:"Tool proposal rejected"})})),i}return l})();a$1.set(o.id,T);try{return await T}finally{a$1.delete(o.id);}}export{L as withAuthority};//# sourceMappingURL=tool-proposal-internal.js.map
//# sourceMappingURL=tool-proposal-internal.js.map
{
"name": "@agentskit/core",
"version": "1.12.6",
"version": "1.12.7",
"description": "Portable AgentsKit runtime for chat orchestration, tools, memory, and retrieval.",

@@ -5,0 +5,0 @@ "keywords": [

import {b,i,a,c}from'./chunk-4PAWFNZ5.js';var x=0;function w(t){return `${t}-${Date.now()}-${x++}`}function S(){let t=new Set;return {addObserver(e){return t.add(e),()=>{t.delete(e);}},emit(e){for(let o of t)try{let a=o.on(e);a&&typeof a.catch=="function"&&a.catch(()=>{});}catch{}}}}function D(t){return {id:w("msg"),role:t.role,content:t.content,status:t.status??"complete",metadata:t.metadata,toolCallId:t.toolCallId,createdAt:new Date}}function v(t){return t!=null&&typeof t=="object"&&Symbol.asyncIterator in t}async function T(t,e,o,a){let n=t.execute?.(e,o);if(v(n)){let s="";for await(let m of n)s+=String(m),a?.(s);return s}let r=await n;return r==null?"":String(r)}function h(t){try{let e=JSON.parse(t);return e&&typeof e=="object"?e:{}}catch{return {}}}function C(t){let e=new Set;return {async init(o){o.init&&!e.has(o.name)&&(await o.init(),e.add(o.name));},async disposeAll(){for(let o of e)try{await t.get(o)?.dispose?.();}catch{}e.clear();}}}async function k(t,e){let o="",a$1="";try{let n=t.stream();for await(let r of n)if(r.type==="text"&&r.content)o+=r.content,e.onText?.(o);else if(r.type==="reasoning"&&r.content)a$1+=r.content,e.onReasoning?.(a$1);else if(r.type==="tool_call")await e.onToolCall?.(r);else if(r.type==="tool_result"&&r.content)e.onToolResult?.(r.content);else if(r.type==="usage"&&r.usage)e.onUsage?.(r.usage);else if(r.type==="error"){e.onError?.(new b({code:i.AK_ADAPTER_STREAM_FAILED,message:r.content??"Stream error",hint:"Key/network/model/provider"}));return}else if(r.type==="done")break;e.onDone(o);}catch(n){let r=n instanceof a?n:new b({code:i.AK_ADAPTER_STREAM_FAILED,message:`Stream failed: ${n instanceof Error?n.message:String(n)}`,hint:"Adapter/provider",cause:n});e.onError?.(r);}}function O(...t){let e=new Map;for(let o of t)if(o)for(let a of o)e.set(a.name,a);return e}async function I(t,e){if(t.length===0)return {systemPrompt:e,skillTools:[]};let o=t.map(s=>`--- ${s.name} ---
${s.systemPrompt}`),n=`${e?`${e}
`:""}${o.join(`
`)}`,r=[];for(let s of t)if(s.onActivate){let m=await s.onActivate();r.push(...m.tools??[]);}return {systemPrompt:n,skillTools:r}}async function E(t,e,o){t&&await import('./tool-authorization-internal.js').then(a=>a.authorize(t,e,o));}async function $(t){let{tool:e,toolCall:o,context:a,emitter:n,lifecycle:r,onPartial:s,onConfirm:m,validate:g,authorize:y}=t,c$1=Date.now();if(!e?.execute){let i$1=new c({code:i.AK_TOOL_NOT_FOUND,message:`Tool "${o.name}" not found or has no execute function`,hint:"Register an executable tool in ChatConfig, e.g. { tools: [myTool] }."});return n.emit({type:"error",error:i$1}),{status:"error",error:i$1.toString(),durationMs:Date.now()-c$1}}if(g&&e.schema){let i$1=g(e.schema,o.args);if(!i$1.valid){let l=new c({code:i.AK_TOOL_INVALID_INPUT,message:i$1.message??`Tool "${o.name}" received invalid arguments`});return n.emit({type:"error",error:l}),{status:"error",error:l.toString(),durationMs:Date.now()-c$1}}}if(e.requiresConfirmation){if(!m)return {status:"skipped",result:"No confirmation handler",durationMs:Date.now()-c$1};if(!await m(o))return {status:"skipped",result:"Tool execution declined by confirmation handler",durationMs:Date.now()-c$1}}try{await E(y,o,{...a,tool:e,phase:"execute"});}catch(i){let l=i;return n.emit({type:"error",error:l}),{status:"error",error:l.toString(),durationMs:Date.now()-c$1}}await r.init(e),n.emit({type:"tool:start",name:o.name,args:o.args});try{let i=await T(e,o.args,a,s);return n.emit({type:"tool:end",name:o.name,result:i,durationMs:Date.now()-c$1}),{status:"complete",result:i,durationMs:Date.now()-c$1}}catch(i$1){let l=i$1 instanceof c?i$1:new c({code:i.AK_TOOL_EXEC_FAILED,message:`Tool "${o.name}" threw during execution: ${i$1 instanceof Error?i$1.message:String(i$1)}`,hint:"Check the tool execute() implementation.",cause:i$1});return n.emit({type:"error",error:l}),n.emit({type:"tool:end",name:o.name,result:`Error: ${l.message}`,durationMs:Date.now()-c$1}),{status:"error",error:l.toString(),durationMs:Date.now()-c$1}}}export{w as a,S as b,D as c,T as d,h as e,C as f,k as g,O as h,I as i,E as j,$ as k};//# sourceMappingURL=chunk-MNAKU42O.js.map
//# sourceMappingURL=chunk-MNAKU42O.js.map
{"version":3,"sources":["../src/primitives.ts","../src/agent-loop.ts"],"names":["nextId","generateId","prefix","createEventEmitter","observers","observer","event","result","buildMessage","params","isAsyncIterable","value","executeToolCall","tool","args","context","onPartialResult","raw","accumulated","chunk","safeParseArgs","parsed","createToolLifecycle","tools","initialized","name","consumeStream","source","handlers","accumulatedText","accumulatedReasoning","iterator","AdapterError","ErrorCodes","error","err","AgentsKitError","buildToolMap","sources","map","activateSkills","skills","prompt","prompts","system","skill","a","auth","fn","call","m","executeSafeTool","options","toolCall","emitter","lifecycle","onPartial","onConfirm","validate","authorize","began","ToolError","v"],"mappings":"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","file":"chunk-MNAKU42O.js","sourcesContent":["import { AdapterError, AgentsKitError, ErrorCodes } from './errors'\nimport type {\n AgentEvent,\n Message,\n MessageRole,\n MessageStatus,\n Observer,\n StreamChunk,\n StreamSource,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\nimport type { TokenUsage } from './types/stream'\n\nlet nextId = 0\n\nexport function generateId(prefix: string): string {\n return `${prefix}-${Date.now()}-${nextId++}`\n}\n\nexport function createEventEmitter() {\n const observers = new Set<Observer>()\n\n return {\n addObserver(observer: Observer): () => void {\n observers.add(observer)\n return () => { observers.delete(observer) }\n },\n emit(event: AgentEvent): void {\n for (const observer of observers) {\n try {\n const result = observer.on(event)\n if (result && typeof (result as Promise<void>).catch === 'function') {\n (result as Promise<void>).catch(() => {})\n }\n } catch {\n // Observer errors must never break the main loop.\n }\n }\n },\n }\n}\n\nexport function buildMessage(params: {\n role: MessageRole\n content: string\n status?: MessageStatus\n metadata?: Record<string, unknown>\n toolCallId?: string\n}): Message {\n return {\n id: generateId('msg'),\n role: params.role,\n content: params.content,\n status: params.status ?? 'complete',\n metadata: params.metadata,\n toolCallId: params.toolCallId,\n createdAt: new Date(),\n }\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return value != null && typeof value === 'object' && Symbol.asyncIterator in value\n}\n\nexport async function executeToolCall(\n tool: ToolDefinition,\n args: Record<string, unknown>,\n context: ToolExecutionContext,\n onPartialResult?: (accumulated: string) => void,\n): Promise<string> {\n const raw = tool.execute?.(args, context)\n\n if (isAsyncIterable(raw)) {\n let accumulated = ''\n for await (const chunk of raw) {\n accumulated += String(chunk)\n onPartialResult?.(accumulated)\n }\n return accumulated\n }\n\n const result = await raw\n return result == null ? '' : String(result)\n}\n\nexport function safeParseArgs(args: string): Record<string, unknown> {\n try {\n const parsed = JSON.parse(args)\n return parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : {}\n } catch {\n return {}\n }\n}\n\nexport function createToolLifecycle(tools: Map<string, ToolDefinition>) {\n const initialized = new Set<string>()\n\n return {\n async init(tool: ToolDefinition): Promise<void> {\n if (tool.init && !initialized.has(tool.name)) {\n await tool.init()\n initialized.add(tool.name)\n }\n },\n async disposeAll(): Promise<void> {\n for (const name of initialized) {\n try {\n await tools.get(name)?.dispose?.()\n } catch {\n // Dispose errors should not propagate.\n }\n }\n initialized.clear()\n },\n }\n}\n\nexport interface ConsumeStreamHandlers {\n onText?: (accumulated: string) => void\n onReasoning?: (accumulated: string) => void\n onToolCall?: (chunk: StreamChunk) => Promise<void> | void\n onToolResult?: (content: string) => void\n onUsage?: (usage: TokenUsage) => void\n onError?: (error: Error) => void\n onDone: (accumulatedText: string) => void\n}\n\nexport async function consumeStream(\n source: StreamSource,\n handlers: ConsumeStreamHandlers,\n): Promise<void> {\n let accumulatedText = ''\n let accumulatedReasoning = ''\n\n try {\n const iterator = source.stream()\n for await (const chunk of iterator) {\n if (chunk.type === 'text' && chunk.content) {\n accumulatedText += chunk.content\n handlers.onText?.(accumulatedText)\n } else if (chunk.type === 'reasoning' && chunk.content) {\n accumulatedReasoning += chunk.content\n handlers.onReasoning?.(accumulatedReasoning)\n } else if (chunk.type === 'tool_call') {\n await handlers.onToolCall?.(chunk)\n } else if (chunk.type === 'tool_result' && chunk.content) {\n handlers.onToolResult?.(chunk.content)\n } else if (chunk.type === 'usage' && chunk.usage) {\n handlers.onUsage?.(chunk.usage)\n } else if (chunk.type === 'error') {\n handlers.onError?.(new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: chunk.content ?? 'Stream error',\n hint: 'Key/network/model/provider',\n }))\n return\n } else if (chunk.type === 'done') {\n break\n }\n }\n handlers.onDone(accumulatedText)\n } catch (error) {\n const err = error instanceof AgentsKitError\n ? error\n : new AdapterError({\n code: ErrorCodes.AK_ADAPTER_STREAM_FAILED,\n message: `Stream failed: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Adapter/provider',\n cause: error,\n })\n handlers.onError?.(err)\n }\n}\n","import { ToolError, ErrorCodes } from './errors'\nimport { executeToolCall, createToolLifecycle, createEventEmitter } from './primitives'\nimport type {\n ArgsValidator,\n MaybePromise,\n SkillDefinition,\n ToolCall,\n ToolAuthorizationContext,\n ToolAuthorizer,\n ToolDefinition,\n ToolExecutionContext,\n} from './types'\n\n// --- buildToolMap ---\n\nexport function buildToolMap(\n ...sources: Array<ToolDefinition[] | undefined>\n): Map<string, ToolDefinition> {\n const map = new Map<string, ToolDefinition>()\n for (const source of sources) {\n if (!source) continue\n for (const tool of source) map.set(tool.name, tool)\n }\n return map\n}\n\n// --- activateSkills ---\n\nexport interface ActivateSkillsResult {\n systemPrompt: string | undefined\n skillTools: ToolDefinition[]\n}\n\nexport async function activateSkills(\n skills: SkillDefinition[],\n prompt?: string,\n): Promise<ActivateSkillsResult> {\n if (skills.length === 0) {\n return { systemPrompt: prompt, skillTools: [] }\n }\n\n const prompts = skills.map(s => `--- ${s.name} ---\\n${s.systemPrompt}`)\n const base = prompt ? `${prompt}\\n\\n` : ''\n const system = `${base}${prompts.join('\\n\\n')}`\n\n const tools: ToolDefinition[] = []\n for (const skill of skills) {\n if (skill.onActivate) {\n const a = await skill.onActivate()\n tools.push(...(a.tools ?? []))\n }\n }\n\n return { systemPrompt: system, skillTools: tools }\n}\n\n// --- executeSafeTool ---\n\nexport interface ToolExecResult {\n status: 'complete' | 'error' | 'skipped'\n result?: string\n error?: string\n durationMs: number\n}\n\nexport interface ExecuteSafeToolOptions {\n tool: ToolDefinition | undefined\n toolCall: ToolCall\n context: ToolExecutionContext\n emitter: ReturnType<typeof createEventEmitter>\n lifecycle: ReturnType<typeof createToolLifecycle>\n onPartial?: (result: string) => void\n onConfirm?: (toolCall: ToolCall) => MaybePromise<boolean>\n /** Opt-in arg validation against `tool.schema` (ADR-0008). */\n validate?: ArgsValidator\n authorize?: ToolAuthorizer\n}\n\nexport async function auth(fn: ToolAuthorizer | undefined, call: ToolCall, context: ToolAuthorizationContext): Promise<void> {\n if (!fn) return\n await import('./tool-authorization-internal.js').then(m => m.authorize(fn, call, context))\n}\n\n\nexport async function executeSafeTool(\n options: ExecuteSafeToolOptions,\n): Promise<ToolExecResult> {\n const { tool, toolCall, context, emitter, lifecycle, onPartial, onConfirm, validate, authorize } = options\n const began = Date.now()\n\n // Missing tool\n if (!tool?.execute) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_NOT_FOUND,\n message: `Tool \"${toolCall.name}\" not found or has no execute function`,\n hint: 'Register an executable tool in ChatConfig, e.g. { tools: [myTool] }.',\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n if (validate && tool.schema) {\n const v = validate(tool.schema, toolCall.args)\n if (!v.valid) {\n const err = new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: v.message ?? `Tool \"${toolCall.name}\" received invalid arguments`,\n })\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n }\n\n // Requires confirmation — refuse by default when no approver is configured (RT6)\n if (tool.requiresConfirmation) {\n if (!onConfirm) {\n return {\n status: 'skipped',\n result: 'No confirmation handler',\n durationMs: Date.now() - began,\n }\n }\n const confirmed = await onConfirm(toolCall)\n if (!confirmed) {\n return { status: 'skipped', result: 'Tool execution declined by confirmation handler', durationMs: Date.now() - began }\n }\n }\n\n try {\n await auth(authorize, toolCall, { ...context, tool, phase: 'execute' })\n } catch (error) {\n const err = error as ToolError\n emitter.emit({ type: 'error', error: err })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n\n await lifecycle.init(tool)\n\n emitter.emit({ type: 'tool:start', name: toolCall.name, args: toolCall.args })\n\n try {\n const result = await executeToolCall(\n tool,\n toolCall.args,\n context,\n onPartial,\n )\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result,\n durationMs: Date.now() - began,\n })\n return { status: 'complete', result, durationMs: Date.now() - began }\n } catch (error) {\n const err = error instanceof ToolError\n ? error\n : new ToolError({\n code: ErrorCodes.AK_TOOL_EXEC_FAILED,\n message: `Tool \"${toolCall.name}\" threw during execution: ${error instanceof Error ? error.message : String(error)}`,\n hint: 'Check the tool execute() implementation.',\n cause: error,\n })\n // Emit error before tool:end so trackers can mark the active tool span.\n emitter.emit({ type: 'error', error: err })\n emitter.emit({\n type: 'tool:end',\n name: toolCall.name,\n result: `Error: ${err.message}`,\n durationMs: Date.now() - began,\n })\n return { status: 'error', error: err.toString(), durationMs: Date.now() - began }\n }\n}\n"]}

Sorry, the diff of this file is too big to display