@robota-sdk/agent-tools 3.0.0-beta.65 → 3.0.0-beta.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","names":[],"sources":["../../src/types/tool-result.ts","../../src/registry/tool-registry.ts","../../src/implementations/function-tool/types.ts","../../src/implementations/function-tool.ts","../../src/implementations/openapi-tool.ts","../../src/implementations/function-tool/schema-converter.ts"],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","names":[],"sources":["../../src/types/tool-result.ts","../../src/registry/tool-registry.ts","../../src/implementations/function-tool/types.ts","../../src/implementations/function-tool.ts","../../src/implementations/openapi-tool.ts","../../src/implementations/function-tool/schema-converter.ts"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{ToolExecutionError as e,ValidationError as t,logger as n}from"@robota-sdk/agent-core";var r=class{tools=new Map;register(e){if(!e.schema?.name)throw new t(`Tool must have a valid schema with name`);let r=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(r)&&n.warn(`Tool "${r}" is already registered, overriding`,{toolName:r,existingTool:this.tools.get(r)?.constructor.name}),this.tools.set(r,e),n.debug(`Tool "${r}" registered successfully`,{toolName:r,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){n.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),n.debug(`Tool "${e}" unregistered successfully`)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return n.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),n.debug(`Cleared ${e} tools from registry`)}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e==`string`?new RegExp(e):e;return this.getAll().filter(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new t(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new t(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new t(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new t(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let n of Object.keys(e.parameters.properties)){let r=e.parameters.properties[n];if(!r?.type)throw new t(`Parameter "${n}" must have a type`);if(![`string`,`number`,`boolean`,`array`,`object`].includes(r.type))throw new t(`Parameter "${n}" has invalid type "${r.type}"`)}if(e.parameters.required){let n=e.parameters.properties||{};for(let r of e.parameters.required)if(!n[r])throw new t(`Required parameter "${r}" is not defined in properties`)}}};function i(e,t={}){let n={},r=[],i=e._def;if(!i)throw Error(`Zod schema is missing _def; cannot convert to JSON schema.`);if(i.typeName===`ZodObject`&&i.shape){let e=typeof i.shape==`function`?i.shape():i.shape;for(let[t,i]of Object.entries(e))n[t]=a(i),o(i)&&r.push(t)}return{type:`object`,properties:n,required:r,...(t.allowAdditionalProperties||i.unknownKeys===`passthrough`)&&{additionalProperties:!0}}}function a(e){let t=e._def;if(!t)throw Error(`Zod type is missing _def; cannot convert to JSON schema.`);let n={};switch(t.description&&(n.description=t.description),t.typeName){case`ZodString`:return{type:`string`,...n};case`ZodNumber`:return{type:`number`,...n};case`ZodBoolean`:return{type:`boolean`,...n};case`ZodArray`:if(!t.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:a(t.type),...n};case`ZodObject`:return{type:`object`,...n};case`ZodEnum`:{let e=t.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...n}}case`ZodOptional`:if(t.innerType)return{...a(t.innerType),...n};throw Error(`ZodOptional is missing innerType; cannot convert to JSON schema.`);case`ZodNullable`:if(t.innerType)return{...a(t.innerType),...n};throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);case`ZodDefault`:if(t.innerType)return{...a(t.innerType),...n};throw Error(`ZodDefault is missing innerType; cannot convert to JSON schema.`);case`ZodRecord`:return t.valueType?{type:`object`,additionalProperties:a(t.valueType),...n}:{type:`object`,additionalProperties:{type:`string`},...n};default:throw Error(`Unsupported Zod type: ${String(t.typeName)}`)}}function o(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);return t.typeName!==`ZodOptional`&&t.typeName!==`ZodNullable`&&t.typeName!==`ZodDefault`}function s(e,t,n){switch(n.type){case`string`:if(typeof t!=`string`)return`Parameter "${e}" must be a string, got ${typeof t}`;break;case`number`:if(typeof t!=`number`||isNaN(t))return`Parameter "${e}" must be a number, got ${typeof t}`;break;case`boolean`:if(typeof t!=`boolean`)return`Parameter "${e}" must be a boolean, got ${typeof t}`;break;case`array`:if(!Array.isArray(t))return`Parameter "${e}" must be an array, got ${typeof t}`;if(n.items)for(let r=0;r<t.length;r++){let i=s(`${e}[${r}]`,t[r],n.items);if(i)return i}break;case`object`:if(typeof t!=`object`||!t||Array.isArray(t))return`Parameter "${e}" must be an object, got ${typeof t}`;break}if(n.enum&&n.enum.length>0){let r=n.enum,i=!1;for(let e of r)if(t===e){i=!0;break}if(!i)return`Parameter "${e}" must be one of: ${r.join(`, `)}, got ${t}`}}function c(e,t,n,r){let i=[];for(let n of t)n in e||i.push(`Missing required parameter: ${n}`);for(let[t,a]of Object.entries(e)){let e=n[t];if(!e){if(r===!0)continue;if(r&&typeof r==`object`){let e=s(t,a,r);e&&i.push(e);continue}i.push(`Unknown parameter: ${t}`);continue}let o=s(t,a,e);o&&i.push(o)}return i}function l(e,t,n,r){let i=c(e,t,n,r);return{isValid:i.length===0,errors:i}}var u=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(n,r){let i=this.schema.name;if(!this.validate(n))throw new t(`Invalid parameters for tool "${i}": ${c(n,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o;try{o=await this.fn(n,r)}catch(a){throw a instanceof e||a instanceof t?a:new e(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,i,a instanceof Error?a:Error(String(a)),{parameterCount:Object.keys(n||{}).length,hasContext:!!r})}let s=Date.now()-a;return{success:!0,data:o,metadata:{executionTime:s,toolName:i,parameters:n}}}validate(e){return c(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return l(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new t(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new t(`Tool function is required and must be a function`);if(!this.schema.name)throw new t(`Tool schema must have a name`)}};function d(e,t,n,r){return new u({name:e,description:t,parameters:n},r)}function f(e,n,r,a){return new u({name:e,description:n,parameters:i(r)},async(e,n)=>{let i=r.safeParse(e);if(!i.success)throw new t(`Zod validation failed: ${i.error}`);let o=await a(i.data||e,n);return typeof o==`string`?o:JSON.stringify(o)})}const p=[`get`,`post`,`put`,`delete`,`patch`,`head`,`options`];function m(e,t){for(let[n,r]of Object.entries(e.paths||{}))if(r)for(let e of p){let i=r[e];if(i?.operationId===t)return{method:e,path:n,operation:i}}}function h(e){switch(e){case`string`:return`string`;case`number`:return`number`;case`integer`:return`integer`;case`boolean`:return`boolean`;case`array`:return`array`;case`object`:return`object`;default:return`string`}}function g(e){if(`$ref`in e)return{type:`object`};let t={type:h(e.type)};if(e.description&&(t.description=e.description),e.enum&&(t.enum=e.enum),e.minimum!==void 0&&(t.minimum=e.minimum),e.maximum!==void 0&&(t.maximum=e.maximum),e.pattern&&(t.pattern=e.pattern),e.format&&(t.format=e.format),e.default!==void 0&&(t.default=e.default),e.type===`array`&&e.items&&(t.items=g(e.items)),e.type===`object`&&e.properties){t.properties={};for(let[n,r]of Object.entries(e.properties))t.properties[n]=g(r);e.required&&e.required.length>0&&(t.required=e.required)}return t}function _(e){let t=e.schema;return g(t)}function v(e,t){let n={},r=[],i=t.parameters||[];for(let e of i)n[e.name]=_(e),e.required&&r.push(e.name);if(t.requestBody){let e=t.requestBody.content?.[`application/json`];if(e?.schema){let t=g(e.schema);if(t.type===`object`&&t.properties){Object.assign(n,t.properties);let e=t;e.required&&r.push(...e.required)}}}let a={type:`object`,properties:n};return r.length>0&&(a.required=r),{name:e,description:t.summary||t.description||`OpenAPI operation: ${e}`,parameters:a}}var y=class{schema;apiSpec;operationId;baseURL;config;eventService;constructor(e){if(this.config=e,typeof e.spec!=`object`||e.spec===null||typeof e.spec.openapi!=`string`||typeof e.spec.paths!=`object`)throw Error(`Invalid OpenAPI spec: must contain "openapi" (string) and "paths" (object) fields`);this.apiSpec=e.spec,this.operationId=e.operationId,this.baseURL=e.baseURL,this.schema=this.createSchemaFromOpenAPI()}async execute(n,r){let i=this.schema.name,a=this.validateParameters(n);if(!a.isValid)throw new t(`Invalid parameters for OpenAPI tool "${i}": ${a.errors.join(`, `)}`);try{let e=Date.now();return{success:!0,data:await this.executeAPICall(n,r),metadata:{executionTime:Date.now()-e,toolName:i,operationId:this.operationId,baseURL:this.baseURL}}}catch(r){if(r instanceof e||r instanceof t)throw r;let a=r instanceof Error?r:Error(String(r));throw new e(`OpenAPI tool execution failed: ${a.message}`,i,a,{operationId:this.operationId,baseURL:this.baseURL,parametersCount:Object.keys(n).length})}}validate(e){return this.validateParameters(e).isValid}validateParameters(e){let t=this.schema.parameters.required||[],n=[];for(let r of t)r in e||n.push(`Missing required parameter: ${r}`);return{isValid:n.length===0,errors:n}}getName(){return this.schema.name}setEventService(e){this.eventService=e}getDescription(){return this.schema.description}async executeAPICall(e,t){let n=m(this.apiSpec,this.operationId);throw n?(this.buildRequestConfig(n,e),Error(`Not implemented: actual API execution is not yet available`)):Error(`Operation ${this.operationId} not found in OpenAPI spec`)}buildRequestConfig(e,t){let{method:n,path:r,operation:i}=e,a=this.baseURL+r,o={},s,c=i.parameters||[];for(let e of c){let n=t[e.name];if(n===void 0&&e.required)throw Error(`Required parameter ${e.name} is missing`);if(n!==void 0)switch(e.in){case`path`:a=a.replace(`{${e.name}}`,encodeURIComponent(String(n)));break;case`query`:{let t=a.includes(`?`)?`&`:`?`;a+=`${t}${e.name}=${encodeURIComponent(String(n))}`;break}case`header`:o[e.name]=String(n);break}}if([`post`,`put`,`patch`].includes(n)&&i.requestBody&&i.requestBody.content?.[`application/json`]){o[`Content-Type`]=`application/json`;let e={};for(let[n,r]of Object.entries(t))c.some(e=>e.name===n)||(e[n]=r);s=JSON.stringify(e)}if(this.config.auth)switch(this.config.auth.type){case`bearer`:o.Authorization=`Bearer ${this.config.auth.token}`;break;case`apiKey`:{let e=this.config.auth.header||`X-API-Key`;o[e]=this.config.auth.apiKey||``;break}}let l={method:n,url:a,headers:o};return s!==void 0&&(l.body=s),l}createSchemaFromOpenAPI(){let e=m(this.apiSpec,this.operationId);if(!e)throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] OpenAPI operation not found: ${this.operationId}. Emitter contract must provide a valid operationId present in the OpenAPI document.`);return v(this.operationId,e.operation)}};function b(e){return new y(e)}export{u as FunctionTool,y as OpenAPITool,r as ToolRegistry,d as createFunctionTool,b as createOpenAPITool,f as createZodFunctionTool,i as zodToJsonSchema};
1
+ import{ToolExecutionError as e,ValidationError as t,logger as n}from"@robota-sdk/agent-core";var r=class{tools=new Map;register(e){if(!e.schema?.name)throw new t(`Tool must have a valid schema with name`);let r=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(r)&&n.warn(`Tool "${r}" is already registered, overriding`,{toolName:r,existingTool:this.tools.get(r)?.constructor.name}),this.tools.set(r,e),n.debug(`Tool "${r}" registered successfully`,{toolName:r,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){n.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),n.debug(`Tool "${e}" unregistered successfully`)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return n.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),n.debug(`Cleared ${e} tools from registry`)}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e==`string`?new RegExp(e):e;return this.getAll().filter(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new t(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new t(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new t(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new t(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let n of Object.keys(e.parameters.properties)){let r=e.parameters.properties[n];if(!r?.type)throw new t(`Parameter "${n}" must have a type`);if(![`string`,`number`,`boolean`,`array`,`object`].includes(r.type))throw new t(`Parameter "${n}" has invalid type "${r.type}"`)}if(e.parameters.required){let n=e.parameters.properties||{};for(let r of e.parameters.required)if(!n[r])throw new t(`Required parameter "${r}" is not defined in properties`)}}};function i(e,t,n){switch(n.type){case`string`:if(typeof t!=`string`)return`Parameter "${e}" must be a string, got ${typeof t}`;break;case`number`:if(typeof t!=`number`||isNaN(t))return`Parameter "${e}" must be a number, got ${typeof t}`;break;case`boolean`:if(typeof t!=`boolean`)return`Parameter "${e}" must be a boolean, got ${typeof t}`;break;case`array`:if(!Array.isArray(t))return`Parameter "${e}" must be an array, got ${typeof t}`;if(n.items)for(let r=0;r<t.length;r++){let a=i(`${e}[${r}]`,t[r],n.items);if(a)return a}break;case`object`:if(typeof t!=`object`||!t||Array.isArray(t))return`Parameter "${e}" must be an object, got ${typeof t}`;break}if(n.enum&&n.enum.length>0){let r=n.enum,i=!1;for(let e of r)if(t===e){i=!0;break}if(!i)return`Parameter "${e}" must be one of: ${r.join(`, `)}, got ${t}`}}function a(e,t,n,r){let a=[];for(let n of t)n in e||a.push(`Missing required parameter: ${n}`);for(let[t,o]of Object.entries(e)){let e=n[t];if(!e){if(r===!0)continue;if(r&&typeof r==`object`){let e=i(t,o,r);e&&a.push(e);continue}a.push(`Unknown parameter: ${t}`);continue}let s=i(t,o,e);s&&a.push(s)}return a}function o(e,t,n,r){let i=a(e,t,n,r);return{isValid:i.length===0,errors:i}}function s(e,t={}){let n={},r=[],i=e._def;if(!i)throw Error(`Zod schema is missing _def; cannot convert to JSON schema.`);if(i.typeName===`ZodObject`&&i.shape){let e=typeof i.shape==`function`?i.shape():i.shape;for(let[t,i]of Object.entries(e))n[t]=c(i),l(i)&&r.push(t)}return{type:`object`,properties:n,required:r,...(t.allowAdditionalProperties||i.unknownKeys===`passthrough`)&&{additionalProperties:!0}}}function c(e){let t=e._def;if(!t)throw Error(`Zod type is missing _def; cannot convert to JSON schema.`);let n={};switch(t.description&&(n.description=t.description),t.typeName){case`ZodString`:return{type:`string`,...n};case`ZodNumber`:return{type:`number`,...n};case`ZodBoolean`:return{type:`boolean`,...n};case`ZodArray`:if(!t.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:c(t.type),...n};case`ZodObject`:return{type:`object`,...n};case`ZodEnum`:{let e=t.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...n}}case`ZodOptional`:if(t.innerType)return{...c(t.innerType),...n};throw Error(`ZodOptional is missing innerType; cannot convert to JSON schema.`);case`ZodNullable`:if(t.innerType)return{...c(t.innerType),...n};throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);case`ZodDefault`:if(t.innerType)return{...c(t.innerType),...n};throw Error(`ZodDefault is missing innerType; cannot convert to JSON schema.`);case`ZodRecord`:return t.valueType?{type:`object`,additionalProperties:c(t.valueType),...n}:{type:`object`,additionalProperties:{type:`string`},...n};default:throw Error(`Unsupported Zod type: ${String(t.typeName)}`)}}function l(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);return t.typeName!==`ZodOptional`&&t.typeName!==`ZodNullable`&&t.typeName!==`ZodDefault`}var u=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(n,r){let i=this.schema.name;if(!this.validate(n))throw new t(`Invalid parameters for tool "${i}": ${a(n,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let o=Date.now(),s;try{s=await this.fn(n,r)}catch(a){throw a instanceof e||a instanceof t?a:new e(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,i,a instanceof Error?a:Error(String(a)),{parameterCount:Object.keys(n||{}).length,hasContext:!!r})}let c=Date.now()-o;return{success:!0,data:s,metadata:{executionTime:c,toolName:i,parameters:n}}}validate(e){return a(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return o(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new t(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new t(`Tool function is required and must be a function`);if(!this.schema.name)throw new t(`Tool schema must have a name`)}};function d(e,t,n,r){return new u({name:e,description:t,parameters:n},r)}function f(e,n,r,i){return new u({name:e,description:n,parameters:s(r)},async(e,n)=>{let a=r.safeParse(e);if(!a.success)throw new t(`Zod validation failed: ${a.error}`);let o=await i(a.data||e,n);return typeof o==`string`?o:JSON.stringify(o)})}const p=[`get`,`post`,`put`,`delete`,`patch`,`head`,`options`];function m(e,t){for(let[n,r]of Object.entries(e.paths||{}))if(r)for(let e of p){let i=r[e];if(i?.operationId===t)return{method:e,path:n,operation:i}}}function h(e){switch(e){case`string`:return`string`;case`number`:return`number`;case`integer`:return`integer`;case`boolean`:return`boolean`;case`array`:return`array`;case`object`:return`object`;default:return`string`}}function g(e){if(`$ref`in e)return{type:`object`};let t={type:h(e.type)};if(e.description&&(t.description=e.description),e.enum&&(t.enum=e.enum),e.minimum!==void 0&&(t.minimum=e.minimum),e.maximum!==void 0&&(t.maximum=e.maximum),e.pattern&&(t.pattern=e.pattern),e.format&&(t.format=e.format),e.default!==void 0&&(t.default=e.default),e.type===`array`&&e.items&&(t.items=g(e.items)),e.type===`object`&&e.properties){t.properties={};for(let[n,r]of Object.entries(e.properties))t.properties[n]=g(r);e.required&&e.required.length>0&&(t.required=e.required)}return t}function _(e){let t=e.schema;return g(t)}function v(e,t){let n={},r=[],i=t.parameters||[];for(let e of i)n[e.name]=_(e),e.required&&r.push(e.name);if(t.requestBody){let e=t.requestBody.content?.[`application/json`];if(e?.schema){let t=g(e.schema);if(t.type===`object`&&t.properties){Object.assign(n,t.properties);let e=t;e.required&&r.push(...e.required)}}}let a={type:`object`,properties:n};return r.length>0&&(a.required=r),{name:e,description:t.summary||t.description||`OpenAPI operation: ${e}`,parameters:a}}var y=class{schema;apiSpec;operationId;baseURL;config;eventService;constructor(e){if(this.config=e,typeof e.spec!=`object`||e.spec===null||typeof e.spec.openapi!=`string`||typeof e.spec.paths!=`object`)throw Error(`Invalid OpenAPI spec: must contain "openapi" (string) and "paths" (object) fields`);this.apiSpec=e.spec,this.operationId=e.operationId,this.baseURL=e.baseURL,this.schema=this.createSchemaFromOpenAPI()}async execute(n,r){let i=this.schema.name,a=this.validateParameters(n);if(!a.isValid)throw new t(`Invalid parameters for OpenAPI tool "${i}": ${a.errors.join(`, `)}`);try{let e=Date.now();return{success:!0,data:await this.executeAPICall(n,r),metadata:{executionTime:Date.now()-e,toolName:i,operationId:this.operationId,baseURL:this.baseURL}}}catch(r){if(r instanceof e||r instanceof t)throw r;let a=r instanceof Error?r:Error(String(r));throw new e(`OpenAPI tool execution failed: ${a.message}`,i,a,{operationId:this.operationId,baseURL:this.baseURL,parametersCount:Object.keys(n).length})}}validate(e){return this.validateParameters(e).isValid}validateParameters(e){let t=this.schema.parameters.required||[],n=[];for(let r of t)r in e||n.push(`Missing required parameter: ${r}`);return{isValid:n.length===0,errors:n}}getName(){return this.schema.name}setEventService(e){this.eventService=e}getDescription(){return this.schema.description}async executeAPICall(e,t){let n=m(this.apiSpec,this.operationId);throw n?(this.buildRequestConfig(n,e),Error(`Not implemented: actual API execution is not yet available`)):Error(`Operation ${this.operationId} not found in OpenAPI spec`)}buildRequestConfig(e,t){let{method:n,path:r,operation:i}=e,a=this.baseURL+r,o={},s,c=i.parameters||[];for(let e of c){let n=t[e.name];if(n===void 0&&e.required)throw Error(`Required parameter ${e.name} is missing`);if(n!==void 0)switch(e.in){case`path`:a=a.replace(`{${e.name}}`,encodeURIComponent(String(n)));break;case`query`:{let t=a.includes(`?`)?`&`:`?`;a+=`${t}${e.name}=${encodeURIComponent(String(n))}`;break}case`header`:o[e.name]=String(n);break}}if([`post`,`put`,`patch`].includes(n)&&i.requestBody&&i.requestBody.content?.[`application/json`]){o[`Content-Type`]=`application/json`;let e={};for(let[n,r]of Object.entries(t))c.some(e=>e.name===n)||(e[n]=r);s=JSON.stringify(e)}if(this.config.auth)switch(this.config.auth.type){case`bearer`:o.Authorization=`Bearer ${this.config.auth.token}`;break;case`apiKey`:{let e=this.config.auth.header||`X-API-Key`;o[e]=this.config.auth.apiKey||``;break}}let l={method:n,url:a,headers:o};return s!==void 0&&(l.body=s),l}createSchemaFromOpenAPI(){let e=m(this.apiSpec,this.operationId);if(!e)throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] OpenAPI operation not found: ${this.operationId}. Emitter contract must provide a valid operationId present in the OpenAPI document.`);return v(this.operationId,e.operation)}};function b(e){return new y(e)}export{u as FunctionTool,y as OpenAPITool,r as ToolRegistry,d as createFunctionTool,b as createOpenAPITool,f as createZodFunctionTool,s as zodToJsonSchema};
2
2
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","names":[],"sources":["../../src/registry/tool-registry.ts","../../src/implementations/function-tool/schema-converter.ts","../../src/implementations/function-tool/parameter-validator.ts","../../src/implementations/function-tool.ts","../../src/implementations/openapi-schema-converter.ts","../../src/implementations/openapi-tool.ts"],"sourcesContent":["import type { ITool, IToolRegistry } from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\nimport { ValidationError } from '@robota-sdk/agent-core';\nimport { logger } from '@robota-sdk/agent-core';\n\n/**\n * Tool registry implementation\n * Manages tool registration, validation, and retrieval\n */\nexport class ToolRegistry implements IToolRegistry {\n private tools = new Map<string, ITool>();\n\n /**\n * Register a tool\n */\n register(tool: ITool): void {\n if (!tool.schema?.name) {\n throw new ValidationError('Tool must have a valid schema with name');\n }\n\n const toolName = tool.schema.name;\n\n // Validate tool schema\n this.validateToolSchema(tool.schema);\n\n // Check for duplicate registration\n if (this.tools.has(toolName)) {\n logger.warn(`Tool \"${toolName}\" is already registered, overriding`, {\n toolName,\n existingTool: this.tools.get(toolName)?.constructor.name,\n });\n }\n\n this.tools.set(toolName, tool);\n logger.debug(`Tool \"${toolName}\" registered successfully`, {\n toolName,\n toolType: tool.constructor.name,\n parameters: Object.keys(tool.schema.parameters?.properties || {}),\n });\n }\n\n /**\n * Unregister a tool\n */\n unregister(name: string): void {\n if (!this.tools.has(name)) {\n logger.warn(`Attempted to unregister non-existent tool \"${name}\"`);\n return;\n }\n\n this.tools.delete(name);\n logger.debug(`Tool \"${name}\" unregistered successfully`);\n }\n\n /**\n * Get tool by name\n */\n get(name: string): ITool | undefined {\n return this.tools.get(name);\n }\n\n /**\n * Get all registered tools\n */\n getAll(): ITool[] {\n return Array.from(this.tools.values());\n }\n\n /**\n * Get tool schemas\n */\n getSchemas(): IToolSchema[] {\n const tools = this.getAll();\n\n // 🔍 [TOOL-FLOW] ToolRegistry.getSchemas() - Extracting schemas from tools\n logger.debug('[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction', {\n count: tools.length,\n tools: tools.map((t) => ({\n name: t.schema?.name ?? 'unnamed',\n hasSchema: !!t.schema,\n schemaType: typeof t.schema,\n toolType: t.constructor?.name || 'unknown',\n })),\n });\n\n return this.getAll().map((tool) => tool.schema);\n }\n\n /**\n * Check if tool exists\n */\n has(name: string): boolean {\n return this.tools.has(name);\n }\n\n /**\n * Clear all tools\n */\n clear(): void {\n const toolCount = this.tools.size;\n this.tools.clear();\n logger.debug(`Cleared ${toolCount} tools from registry`);\n }\n\n /**\n * Get tool names\n */\n getToolNames(): string[] {\n return Array.from(this.tools.keys());\n }\n\n /**\n * Get tools by pattern\n */\n getToolsByPattern(pattern: string | RegExp): ITool[] {\n const regex = typeof pattern === 'string' ? new RegExp(pattern) : pattern;\n return this.getAll().filter((tool) => regex.test(tool.schema.name));\n }\n\n /**\n * Get tool count\n */\n size(): number {\n return this.tools.size;\n }\n\n /**\n * Validate tool schema\n */\n private validateToolSchema(schema: IToolSchema): void {\n if (!schema.name || typeof schema.name !== 'string') {\n throw new ValidationError('Tool schema must have a valid name');\n }\n\n if (!schema.description || typeof schema.description !== 'string') {\n throw new ValidationError('Tool schema must have a description');\n }\n\n if (\n !schema.parameters ||\n typeof schema.parameters !== 'object' ||\n schema.parameters === null ||\n Array.isArray(schema.parameters)\n ) {\n throw new ValidationError('Tool schema must have parameters object');\n }\n\n if (schema.parameters.type !== 'object') {\n throw new ValidationError('Tool parameters type must be \"object\"');\n }\n\n // Validate parameter properties\n if (schema.parameters.properties) {\n for (const propName of Object.keys(schema.parameters.properties)) {\n const propSchema = schema.parameters.properties[propName];\n if (!propSchema?.type) {\n throw new ValidationError(`Parameter \"${propName}\" must have a type`);\n }\n\n const validTypes = ['string', 'number', 'boolean', 'array', 'object'];\n if (!validTypes.includes(propSchema.type)) {\n throw new ValidationError(\n `Parameter \"${propName}\" has invalid type \"${propSchema.type}\"`,\n );\n }\n }\n }\n\n // Validate required fields exist in properties\n if (schema.parameters.required) {\n const properties = schema.parameters.properties || {};\n for (const requiredField of schema.parameters.required) {\n if (!properties[requiredField]) {\n throw new ValidationError(\n `Required parameter \"${requiredField}\" is not defined in properties`,\n );\n }\n }\n }\n }\n}\n","/**\n * FunctionTool - Schema conversion utilities for Facade pattern\n *\n * REASON: Complex Zod to JSON schema conversion requires isolated utility functions\n * ALTERNATIVES_CONSIDERED:\n * 1. Keep conversion logic in main class (violates single responsibility)\n * 2. Use third-party library (adds external dependency)\n * 3. Manual conversion each time (code duplication)\n * 4. Runtime type checking only (loses compile-time safety)\n * 5. Remove Zod support (breaks backward compatibility)\n * TODO: Consider caching conversion results for performance\n */\n\nimport type {\n IToolSchema,\n IParameterSchema,\n TJSONSchemaEnum,\n TUniversalValue,\n} from '@robota-sdk/agent-core';\nimport type { IZodSchema, ISchemaConversionOptions } from './types';\n\n/**\n * Convert Zod schema to JSON Schema format with safe undefined handling\n */\nexport function zodToJsonSchema(\n schema: IZodSchema,\n options: ISchemaConversionOptions = {},\n): IToolSchema['parameters'] {\n const properties: Record<string, IParameterSchema> = {};\n const required: string[] = [];\n\n // Safe access to schema definition (no fallback).\n const schemaDef = schema._def;\n if (!schemaDef) {\n throw new Error('Zod schema is missing _def; cannot convert to JSON schema.');\n }\n\n // Handle object schemas with shape\n if (schemaDef.typeName === 'ZodObject' && schemaDef.shape) {\n // In Zod v3, shape is a property, not a function\n const shape = typeof schemaDef.shape === 'function' ? schemaDef.shape() : schemaDef.shape;\n\n for (const [key, typeObj] of Object.entries(shape)) {\n const property = convertZodTypeToProperty(typeObj);\n properties[key] = property;\n\n // Check if field is required (not optional/nullable)\n if (isRequiredField(typeObj)) {\n required.push(key);\n }\n }\n }\n\n return {\n type: 'object',\n properties,\n required,\n ...((options.allowAdditionalProperties || schemaDef.unknownKeys === 'passthrough') && {\n additionalProperties: true,\n }),\n };\n}\n\n/**\n * Convert individual Zod type to parameter schema with safe undefined handling\n */\nfunction convertZodTypeToProperty(typeObj: IZodSchema): IParameterSchema {\n // Safe access to type definition\n const typeDef = typeObj._def;\n if (!typeDef) {\n throw new Error('Zod type is missing _def; cannot convert to JSON schema.');\n }\n\n const base: Partial<IParameterSchema> = {};\n\n // Add description if available\n if (typeDef.description) {\n base.description = typeDef.description;\n }\n\n // Handle different Zod types\n switch (typeDef.typeName) {\n case 'ZodString':\n return { type: 'string', ...base };\n\n case 'ZodNumber':\n return { type: 'number', ...base };\n\n case 'ZodBoolean':\n return { type: 'boolean', ...base };\n\n case 'ZodArray': {\n if (!typeDef.type) {\n throw new Error('ZodArray is missing item type; cannot convert to JSON schema.');\n }\n const arrayItems = convertZodTypeToProperty(typeDef.type);\n return {\n type: 'array',\n items: arrayItems,\n ...base,\n };\n }\n\n case 'ZodObject':\n return { type: 'object', ...base };\n\n case 'ZodEnum': {\n const enumValues = typeDef.values;\n if (!enumValues || !Array.isArray(enumValues)) {\n throw new Error('ZodEnum is missing enum values; cannot convert to JSON schema.');\n }\n return {\n type: 'string',\n enum: enumValues as TJSONSchemaEnum,\n ...base,\n };\n }\n\n case 'ZodOptional':\n // Handle optional types by recursion\n if (typeDef.innerType) {\n const innerProperty = convertZodTypeToProperty(typeDef.innerType);\n return { ...innerProperty, ...base };\n }\n throw new Error('ZodOptional is missing innerType; cannot convert to JSON schema.');\n\n case 'ZodNullable':\n // Handle nullable types\n if (typeDef.innerType) {\n const innerProperty = convertZodTypeToProperty(typeDef.innerType);\n return { ...innerProperty, ...base };\n }\n throw new Error('ZodNullable is missing innerType; cannot convert to JSON schema.');\n\n case 'ZodDefault':\n // Handle default values by processing the inner type\n if (typeDef.innerType) {\n const innerProperty = convertZodTypeToProperty(typeDef.innerType);\n return { ...innerProperty, ...base };\n }\n throw new Error('ZodDefault is missing innerType; cannot convert to JSON schema.');\n\n case 'ZodRecord':\n // Handle Record<string, T> → JSON Schema additionalProperties\n if (typeDef.valueType) {\n const valueProperty = convertZodTypeToProperty(typeDef.valueType);\n return { type: 'object', additionalProperties: valueProperty, ...base };\n }\n return { type: 'object', additionalProperties: { type: 'string' }, ...base };\n\n default:\n throw new Error(`Unsupported Zod type: ${String(typeDef.typeName)}`);\n }\n}\n\n/**\n * Check if a Zod field is required (not optional or nullable)\n */\nfunction isRequiredField(typeObj: IZodSchema): boolean {\n const typeDef = typeObj._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot determine required fields.');\n }\n\n // Field is optional if it's ZodOptional, ZodNullable, or ZodDefault\n return (\n typeDef.typeName !== 'ZodOptional' &&\n typeDef.typeName !== 'ZodNullable' &&\n typeDef.typeName !== 'ZodDefault'\n );\n}\n\n/**\n * Safely extract enum values from Zod schema\n */\nexport function extractEnumValues(schema: IZodSchema): TUniversalValue[] {\n const typeDef = schema._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot extract enum values.');\n }\n if (!typeDef.values || !Array.isArray(typeDef.values)) {\n throw new Error('ZodEnum schema is missing enum values; cannot extract enum values.');\n }\n return typeDef.values;\n}\n\n/**\n * Check if schema has validation constraints\n */\nexport function hasValidationConstraints(schema: IZodSchema): boolean {\n const typeDef = schema._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot determine validation constraints.');\n }\n\n return !!(typeDef.checks && typeDef.checks.length > 0);\n}\n\n/**\n * Safe schema type name extraction\n */\nexport function getSchemaTypeName(schema: IZodSchema): string {\n const typeDef = schema._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot determine schema type name.');\n }\n if (!typeDef.typeName) {\n throw new Error('Zod schema has empty typeName; cannot determine schema type name.');\n }\n return typeDef.typeName;\n}\n","import type {\n IParameterSchema,\n TToolParameters,\n IParameterValidationResult,\n} from '@robota-sdk/agent-core';\nimport type { TUniversalValue } from '@robota-sdk/agent-core';\n\n/**\n * Validate individual parameter type against its schema.\n * Returns an error string if invalid, undefined if valid.\n */\nexport function validateParameterType(\n key: string,\n value: TUniversalValue,\n schema: IParameterSchema,\n): string | undefined {\n const expectedType = schema['type'];\n\n switch (expectedType) {\n case 'string':\n if (typeof value !== 'string') {\n return `Parameter \"${key}\" must be a string, got ${typeof value}`;\n }\n break;\n\n case 'number':\n if (typeof value !== 'number' || isNaN(value)) {\n return `Parameter \"${key}\" must be a number, got ${typeof value}`;\n }\n break;\n\n case 'boolean':\n if (typeof value !== 'boolean') {\n return `Parameter \"${key}\" must be a boolean, got ${typeof value}`;\n }\n break;\n\n case 'array':\n if (!Array.isArray(value)) {\n return `Parameter \"${key}\" must be an array, got ${typeof value}`;\n }\n // Check array items if specified\n if (schema.items) {\n for (let i = 0; i < value.length; i++) {\n const itemError = validateParameterType(`${key}[${i}]`, value[i], schema.items);\n if (itemError) {\n return itemError;\n }\n }\n }\n break;\n\n case 'object':\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return `Parameter \"${key}\" must be an object, got ${typeof value}`;\n }\n break;\n }\n\n // Check enum constraints\n if (schema.enum && schema.enum.length > 0) {\n const enumValues = schema.enum;\n let isValidEnum = false;\n\n // Type-safe enum checking based on JSONSchemaEnum type\n for (const enumValue of enumValues) {\n if (value === enumValue) {\n isValidEnum = true;\n break;\n }\n }\n\n if (!isValidEnum) {\n return `Parameter \"${key}\" must be one of: ${enumValues.join(', ')}, got ${value}`;\n }\n }\n\n return undefined;\n}\n\n/**\n * Collect all validation errors for the given parameters against a schema.\n */\nexport function getValidationErrors(\n parameters: TToolParameters,\n schemaRequired: string[],\n schemaProperties: Record<string, IParameterSchema>,\n additionalProperties?: boolean | IParameterSchema,\n): string[] {\n const errors: string[] = [];\n\n // Check required parameters\n for (const field of schemaRequired) {\n if (!(field in parameters)) {\n errors.push(`Missing required parameter: ${field}`);\n }\n }\n\n // Check parameter types and constraints\n for (const [key, value] of Object.entries(parameters)) {\n const paramSchema = schemaProperties[key];\n if (!paramSchema) {\n if (additionalProperties === true) {\n continue;\n }\n if (additionalProperties && typeof additionalProperties === 'object') {\n const additionalTypeError = validateParameterType(key, value, additionalProperties);\n if (additionalTypeError) errors.push(additionalTypeError);\n continue;\n }\n errors.push(`Unknown parameter: ${key}`);\n continue;\n }\n\n const typeError = validateParameterType(key, value, paramSchema);\n if (typeError) {\n errors.push(typeError);\n }\n }\n\n return errors;\n}\n\n/**\n * Validate parameters and return a structured result.\n */\nexport function validateToolParameters(\n parameters: TToolParameters,\n schemaRequired: string[],\n schemaProperties: Record<string, IParameterSchema>,\n additionalProperties?: boolean | IParameterSchema,\n): IParameterValidationResult {\n const errors = getValidationErrors(\n parameters,\n schemaRequired,\n schemaProperties,\n additionalProperties,\n );\n return {\n isValid: errors.length === 0,\n errors,\n };\n}\n","import type {\n IFunctionTool,\n IToolResult,\n IToolExecutionContext,\n IParameterValidationResult,\n TToolExecutor,\n TToolParameters,\n IEventService,\n} from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\nimport { ToolExecutionError, ValidationError } from '@robota-sdk/agent-core';\nimport type { TUniversalValue } from '@robota-sdk/agent-core';\n\n// Import from Facade pattern modules for type safety\nimport type { IZodSchema } from './function-tool/types';\nimport { zodToJsonSchema } from './function-tool/schema-converter';\nimport { getValidationErrors, validateToolParameters } from './function-tool/parameter-validator';\n\n/**\n * Function tool implementation\n * Wraps a JavaScript function as a tool with schema validation\n *\n * Implements IFunctionTool without extending AbstractTool to avoid\n * circular runtime dependency (tools → agents → tools).\n */\nexport class FunctionTool implements IFunctionTool {\n readonly schema: IToolSchema;\n readonly fn: TToolExecutor;\n private eventService: IEventService | undefined;\n\n constructor(schema: IToolSchema, fn: TToolExecutor) {\n this.schema = schema;\n this.fn = fn;\n this.validateConstructorInputs();\n }\n\n /**\n * Get tool name\n */\n getName(): string {\n return this.schema.name;\n }\n\n /**\n * Set EventService for post-construction injection.\n * Accepts EventService as-is without transformation.\n * Caller is responsible for providing properly configured EventService.\n */\n setEventService(eventService: IEventService | undefined): void {\n this.eventService = eventService;\n }\n\n /**\n * Execute the function tool\n */\n async execute(\n parameters: TToolParameters,\n context?: IToolExecutionContext,\n ): Promise<IToolResult> {\n const toolName = this.schema.name;\n\n // Validate parameters before execution\n if (!this.validate(parameters)) {\n const errors = getValidationErrors(\n parameters,\n this.schema.parameters.required || [],\n this.schema.parameters.properties || {},\n this.schema.parameters.additionalProperties,\n );\n throw new ValidationError(`Invalid parameters for tool \"${toolName}\": ${errors.join(', ')}`);\n }\n\n // Execute the function\n const startTime = Date.now();\n let result: TUniversalValue;\n try {\n result = await this.fn(parameters, context);\n } catch (error) {\n if (error instanceof ToolExecutionError || error instanceof ValidationError) {\n throw error;\n }\n\n throw new ToolExecutionError(\n `Function tool execution failed: ${error instanceof Error ? error.message : String(error)}`,\n toolName,\n error instanceof Error ? error : new Error(String(error)),\n {\n parameterCount: Object.keys(parameters || {}).length,\n hasContext: !!context,\n },\n );\n }\n\n const executionTime = Date.now() - startTime;\n\n return {\n success: true,\n data: result,\n metadata: {\n executionTime,\n toolName,\n parameters,\n },\n };\n }\n\n /**\n * Validate parameters (simple boolean result)\n */\n validate(parameters: TToolParameters): boolean {\n return (\n getValidationErrors(\n parameters,\n this.schema.parameters.required || [],\n this.schema.parameters.properties || {},\n this.schema.parameters.additionalProperties,\n ).length === 0\n );\n }\n\n /**\n * Validate tool parameters with detailed result\n */\n validateParameters(parameters: TToolParameters): IParameterValidationResult {\n return validateToolParameters(\n parameters,\n this.schema.parameters.required || [],\n this.schema.parameters.properties || {},\n this.schema.parameters.additionalProperties,\n );\n }\n\n /**\n * Get tool description\n */\n getDescription(): string {\n return this.schema.description;\n }\n\n /**\n * Validate constructor inputs\n */\n private validateConstructorInputs(): void {\n if (!this.schema) {\n throw new ValidationError('Tool schema is required');\n }\n\n if (!this.fn || typeof this.fn !== 'function') {\n throw new ValidationError('Tool function is required and must be a function');\n }\n\n if (!this.schema.name) {\n throw new ValidationError('Tool schema must have a name');\n }\n }\n}\n\n/**\n * Helper function to create a function tool from a simple function\n */\nexport function createFunctionTool(\n name: string,\n description: string,\n parameters: IToolSchema['parameters'],\n fn: TToolExecutor,\n): FunctionTool {\n const schema: IToolSchema = {\n name,\n description,\n parameters,\n };\n\n return new FunctionTool(schema, fn);\n}\n\n/**\n * Helper function to create a function tool from Zod schema\n */\nexport function createZodFunctionTool(\n name: string,\n description: string,\n zodSchema: IZodSchema,\n fn: TToolExecutor,\n): FunctionTool {\n // Use comprehensive Zod to JSON schema conversion\n const parameters = zodToJsonSchema(zodSchema);\n\n const schema: IToolSchema = {\n name,\n description,\n parameters,\n };\n\n // Wrap the function with validation and ensure proper parameter handling\n const wrappedFn: TToolExecutor = async (\n parameters: TToolParameters,\n context?: IToolExecutionContext,\n ): Promise<TUniversalValue> => {\n // Use Zod for runtime validation\n const parseResult = zodSchema.safeParse(parameters);\n if (!parseResult.success) {\n throw new ValidationError(`Zod validation failed: ${parseResult.error}`);\n }\n\n const result = await fn((parseResult.data as TToolParameters) || parameters, context);\n // Ensure result is always a string for consistency with core package\n return typeof result === 'string' ? result : JSON.stringify(result);\n };\n\n return new FunctionTool(schema, wrappedFn);\n}\n\n// zodToJsonSchema function moved to Facade pattern schema-converter module\n","import type { IParameterSchema } from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\nimport type { OpenAPIV3 } from 'openapi-types';\n\n/**\n * OpenAPI operation method types\n */\nexport type THTTPMethod = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head' | 'options';\n\n/**\n * HTTP methods to search when scanning OpenAPI paths\n */\nexport const HTTP_METHODS: THTTPMethod[] = [\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n];\n\n/**\n * Find an operation in the OpenAPI spec by operationId\n */\nexport function findOperation(\n apiSpec: OpenAPIV3.Document,\n operationId: string,\n): { method: THTTPMethod; path: string; operation: OpenAPIV3.OperationObject } | undefined {\n for (const [path, pathItem] of Object.entries(apiSpec.paths || {})) {\n if (!pathItem) continue;\n\n for (const method of HTTP_METHODS) {\n const operation = (pathItem as Record<string, OpenAPIV3.OperationObject | undefined>)[method];\n if (operation?.operationId === operationId) {\n return { method, path, operation };\n }\n }\n }\n return undefined;\n}\n\n/**\n * Map OpenAPI type to JSON schema type\n */\nexport function mapOpenAPIType(type: string | undefined): IParameterSchema['type'] {\n switch (type) {\n case 'string':\n return 'string';\n case 'number':\n return 'number';\n case 'integer':\n return 'integer';\n case 'boolean':\n return 'boolean';\n case 'array':\n return 'array';\n case 'object':\n return 'object';\n default:\n return 'string';\n }\n}\n\n/**\n * Convert OpenAPI schema to parameter schema\n */\nexport function convertOpenAPISchemaToParameterSchema(\n schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject,\n): IParameterSchema {\n // Handle reference objects\n if ('$ref' in schema) {\n // For now, treat references as generic objects\n return { type: 'object' };\n }\n\n const result: IParameterSchema = {\n type: mapOpenAPIType(schema.type),\n };\n\n if (schema.description) {\n result.description = schema.description;\n }\n\n if (schema.enum) {\n result.enum = schema.enum as (string | number | boolean)[];\n }\n\n if (schema.minimum !== undefined) {\n result.minimum = schema.minimum;\n }\n\n if (schema.maximum !== undefined) {\n result.maximum = schema.maximum;\n }\n\n if (schema.pattern) {\n result.pattern = schema.pattern;\n }\n\n if (schema.format) {\n result.format = schema.format;\n }\n\n if (schema.default !== undefined) {\n result.default = schema.default;\n }\n\n // Handle array items\n if (schema.type === 'array' && schema.items) {\n result.items = convertOpenAPISchemaToParameterSchema(schema.items);\n }\n\n // Handle object properties\n if (schema.type === 'object' && schema.properties) {\n result.properties = {};\n for (const [propName, propSchema] of Object.entries(schema.properties)) {\n result.properties[propName] = convertOpenAPISchemaToParameterSchema(propSchema);\n }\n\n if (schema.required && schema.required.length > 0) {\n (result as { required?: string[] }).required = schema.required;\n }\n }\n\n return result;\n}\n\n/**\n * Convert OpenAPI parameter object to tool parameter schema\n */\nexport function convertOpenAPIParamToSchema(param: OpenAPIV3.ParameterObject): IParameterSchema {\n const schema = param.schema as OpenAPIV3.SchemaObject;\n return convertOpenAPISchemaToParameterSchema(schema);\n}\n\n/**\n * Create a tool schema from an OpenAPI operation specification\n */\nexport function createSchemaFromOperation(\n operationId: string,\n opSpec: OpenAPIV3.OperationObject,\n): IToolSchema {\n const properties: Record<string, IParameterSchema> = {};\n const required: string[] = [];\n\n // Convert OpenAPI parameters to tool schema\n const params = (opSpec.parameters as OpenAPIV3.ParameterObject[]) || [];\n for (const param of params) {\n properties[param.name] = convertOpenAPIParamToSchema(param);\n if (param.required) {\n required.push(param.name);\n }\n }\n\n // Handle request body for POST/PUT/PATCH operations\n if (opSpec.requestBody) {\n const requestBody = opSpec.requestBody as OpenAPIV3.RequestBodyObject;\n const jsonContent = requestBody.content?.['application/json'];\n if (jsonContent?.schema) {\n const bodySchema = convertOpenAPISchemaToParameterSchema(jsonContent.schema);\n if (bodySchema.type === 'object' && bodySchema.properties) {\n Object.assign(properties, bodySchema.properties);\n // Handle required properties for object schemas\n const schemaWithRequired = bodySchema as IParameterSchema & { required?: string[] };\n if (schemaWithRequired.required) {\n required.push(...schemaWithRequired.required);\n }\n }\n }\n }\n\n const schemaParams: {\n type: 'object';\n properties: Record<string, IParameterSchema>;\n required?: string[];\n } = {\n type: 'object',\n properties,\n };\n\n if (required.length > 0) {\n schemaParams.required = required;\n }\n\n return {\n name: operationId,\n description: opSpec.summary || opSpec.description || `OpenAPI operation: ${operationId}`,\n parameters: schemaParams,\n };\n}\n","import type {\n ITool,\n IToolResult,\n IToolExecutionContext,\n IOpenAPIToolConfig,\n TToolParameters,\n IParameterValidationResult,\n IEventService,\n} from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\nimport type { OpenAPIV3 } from 'openapi-types';\nimport { ToolExecutionError, ValidationError } from '@robota-sdk/agent-core';\nimport {\n type THTTPMethod,\n findOperation,\n createSchemaFromOperation,\n} from './openapi-schema-converter';\n\n/**\n * OpenAPI tool implementation\n * Executes API calls based on OpenAPI 3.0 specifications\n *\n * Implements ITool without extending AbstractTool to avoid\n * circular runtime dependency (tools → agents → tools).\n */\nexport class OpenAPITool implements ITool {\n readonly schema: IToolSchema;\n private readonly apiSpec: OpenAPIV3.Document;\n private readonly operationId: string;\n private readonly baseURL: string;\n private readonly config: IOpenAPIToolConfig;\n private eventService: IEventService | undefined;\n\n constructor(config: IOpenAPIToolConfig) {\n this.config = config;\n // Runtime validation of required OpenAPI 3.x fields before cast\n if (\n typeof config.spec !== 'object' ||\n config.spec === null ||\n typeof config.spec.openapi !== 'string' ||\n typeof config.spec.paths !== 'object'\n ) {\n throw new Error(\n 'Invalid OpenAPI spec: must contain \"openapi\" (string) and \"paths\" (object) fields',\n );\n }\n this.apiSpec = config.spec as OpenAPIV3.Document;\n this.operationId = config.operationId;\n this.baseURL = config.baseURL;\n this.schema = this.createSchemaFromOpenAPI();\n }\n\n /**\n * Execute the OpenAPI tool\n */\n async execute(\n parameters: TToolParameters,\n context?: IToolExecutionContext,\n ): Promise<IToolResult> {\n const toolName = this.schema.name;\n\n // Validate parameters\n const validation = this.validateParameters(parameters);\n if (!validation.isValid) {\n throw new ValidationError(\n `Invalid parameters for OpenAPI tool \"${toolName}\": ${validation.errors.join(', ')}`,\n );\n }\n\n try {\n // Execute the API call\n const startTime = Date.now();\n const result = await this.executeAPICall(parameters, context);\n const executionTime = Date.now() - startTime;\n\n return {\n success: true,\n data: result,\n metadata: {\n executionTime,\n toolName,\n operationId: this.operationId,\n baseURL: this.baseURL,\n },\n };\n } catch (error) {\n if (error instanceof ToolExecutionError || error instanceof ValidationError) {\n throw error;\n }\n\n const safeError = error instanceof Error ? error : new Error(String(error));\n throw new ToolExecutionError(\n `OpenAPI tool execution failed: ${safeError.message}`,\n toolName,\n safeError,\n {\n operationId: this.operationId,\n baseURL: this.baseURL,\n parametersCount: Object.keys(parameters).length,\n },\n );\n }\n }\n\n /**\n * Validate tool parameters\n */\n validate(parameters: TToolParameters): boolean {\n return this.validateParameters(parameters).isValid;\n }\n\n /**\n * Validate tool parameters with detailed result\n */\n validateParameters(parameters: TToolParameters): IParameterValidationResult {\n const required = this.schema.parameters.required || [];\n const errors: string[] = [];\n\n for (const field of required) {\n if (!(field in parameters)) {\n errors.push(`Missing required parameter: ${field}`);\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * Get tool name\n */\n getName(): string {\n return this.schema.name;\n }\n\n /**\n * Set EventService for post-construction injection.\n */\n setEventService(eventService: IEventService | undefined): void {\n this.eventService = eventService;\n }\n\n /**\n * Get tool description\n */\n getDescription(): string {\n return this.schema.description;\n }\n\n /**\n * Execute the actual API call\n * @private\n */\n private async executeAPICall(\n parameters: TToolParameters,\n _context?: IToolExecutionContext,\n ): Promise<never> {\n // Find the operation in the OpenAPI spec\n const operation = findOperation(this.apiSpec, this.operationId);\n if (!operation) {\n throw new Error(`Operation ${this.operationId} not found in OpenAPI spec`);\n }\n\n // Build the HTTP request\n this.buildRequestConfig(operation, parameters);\n\n throw new Error('Not implemented: actual API execution is not yet available');\n }\n\n /**\n * Build HTTP request configuration from OpenAPI operation and parameters\n */\n private buildRequestConfig(\n opInfo: { method: THTTPMethod; path: string; operation: OpenAPIV3.OperationObject },\n parameters: TToolParameters,\n ): { method: THTTPMethod; url: string; headers: Record<string, string>; body?: string } {\n const { method, path, operation } = opInfo;\n\n let url = this.baseURL + path;\n const headers: Record<string, string> = {};\n let body: string | undefined;\n\n // Process parameters based on their location\n const params = (operation.parameters as OpenAPIV3.ParameterObject[]) || [];\n\n for (const param of params) {\n const value = parameters[param.name];\n if (value === undefined && param.required) {\n throw new Error(`Required parameter ${param.name} is missing`);\n }\n\n if (value !== undefined) {\n switch (param.in) {\n case 'path':\n url = url.replace(`{${param.name}}`, encodeURIComponent(String(value)));\n break;\n case 'query': {\n const separator = url.includes('?') ? '&' : '?';\n url += `${separator}${param.name}=${encodeURIComponent(String(value))}`;\n break;\n }\n case 'header':\n headers[param.name] = String(value);\n break;\n }\n }\n }\n\n // Handle request body for POST/PUT/PATCH operations\n if (['post', 'put', 'patch'].includes(method) && operation.requestBody) {\n const requestBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n const jsonContent = requestBody.content?.['application/json'];\n if (jsonContent) {\n headers['Content-Type'] = 'application/json';\n // Extract body parameters (those not in path/query/header)\n const bodyParams: TToolParameters = {};\n for (const [key, value] of Object.entries(parameters)) {\n const isParamUsed = params.some((p) => p.name === key);\n if (!isParamUsed) {\n bodyParams[key] = value;\n }\n }\n body = JSON.stringify(bodyParams);\n }\n }\n\n // Add authentication headers if configured\n if (this.config.auth) {\n switch (this.config.auth.type) {\n case 'bearer':\n headers['Authorization'] = `Bearer ${this.config.auth.token}`;\n break;\n case 'apiKey': {\n const headerName = this.config.auth.header || 'X-API-Key';\n headers[headerName] = this.config.auth.apiKey || '';\n break;\n }\n }\n }\n\n const result: {\n method: THTTPMethod;\n url: string;\n headers: Record<string, string>;\n body?: string;\n } = {\n method,\n url,\n headers,\n };\n\n if (body !== undefined) {\n result.body = body;\n }\n\n return result;\n }\n\n /**\n * Create tool schema from OpenAPI operation specification\n */\n private createSchemaFromOpenAPI(): IToolSchema {\n const operation = findOperation(this.apiSpec, this.operationId);\n if (!operation) {\n throw new Error(\n `[STRICT-POLICY][EMITTER-CONTRACT] OpenAPI operation not found: ${this.operationId}. ` +\n `Emitter contract must provide a valid operationId present in the OpenAPI document.`,\n );\n }\n\n return createSchemaFromOperation(this.operationId, operation.operation);\n }\n}\n\n/**\n * Factory function to create OpenAPI tools from specification\n */\nexport function createOpenAPITool(config: IOpenAPIToolConfig): OpenAPITool {\n return new OpenAPITool(config);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","names":[],"sources":["../../src/registry/tool-registry.ts","../../src/implementations/function-tool/parameter-validator.ts","../../src/implementations/function-tool/schema-converter.ts","../../src/implementations/function-tool.ts","../../src/implementations/openapi-schema-converter.ts","../../src/implementations/openapi-tool.ts"],"sourcesContent":["import { ValidationError } from '@robota-sdk/agent-core';\nimport { logger } from '@robota-sdk/agent-core';\n\nimport type { ITool, IToolRegistry } from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\n\n/**\n * Tool registry implementation\n * Manages tool registration, validation, and retrieval\n */\nexport class ToolRegistry implements IToolRegistry {\n private tools = new Map<string, ITool>();\n\n /**\n * Register a tool\n */\n register(tool: ITool): void {\n if (!tool.schema?.name) {\n throw new ValidationError('Tool must have a valid schema with name');\n }\n\n const toolName = tool.schema.name;\n\n // Validate tool schema\n this.validateToolSchema(tool.schema);\n\n // Check for duplicate registration\n if (this.tools.has(toolName)) {\n logger.warn(`Tool \"${toolName}\" is already registered, overriding`, {\n toolName,\n existingTool: this.tools.get(toolName)?.constructor.name,\n });\n }\n\n this.tools.set(toolName, tool);\n logger.debug(`Tool \"${toolName}\" registered successfully`, {\n toolName,\n toolType: tool.constructor.name,\n parameters: Object.keys(tool.schema.parameters?.properties || {}),\n });\n }\n\n /**\n * Unregister a tool\n */\n unregister(name: string): void {\n if (!this.tools.has(name)) {\n logger.warn(`Attempted to unregister non-existent tool \"${name}\"`);\n return;\n }\n\n this.tools.delete(name);\n logger.debug(`Tool \"${name}\" unregistered successfully`);\n }\n\n /**\n * Get tool by name\n */\n get(name: string): ITool | undefined {\n return this.tools.get(name);\n }\n\n /**\n * Get all registered tools\n */\n getAll(): ITool[] {\n return Array.from(this.tools.values());\n }\n\n /**\n * Get tool schemas\n */\n getSchemas(): IToolSchema[] {\n const tools = this.getAll();\n\n // 🔍 [TOOL-FLOW] ToolRegistry.getSchemas() - Extracting schemas from tools\n logger.debug('[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction', {\n count: tools.length,\n tools: tools.map((t) => ({\n name: t.schema?.name ?? 'unnamed',\n hasSchema: !!t.schema,\n schemaType: typeof t.schema,\n toolType: t.constructor?.name || 'unknown',\n })),\n });\n\n return this.getAll().map((tool) => tool.schema);\n }\n\n /**\n * Check if tool exists\n */\n has(name: string): boolean {\n return this.tools.has(name);\n }\n\n /**\n * Clear all tools\n */\n clear(): void {\n const toolCount = this.tools.size;\n this.tools.clear();\n logger.debug(`Cleared ${toolCount} tools from registry`);\n }\n\n /**\n * Get tool names\n */\n getToolNames(): string[] {\n return Array.from(this.tools.keys());\n }\n\n /**\n * Get tools by pattern\n */\n getToolsByPattern(pattern: string | RegExp): ITool[] {\n const regex = typeof pattern === 'string' ? new RegExp(pattern) : pattern;\n return this.getAll().filter((tool) => regex.test(tool.schema.name));\n }\n\n /**\n * Get tool count\n */\n size(): number {\n return this.tools.size;\n }\n\n /**\n * Validate tool schema\n */\n private validateToolSchema(schema: IToolSchema): void {\n if (!schema.name || typeof schema.name !== 'string') {\n throw new ValidationError('Tool schema must have a valid name');\n }\n\n if (!schema.description || typeof schema.description !== 'string') {\n throw new ValidationError('Tool schema must have a description');\n }\n\n if (\n !schema.parameters ||\n typeof schema.parameters !== 'object' ||\n schema.parameters === null ||\n Array.isArray(schema.parameters)\n ) {\n throw new ValidationError('Tool schema must have parameters object');\n }\n\n if (schema.parameters.type !== 'object') {\n throw new ValidationError('Tool parameters type must be \"object\"');\n }\n\n // Validate parameter properties\n if (schema.parameters.properties) {\n for (const propName of Object.keys(schema.parameters.properties)) {\n const propSchema = schema.parameters.properties[propName];\n if (!propSchema?.type) {\n throw new ValidationError(`Parameter \"${propName}\" must have a type`);\n }\n\n const validTypes = ['string', 'number', 'boolean', 'array', 'object'];\n if (!validTypes.includes(propSchema.type)) {\n throw new ValidationError(\n `Parameter \"${propName}\" has invalid type \"${propSchema.type}\"`,\n );\n }\n }\n }\n\n // Validate required fields exist in properties\n if (schema.parameters.required) {\n const properties = schema.parameters.properties || {};\n for (const requiredField of schema.parameters.required) {\n if (!properties[requiredField]) {\n throw new ValidationError(\n `Required parameter \"${requiredField}\" is not defined in properties`,\n );\n }\n }\n }\n }\n}\n","import type {\n IParameterSchema,\n TToolParameters,\n IParameterValidationResult,\n} from '@robota-sdk/agent-core';\nimport type { TUniversalValue } from '@robota-sdk/agent-core';\n\n/**\n * Validate individual parameter type against its schema.\n * Returns an error string if invalid, undefined if valid.\n */\nexport function validateParameterType(\n key: string,\n value: TUniversalValue,\n schema: IParameterSchema,\n): string | undefined {\n const expectedType = schema['type'];\n\n switch (expectedType) {\n case 'string':\n if (typeof value !== 'string') {\n return `Parameter \"${key}\" must be a string, got ${typeof value}`;\n }\n break;\n\n case 'number':\n if (typeof value !== 'number' || isNaN(value)) {\n return `Parameter \"${key}\" must be a number, got ${typeof value}`;\n }\n break;\n\n case 'boolean':\n if (typeof value !== 'boolean') {\n return `Parameter \"${key}\" must be a boolean, got ${typeof value}`;\n }\n break;\n\n case 'array':\n if (!Array.isArray(value)) {\n return `Parameter \"${key}\" must be an array, got ${typeof value}`;\n }\n // Check array items if specified\n if (schema.items) {\n for (let i = 0; i < value.length; i++) {\n const itemError = validateParameterType(`${key}[${i}]`, value[i], schema.items);\n if (itemError) {\n return itemError;\n }\n }\n }\n break;\n\n case 'object':\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return `Parameter \"${key}\" must be an object, got ${typeof value}`;\n }\n break;\n }\n\n // Check enum constraints\n if (schema.enum && schema.enum.length > 0) {\n const enumValues = schema.enum;\n let isValidEnum = false;\n\n // Type-safe enum checking based on JSONSchemaEnum type\n for (const enumValue of enumValues) {\n if (value === enumValue) {\n isValidEnum = true;\n break;\n }\n }\n\n if (!isValidEnum) {\n return `Parameter \"${key}\" must be one of: ${enumValues.join(', ')}, got ${value}`;\n }\n }\n\n return undefined;\n}\n\n/**\n * Collect all validation errors for the given parameters against a schema.\n */\nexport function getValidationErrors(\n parameters: TToolParameters,\n schemaRequired: string[],\n schemaProperties: Record<string, IParameterSchema>,\n additionalProperties?: boolean | IParameterSchema,\n): string[] {\n const errors: string[] = [];\n\n // Check required parameters\n for (const field of schemaRequired) {\n if (!(field in parameters)) {\n errors.push(`Missing required parameter: ${field}`);\n }\n }\n\n // Check parameter types and constraints\n for (const [key, value] of Object.entries(parameters)) {\n const paramSchema = schemaProperties[key];\n if (!paramSchema) {\n if (additionalProperties === true) {\n continue;\n }\n if (additionalProperties && typeof additionalProperties === 'object') {\n const additionalTypeError = validateParameterType(key, value, additionalProperties);\n if (additionalTypeError) errors.push(additionalTypeError);\n continue;\n }\n errors.push(`Unknown parameter: ${key}`);\n continue;\n }\n\n const typeError = validateParameterType(key, value, paramSchema);\n if (typeError) {\n errors.push(typeError);\n }\n }\n\n return errors;\n}\n\n/**\n * Validate parameters and return a structured result.\n */\nexport function validateToolParameters(\n parameters: TToolParameters,\n schemaRequired: string[],\n schemaProperties: Record<string, IParameterSchema>,\n additionalProperties?: boolean | IParameterSchema,\n): IParameterValidationResult {\n const errors = getValidationErrors(\n parameters,\n schemaRequired,\n schemaProperties,\n additionalProperties,\n );\n return {\n isValid: errors.length === 0,\n errors,\n };\n}\n","/**\n * FunctionTool - Schema conversion utilities for Facade pattern\n *\n * REASON: Complex Zod to JSON schema conversion requires isolated utility functions\n * ALTERNATIVES_CONSIDERED:\n * 1. Keep conversion logic in main class (violates single responsibility)\n * 2. Use third-party library (adds external dependency)\n * 3. Manual conversion each time (code duplication)\n * 4. Runtime type checking only (loses compile-time safety)\n * 5. Remove Zod support (breaks backward compatibility)\n * TODO: Consider caching conversion results for performance\n */\n\nimport type { IZodSchema, ISchemaConversionOptions } from './types';\nimport type {\n IToolSchema,\n IParameterSchema,\n TJSONSchemaEnum,\n TUniversalValue,\n} from '@robota-sdk/agent-core';\n\n/**\n * Convert Zod schema to JSON Schema format with safe undefined handling\n */\nexport function zodToJsonSchema(\n schema: IZodSchema,\n options: ISchemaConversionOptions = {},\n): IToolSchema['parameters'] {\n const properties: Record<string, IParameterSchema> = {};\n const required: string[] = [];\n\n // Safe access to schema definition (no fallback).\n const schemaDef = schema._def;\n if (!schemaDef) {\n throw new Error('Zod schema is missing _def; cannot convert to JSON schema.');\n }\n\n // Handle object schemas with shape\n if (schemaDef.typeName === 'ZodObject' && schemaDef.shape) {\n // In Zod v3, shape is a property, not a function\n const shape = typeof schemaDef.shape === 'function' ? schemaDef.shape() : schemaDef.shape;\n\n for (const [key, typeObj] of Object.entries(shape)) {\n const property = convertZodTypeToProperty(typeObj);\n properties[key] = property;\n\n // Check if field is required (not optional/nullable)\n if (isRequiredField(typeObj)) {\n required.push(key);\n }\n }\n }\n\n return {\n type: 'object',\n properties,\n required,\n ...((options.allowAdditionalProperties || schemaDef.unknownKeys === 'passthrough') && {\n additionalProperties: true,\n }),\n };\n}\n\n/**\n * Convert individual Zod type to parameter schema with safe undefined handling\n */\nfunction convertZodTypeToProperty(typeObj: IZodSchema): IParameterSchema {\n // Safe access to type definition\n const typeDef = typeObj._def;\n if (!typeDef) {\n throw new Error('Zod type is missing _def; cannot convert to JSON schema.');\n }\n\n const base: Partial<IParameterSchema> = {};\n\n // Add description if available\n if (typeDef.description) {\n base.description = typeDef.description;\n }\n\n // Handle different Zod types\n switch (typeDef.typeName) {\n case 'ZodString':\n return { type: 'string', ...base };\n\n case 'ZodNumber':\n return { type: 'number', ...base };\n\n case 'ZodBoolean':\n return { type: 'boolean', ...base };\n\n case 'ZodArray': {\n if (!typeDef.type) {\n throw new Error('ZodArray is missing item type; cannot convert to JSON schema.');\n }\n const arrayItems = convertZodTypeToProperty(typeDef.type);\n return {\n type: 'array',\n items: arrayItems,\n ...base,\n };\n }\n\n case 'ZodObject':\n return { type: 'object', ...base };\n\n case 'ZodEnum': {\n const enumValues = typeDef.values;\n if (!enumValues || !Array.isArray(enumValues)) {\n throw new Error('ZodEnum is missing enum values; cannot convert to JSON schema.');\n }\n return {\n type: 'string',\n enum: enumValues as TJSONSchemaEnum,\n ...base,\n };\n }\n\n case 'ZodOptional':\n // Handle optional types by recursion\n if (typeDef.innerType) {\n const innerProperty = convertZodTypeToProperty(typeDef.innerType);\n return { ...innerProperty, ...base };\n }\n throw new Error('ZodOptional is missing innerType; cannot convert to JSON schema.');\n\n case 'ZodNullable':\n // Handle nullable types\n if (typeDef.innerType) {\n const innerProperty = convertZodTypeToProperty(typeDef.innerType);\n return { ...innerProperty, ...base };\n }\n throw new Error('ZodNullable is missing innerType; cannot convert to JSON schema.');\n\n case 'ZodDefault':\n // Handle default values by processing the inner type\n if (typeDef.innerType) {\n const innerProperty = convertZodTypeToProperty(typeDef.innerType);\n return { ...innerProperty, ...base };\n }\n throw new Error('ZodDefault is missing innerType; cannot convert to JSON schema.');\n\n case 'ZodRecord':\n // Handle Record<string, T> → JSON Schema additionalProperties\n if (typeDef.valueType) {\n const valueProperty = convertZodTypeToProperty(typeDef.valueType);\n return { type: 'object', additionalProperties: valueProperty, ...base };\n }\n return { type: 'object', additionalProperties: { type: 'string' }, ...base };\n\n default:\n throw new Error(`Unsupported Zod type: ${String(typeDef.typeName)}`);\n }\n}\n\n/**\n * Check if a Zod field is required (not optional or nullable)\n */\nfunction isRequiredField(typeObj: IZodSchema): boolean {\n const typeDef = typeObj._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot determine required fields.');\n }\n\n // Field is optional if it's ZodOptional, ZodNullable, or ZodDefault\n return (\n typeDef.typeName !== 'ZodOptional' &&\n typeDef.typeName !== 'ZodNullable' &&\n typeDef.typeName !== 'ZodDefault'\n );\n}\n\n/**\n * Safely extract enum values from Zod schema\n */\nexport function extractEnumValues(schema: IZodSchema): TUniversalValue[] {\n const typeDef = schema._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot extract enum values.');\n }\n if (!typeDef.values || !Array.isArray(typeDef.values)) {\n throw new Error('ZodEnum schema is missing enum values; cannot extract enum values.');\n }\n return typeDef.values;\n}\n\n/**\n * Check if schema has validation constraints\n */\nexport function hasValidationConstraints(schema: IZodSchema): boolean {\n const typeDef = schema._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot determine validation constraints.');\n }\n\n return !!(typeDef.checks && typeDef.checks.length > 0);\n}\n\n/**\n * Safe schema type name extraction\n */\nexport function getSchemaTypeName(schema: IZodSchema): string {\n const typeDef = schema._def;\n if (!typeDef) {\n throw new Error('Zod schema is missing _def; cannot determine schema type name.');\n }\n if (!typeDef.typeName) {\n throw new Error('Zod schema has empty typeName; cannot determine schema type name.');\n }\n return typeDef.typeName;\n}\n","import { ToolExecutionError, ValidationError } from '@robota-sdk/agent-core';\n\nimport { getValidationErrors, validateToolParameters } from './function-tool/parameter-validator';\nimport { zodToJsonSchema } from './function-tool/schema-converter';\n\nimport type { IZodSchema } from './function-tool/types';\nimport type {\n IFunctionTool,\n IToolResult,\n IToolExecutionContext,\n IParameterValidationResult,\n TToolExecutor,\n TToolParameters,\n IEventService,\n} from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\nimport type { TUniversalValue } from '@robota-sdk/agent-core';\n\n// Import from Facade pattern modules for type safety\n\n/**\n * Function tool implementation\n * Wraps a JavaScript function as a tool with schema validation\n *\n * Implements IFunctionTool without extending AbstractTool to avoid\n * circular runtime dependency (tools → agents → tools).\n */\nexport class FunctionTool implements IFunctionTool {\n readonly schema: IToolSchema;\n readonly fn: TToolExecutor;\n private eventService: IEventService | undefined;\n\n constructor(schema: IToolSchema, fn: TToolExecutor) {\n this.schema = schema;\n this.fn = fn;\n this.validateConstructorInputs();\n }\n\n /**\n * Get tool name\n */\n getName(): string {\n return this.schema.name;\n }\n\n /**\n * Set EventService for post-construction injection.\n * Accepts EventService as-is without transformation.\n * Caller is responsible for providing properly configured EventService.\n */\n setEventService(eventService: IEventService | undefined): void {\n this.eventService = eventService;\n }\n\n /**\n * Execute the function tool\n */\n async execute(\n parameters: TToolParameters,\n context?: IToolExecutionContext,\n ): Promise<IToolResult> {\n const toolName = this.schema.name;\n\n // Validate parameters before execution\n if (!this.validate(parameters)) {\n const errors = getValidationErrors(\n parameters,\n this.schema.parameters.required || [],\n this.schema.parameters.properties || {},\n this.schema.parameters.additionalProperties,\n );\n throw new ValidationError(`Invalid parameters for tool \"${toolName}\": ${errors.join(', ')}`);\n }\n\n // Execute the function\n const startTime = Date.now();\n let result: TUniversalValue;\n try {\n result = await this.fn(parameters, context);\n } catch (error) {\n if (error instanceof ToolExecutionError || error instanceof ValidationError) {\n throw error;\n }\n\n throw new ToolExecutionError(\n `Function tool execution failed: ${error instanceof Error ? error.message : String(error)}`,\n toolName,\n error instanceof Error ? error : new Error(String(error)),\n {\n parameterCount: Object.keys(parameters || {}).length,\n hasContext: !!context,\n },\n );\n }\n\n const executionTime = Date.now() - startTime;\n\n return {\n success: true,\n data: result,\n metadata: {\n executionTime,\n toolName,\n parameters,\n },\n };\n }\n\n /**\n * Validate parameters (simple boolean result)\n */\n validate(parameters: TToolParameters): boolean {\n return (\n getValidationErrors(\n parameters,\n this.schema.parameters.required || [],\n this.schema.parameters.properties || {},\n this.schema.parameters.additionalProperties,\n ).length === 0\n );\n }\n\n /**\n * Validate tool parameters with detailed result\n */\n validateParameters(parameters: TToolParameters): IParameterValidationResult {\n return validateToolParameters(\n parameters,\n this.schema.parameters.required || [],\n this.schema.parameters.properties || {},\n this.schema.parameters.additionalProperties,\n );\n }\n\n /**\n * Get tool description\n */\n getDescription(): string {\n return this.schema.description;\n }\n\n /**\n * Validate constructor inputs\n */\n private validateConstructorInputs(): void {\n if (!this.schema) {\n throw new ValidationError('Tool schema is required');\n }\n\n if (!this.fn || typeof this.fn !== 'function') {\n throw new ValidationError('Tool function is required and must be a function');\n }\n\n if (!this.schema.name) {\n throw new ValidationError('Tool schema must have a name');\n }\n }\n}\n\n/**\n * Helper function to create a function tool from a simple function\n */\nexport function createFunctionTool(\n name: string,\n description: string,\n parameters: IToolSchema['parameters'],\n fn: TToolExecutor,\n): FunctionTool {\n const schema: IToolSchema = {\n name,\n description,\n parameters,\n };\n\n return new FunctionTool(schema, fn);\n}\n\n/**\n * Helper function to create a function tool from Zod schema\n */\nexport function createZodFunctionTool(\n name: string,\n description: string,\n zodSchema: IZodSchema,\n fn: TToolExecutor,\n): FunctionTool {\n // Use comprehensive Zod to JSON schema conversion\n const parameters = zodToJsonSchema(zodSchema);\n\n const schema: IToolSchema = {\n name,\n description,\n parameters,\n };\n\n // Wrap the function with validation and ensure proper parameter handling\n const wrappedFn: TToolExecutor = async (\n parameters: TToolParameters,\n context?: IToolExecutionContext,\n ): Promise<TUniversalValue> => {\n // Use Zod for runtime validation\n const parseResult = zodSchema.safeParse(parameters);\n if (!parseResult.success) {\n throw new ValidationError(`Zod validation failed: ${parseResult.error}`);\n }\n\n const result = await fn((parseResult.data as TToolParameters) || parameters, context);\n // Ensure result is always a string for consistency with core package\n return typeof result === 'string' ? result : JSON.stringify(result);\n };\n\n return new FunctionTool(schema, wrappedFn);\n}\n\n// zodToJsonSchema function moved to Facade pattern schema-converter module\n","import type { IParameterSchema } from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\nimport type { OpenAPIV3 } from 'openapi-types';\n\n/**\n * OpenAPI operation method types\n */\nexport type THTTPMethod = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head' | 'options';\n\n/**\n * HTTP methods to search when scanning OpenAPI paths\n */\nexport const HTTP_METHODS: THTTPMethod[] = [\n 'get',\n 'post',\n 'put',\n 'delete',\n 'patch',\n 'head',\n 'options',\n];\n\n/**\n * Find an operation in the OpenAPI spec by operationId\n */\nexport function findOperation(\n apiSpec: OpenAPIV3.Document,\n operationId: string,\n): { method: THTTPMethod; path: string; operation: OpenAPIV3.OperationObject } | undefined {\n for (const [path, pathItem] of Object.entries(apiSpec.paths || {})) {\n if (!pathItem) continue;\n\n for (const method of HTTP_METHODS) {\n const operation = (pathItem as Record<string, OpenAPIV3.OperationObject | undefined>)[method];\n if (operation?.operationId === operationId) {\n return { method, path, operation };\n }\n }\n }\n return undefined;\n}\n\n/**\n * Map OpenAPI type to JSON schema type\n */\nexport function mapOpenAPIType(type: string | undefined): IParameterSchema['type'] {\n switch (type) {\n case 'string':\n return 'string';\n case 'number':\n return 'number';\n case 'integer':\n return 'integer';\n case 'boolean':\n return 'boolean';\n case 'array':\n return 'array';\n case 'object':\n return 'object';\n default:\n return 'string';\n }\n}\n\n/**\n * Convert OpenAPI schema to parameter schema\n */\nexport function convertOpenAPISchemaToParameterSchema(\n schema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject,\n): IParameterSchema {\n // Handle reference objects\n if ('$ref' in schema) {\n // For now, treat references as generic objects\n return { type: 'object' };\n }\n\n const result: IParameterSchema = {\n type: mapOpenAPIType(schema.type),\n };\n\n if (schema.description) {\n result.description = schema.description;\n }\n\n if (schema.enum) {\n result.enum = schema.enum as (string | number | boolean)[];\n }\n\n if (schema.minimum !== undefined) {\n result.minimum = schema.minimum;\n }\n\n if (schema.maximum !== undefined) {\n result.maximum = schema.maximum;\n }\n\n if (schema.pattern) {\n result.pattern = schema.pattern;\n }\n\n if (schema.format) {\n result.format = schema.format;\n }\n\n if (schema.default !== undefined) {\n result.default = schema.default;\n }\n\n // Handle array items\n if (schema.type === 'array' && schema.items) {\n result.items = convertOpenAPISchemaToParameterSchema(schema.items);\n }\n\n // Handle object properties\n if (schema.type === 'object' && schema.properties) {\n result.properties = {};\n for (const [propName, propSchema] of Object.entries(schema.properties)) {\n result.properties[propName] = convertOpenAPISchemaToParameterSchema(propSchema);\n }\n\n if (schema.required && schema.required.length > 0) {\n (result as { required?: string[] }).required = schema.required;\n }\n }\n\n return result;\n}\n\n/**\n * Convert OpenAPI parameter object to tool parameter schema\n */\nexport function convertOpenAPIParamToSchema(param: OpenAPIV3.ParameterObject): IParameterSchema {\n const schema = param.schema as OpenAPIV3.SchemaObject;\n return convertOpenAPISchemaToParameterSchema(schema);\n}\n\n/**\n * Create a tool schema from an OpenAPI operation specification\n */\nexport function createSchemaFromOperation(\n operationId: string,\n opSpec: OpenAPIV3.OperationObject,\n): IToolSchema {\n const properties: Record<string, IParameterSchema> = {};\n const required: string[] = [];\n\n // Convert OpenAPI parameters to tool schema\n const params = (opSpec.parameters as OpenAPIV3.ParameterObject[]) || [];\n for (const param of params) {\n properties[param.name] = convertOpenAPIParamToSchema(param);\n if (param.required) {\n required.push(param.name);\n }\n }\n\n // Handle request body for POST/PUT/PATCH operations\n if (opSpec.requestBody) {\n const requestBody = opSpec.requestBody as OpenAPIV3.RequestBodyObject;\n const jsonContent = requestBody.content?.['application/json'];\n if (jsonContent?.schema) {\n const bodySchema = convertOpenAPISchemaToParameterSchema(jsonContent.schema);\n if (bodySchema.type === 'object' && bodySchema.properties) {\n Object.assign(properties, bodySchema.properties);\n // Handle required properties for object schemas\n const schemaWithRequired = bodySchema as IParameterSchema & { required?: string[] };\n if (schemaWithRequired.required) {\n required.push(...schemaWithRequired.required);\n }\n }\n }\n }\n\n const schemaParams: {\n type: 'object';\n properties: Record<string, IParameterSchema>;\n required?: string[];\n } = {\n type: 'object',\n properties,\n };\n\n if (required.length > 0) {\n schemaParams.required = required;\n }\n\n return {\n name: operationId,\n description: opSpec.summary || opSpec.description || `OpenAPI operation: ${operationId}`,\n parameters: schemaParams,\n };\n}\n","import { ToolExecutionError, ValidationError } from '@robota-sdk/agent-core';\n\nimport {\n type THTTPMethod,\n findOperation,\n createSchemaFromOperation,\n} from './openapi-schema-converter';\n\nimport type {\n ITool,\n IToolResult,\n IToolExecutionContext,\n IOpenAPIToolConfig,\n TToolParameters,\n IParameterValidationResult,\n IEventService,\n} from '@robota-sdk/agent-core';\nimport type { IToolSchema } from '@robota-sdk/agent-core';\nimport type { OpenAPIV3 } from 'openapi-types';\n\n/**\n * OpenAPI tool implementation\n * Executes API calls based on OpenAPI 3.0 specifications\n *\n * Implements ITool without extending AbstractTool to avoid\n * circular runtime dependency (tools → agents → tools).\n */\nexport class OpenAPITool implements ITool {\n readonly schema: IToolSchema;\n private readonly apiSpec: OpenAPIV3.Document;\n private readonly operationId: string;\n private readonly baseURL: string;\n private readonly config: IOpenAPIToolConfig;\n private eventService: IEventService | undefined;\n\n constructor(config: IOpenAPIToolConfig) {\n this.config = config;\n // Runtime validation of required OpenAPI 3.x fields before cast\n if (\n typeof config.spec !== 'object' ||\n config.spec === null ||\n typeof config.spec.openapi !== 'string' ||\n typeof config.spec.paths !== 'object'\n ) {\n throw new Error(\n 'Invalid OpenAPI spec: must contain \"openapi\" (string) and \"paths\" (object) fields',\n );\n }\n this.apiSpec = config.spec as OpenAPIV3.Document;\n this.operationId = config.operationId;\n this.baseURL = config.baseURL;\n this.schema = this.createSchemaFromOpenAPI();\n }\n\n /**\n * Execute the OpenAPI tool\n */\n async execute(\n parameters: TToolParameters,\n context?: IToolExecutionContext,\n ): Promise<IToolResult> {\n const toolName = this.schema.name;\n\n // Validate parameters\n const validation = this.validateParameters(parameters);\n if (!validation.isValid) {\n throw new ValidationError(\n `Invalid parameters for OpenAPI tool \"${toolName}\": ${validation.errors.join(', ')}`,\n );\n }\n\n try {\n // Execute the API call\n const startTime = Date.now();\n const result = await this.executeAPICall(parameters, context);\n const executionTime = Date.now() - startTime;\n\n return {\n success: true,\n data: result,\n metadata: {\n executionTime,\n toolName,\n operationId: this.operationId,\n baseURL: this.baseURL,\n },\n };\n } catch (error) {\n if (error instanceof ToolExecutionError || error instanceof ValidationError) {\n throw error;\n }\n\n const safeError = error instanceof Error ? error : new Error(String(error));\n throw new ToolExecutionError(\n `OpenAPI tool execution failed: ${safeError.message}`,\n toolName,\n safeError,\n {\n operationId: this.operationId,\n baseURL: this.baseURL,\n parametersCount: Object.keys(parameters).length,\n },\n );\n }\n }\n\n /**\n * Validate tool parameters\n */\n validate(parameters: TToolParameters): boolean {\n return this.validateParameters(parameters).isValid;\n }\n\n /**\n * Validate tool parameters with detailed result\n */\n validateParameters(parameters: TToolParameters): IParameterValidationResult {\n const required = this.schema.parameters.required || [];\n const errors: string[] = [];\n\n for (const field of required) {\n if (!(field in parameters)) {\n errors.push(`Missing required parameter: ${field}`);\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * Get tool name\n */\n getName(): string {\n return this.schema.name;\n }\n\n /**\n * Set EventService for post-construction injection.\n */\n setEventService(eventService: IEventService | undefined): void {\n this.eventService = eventService;\n }\n\n /**\n * Get tool description\n */\n getDescription(): string {\n return this.schema.description;\n }\n\n /**\n * Execute the actual API call\n * @private\n */\n private async executeAPICall(\n parameters: TToolParameters,\n _context?: IToolExecutionContext,\n ): Promise<never> {\n // Find the operation in the OpenAPI spec\n const operation = findOperation(this.apiSpec, this.operationId);\n if (!operation) {\n throw new Error(`Operation ${this.operationId} not found in OpenAPI spec`);\n }\n\n // Build the HTTP request\n this.buildRequestConfig(operation, parameters);\n\n throw new Error('Not implemented: actual API execution is not yet available');\n }\n\n /**\n * Build HTTP request configuration from OpenAPI operation and parameters\n */\n private buildRequestConfig(\n opInfo: { method: THTTPMethod; path: string; operation: OpenAPIV3.OperationObject },\n parameters: TToolParameters,\n ): { method: THTTPMethod; url: string; headers: Record<string, string>; body?: string } {\n const { method, path, operation } = opInfo;\n\n let url = this.baseURL + path;\n const headers: Record<string, string> = {};\n let body: string | undefined;\n\n // Process parameters based on their location\n const params = (operation.parameters as OpenAPIV3.ParameterObject[]) || [];\n\n for (const param of params) {\n const value = parameters[param.name];\n if (value === undefined && param.required) {\n throw new Error(`Required parameter ${param.name} is missing`);\n }\n\n if (value !== undefined) {\n switch (param.in) {\n case 'path':\n url = url.replace(`{${param.name}}`, encodeURIComponent(String(value)));\n break;\n case 'query': {\n const separator = url.includes('?') ? '&' : '?';\n url += `${separator}${param.name}=${encodeURIComponent(String(value))}`;\n break;\n }\n case 'header':\n headers[param.name] = String(value);\n break;\n }\n }\n }\n\n // Handle request body for POST/PUT/PATCH operations\n if (['post', 'put', 'patch'].includes(method) && operation.requestBody) {\n const requestBody = operation.requestBody as OpenAPIV3.RequestBodyObject;\n const jsonContent = requestBody.content?.['application/json'];\n if (jsonContent) {\n headers['Content-Type'] = 'application/json';\n // Extract body parameters (those not in path/query/header)\n const bodyParams: TToolParameters = {};\n for (const [key, value] of Object.entries(parameters)) {\n const isParamUsed = params.some((p) => p.name === key);\n if (!isParamUsed) {\n bodyParams[key] = value;\n }\n }\n body = JSON.stringify(bodyParams);\n }\n }\n\n // Add authentication headers if configured\n if (this.config.auth) {\n switch (this.config.auth.type) {\n case 'bearer':\n headers['Authorization'] = `Bearer ${this.config.auth.token}`;\n break;\n case 'apiKey': {\n const headerName = this.config.auth.header || 'X-API-Key';\n headers[headerName] = this.config.auth.apiKey || '';\n break;\n }\n }\n }\n\n const result: {\n method: THTTPMethod;\n url: string;\n headers: Record<string, string>;\n body?: string;\n } = {\n method,\n url,\n headers,\n };\n\n if (body !== undefined) {\n result.body = body;\n }\n\n return result;\n }\n\n /**\n * Create tool schema from OpenAPI operation specification\n */\n private createSchemaFromOpenAPI(): IToolSchema {\n const operation = findOperation(this.apiSpec, this.operationId);\n if (!operation) {\n throw new Error(\n `[STRICT-POLICY][EMITTER-CONTRACT] OpenAPI operation not found: ${this.operationId}. ` +\n `Emitter contract must provide a valid operationId present in the OpenAPI document.`,\n );\n }\n\n return createSchemaFromOperation(this.operationId, operation.operation);\n }\n}\n\n/**\n * Factory function to create OpenAPI tools from specification\n */\nexport function createOpenAPITool(config: IOpenAPIToolConfig): OpenAPITool {\n return new OpenAPITool(config);\n}\n"],"mappings":"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"}
@@ -372,6 +372,77 @@ var ToolRegistry = class {
372
372
  }
373
373
  };
374
374
  //#endregion
375
+ //#region src/implementations/function-tool/parameter-validator.ts
376
+ /**
377
+ * Validate individual parameter type against its schema.
378
+ * Returns an error string if invalid, undefined if valid.
379
+ */
380
+ function validateParameterType(key, value, schema) {
381
+ switch (schema["type"]) {
382
+ case "string":
383
+ if (typeof value !== "string") return `Parameter "${key}" must be a string, got ${typeof value}`;
384
+ break;
385
+ case "number":
386
+ if (typeof value !== "number" || isNaN(value)) return `Parameter "${key}" must be a number, got ${typeof value}`;
387
+ break;
388
+ case "boolean":
389
+ if (typeof value !== "boolean") return `Parameter "${key}" must be a boolean, got ${typeof value}`;
390
+ break;
391
+ case "array":
392
+ if (!Array.isArray(value)) return `Parameter "${key}" must be an array, got ${typeof value}`;
393
+ if (schema.items) for (let i = 0; i < value.length; i++) {
394
+ const itemError = validateParameterType(`${key}[${i}]`, value[i], schema.items);
395
+ if (itemError) return itemError;
396
+ }
397
+ break;
398
+ case "object":
399
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return `Parameter "${key}" must be an object, got ${typeof value}`;
400
+ break;
401
+ }
402
+ if (schema.enum && schema.enum.length > 0) {
403
+ const enumValues = schema.enum;
404
+ let isValidEnum = false;
405
+ for (const enumValue of enumValues) if (value === enumValue) {
406
+ isValidEnum = true;
407
+ break;
408
+ }
409
+ if (!isValidEnum) return `Parameter "${key}" must be one of: ${enumValues.join(", ")}, got ${value}`;
410
+ }
411
+ }
412
+ /**
413
+ * Collect all validation errors for the given parameters against a schema.
414
+ */
415
+ function getValidationErrors(parameters, schemaRequired, schemaProperties, additionalProperties) {
416
+ const errors = [];
417
+ for (const field of schemaRequired) if (!(field in parameters)) errors.push(`Missing required parameter: ${field}`);
418
+ for (const [key, value] of Object.entries(parameters)) {
419
+ const paramSchema = schemaProperties[key];
420
+ if (!paramSchema) {
421
+ if (additionalProperties === true) continue;
422
+ if (additionalProperties && typeof additionalProperties === "object") {
423
+ const additionalTypeError = validateParameterType(key, value, additionalProperties);
424
+ if (additionalTypeError) errors.push(additionalTypeError);
425
+ continue;
426
+ }
427
+ errors.push(`Unknown parameter: ${key}`);
428
+ continue;
429
+ }
430
+ const typeError = validateParameterType(key, value, paramSchema);
431
+ if (typeError) errors.push(typeError);
432
+ }
433
+ return errors;
434
+ }
435
+ /**
436
+ * Validate parameters and return a structured result.
437
+ */
438
+ function validateToolParameters(parameters, schemaRequired, schemaProperties, additionalProperties) {
439
+ const errors = getValidationErrors(parameters, schemaRequired, schemaProperties, additionalProperties);
440
+ return {
441
+ isValid: errors.length === 0,
442
+ errors
443
+ };
444
+ }
445
+ //#endregion
375
446
  //#region src/implementations/function-tool/schema-converter.ts
376
447
  /**
377
448
  * Convert Zod schema to JSON Schema format with safe undefined handling
@@ -477,77 +548,6 @@ function isRequiredField(typeObj) {
477
548
  return typeDef.typeName !== "ZodOptional" && typeDef.typeName !== "ZodNullable" && typeDef.typeName !== "ZodDefault";
478
549
  }
479
550
  //#endregion
480
- //#region src/implementations/function-tool/parameter-validator.ts
481
- /**
482
- * Validate individual parameter type against its schema.
483
- * Returns an error string if invalid, undefined if valid.
484
- */
485
- function validateParameterType(key, value, schema) {
486
- switch (schema["type"]) {
487
- case "string":
488
- if (typeof value !== "string") return `Parameter "${key}" must be a string, got ${typeof value}`;
489
- break;
490
- case "number":
491
- if (typeof value !== "number" || isNaN(value)) return `Parameter "${key}" must be a number, got ${typeof value}`;
492
- break;
493
- case "boolean":
494
- if (typeof value !== "boolean") return `Parameter "${key}" must be a boolean, got ${typeof value}`;
495
- break;
496
- case "array":
497
- if (!Array.isArray(value)) return `Parameter "${key}" must be an array, got ${typeof value}`;
498
- if (schema.items) for (let i = 0; i < value.length; i++) {
499
- const itemError = validateParameterType(`${key}[${i}]`, value[i], schema.items);
500
- if (itemError) return itemError;
501
- }
502
- break;
503
- case "object":
504
- if (typeof value !== "object" || value === null || Array.isArray(value)) return `Parameter "${key}" must be an object, got ${typeof value}`;
505
- break;
506
- }
507
- if (schema.enum && schema.enum.length > 0) {
508
- const enumValues = schema.enum;
509
- let isValidEnum = false;
510
- for (const enumValue of enumValues) if (value === enumValue) {
511
- isValidEnum = true;
512
- break;
513
- }
514
- if (!isValidEnum) return `Parameter "${key}" must be one of: ${enumValues.join(", ")}, got ${value}`;
515
- }
516
- }
517
- /**
518
- * Collect all validation errors for the given parameters against a schema.
519
- */
520
- function getValidationErrors(parameters, schemaRequired, schemaProperties, additionalProperties) {
521
- const errors = [];
522
- for (const field of schemaRequired) if (!(field in parameters)) errors.push(`Missing required parameter: ${field}`);
523
- for (const [key, value] of Object.entries(parameters)) {
524
- const paramSchema = schemaProperties[key];
525
- if (!paramSchema) {
526
- if (additionalProperties === true) continue;
527
- if (additionalProperties && typeof additionalProperties === "object") {
528
- const additionalTypeError = validateParameterType(key, value, additionalProperties);
529
- if (additionalTypeError) errors.push(additionalTypeError);
530
- continue;
531
- }
532
- errors.push(`Unknown parameter: ${key}`);
533
- continue;
534
- }
535
- const typeError = validateParameterType(key, value, paramSchema);
536
- if (typeError) errors.push(typeError);
537
- }
538
- return errors;
539
- }
540
- /**
541
- * Validate parameters and return a structured result.
542
- */
543
- function validateToolParameters(parameters, schemaRequired, schemaProperties, additionalProperties) {
544
- const errors = getValidationErrors(parameters, schemaRequired, schemaProperties, additionalProperties);
545
- return {
546
- isValid: errors.length === 0,
547
- errors
548
- };
549
- }
550
- //#endregion
551
551
  //#region src/implementations/function-tool.ts
552
552
  /**
553
553
  * Function tool implementation
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/types/tool-result.ts","../../src/sandbox/types.ts","../../src/sandbox/e2b-sandbox-client.ts","../../src/sandbox/in-memory-sandbox-client.ts","../../src/sandbox/workspace-manifest.ts","../../src/registry/tool-registry.ts","../../src/implementations/function-tool/types.ts","../../src/implementations/function-tool.ts","../../src/implementations/openapi-tool.ts","../../src/implementations/function-tool/schema-converter.ts","../../src/builtins/bash-tool.ts","../../src/builtins/read-tool.ts","../../src/builtins/write-tool.ts","../../src/builtins/edit-tool.ts","../../src/builtins/glob-tool.ts","../../src/builtins/grep-tool.ts","../../src/builtins/web-fetch-tool.ts","../../src/builtins/web-search-tool.ts"],"mappings":";;;;;;UAGiB,WAAA;EACf,OAAA;EACA,MAAA;EACA,KAAA;EACA,QAAA;EAFA;EAIA,SAAA;AAAA;;;UCTe,kBAAA;EACf,SAAA;EACA,gBAAgB;AAAA;AAAA,UAGD,iBAAA;EACf,MAAA;EACA,MAAA;EACA,QAAA;AAAA;AAAA,UAGe,2BAAA;EACf,IAAA;EACA,OAAA;EACA,QAAA;AAAA;AAAA,UAGe,gCAAA;EACf,IAAI;AAAA;AAAA,UAGW,gCAAA;EACf,IAAA;EACA,GAAG;AAAA;AAAA,UAGY,qCAAA;EACf,IAAA;EACA,GAAG;AAAA;AAAA,UAGY,oCAAA;EACf,IAAA;EACA,GAAA;EACA,GAAA;EACA,OAAA;AAAA;AAAA,UAGe,8BAAA;EACf,IAAA;EACA,MAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,+BAAA;EACf,IAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,UAGe,8BAAA;EACf,IAAA;EACA,MAAA;EACA,SAAA;EACA,MAAA;AAAA;AAAA,UAGe,qCAAA;EACf,IAAA;EACA,SAAA;EACA,OAAA;EACA,MAAA;AAAA;AAAA,KAGU,uBAAA,GACR,2BAAA,GACA,gCAAA,GACA,gCAAA,GACA,qCAAA,GACA,oCAAA,GACA,8BAAA,GACA,+BAAA,GACA,8BAAA,GACA,qCAAA;AAAA,UAEa,6BAAA;EACf,IAAA;EACA,KAAK;AAAA;AAAA,UAGU,kBAAA;EACf,OAAA,EAAS,MAAA,SAAe,uBAAA;EACxB,WAAA,GAAc,MAAA;EACd,WAAA,GAAc,6BAAA;AAAA;AAAA,UAGC,8BAAA;EACf,UAAA;EACA,QAAQ;AAAA;AAAA,KAGE,6BAAA;AAAA,UAEK,8BAAA;EACf,IAAA;EACA,IAAA,EAAM,uBAAA;EACN,MAAA,EAAQ,6BAA6B;EACrC,OAAA;AAAA;AAAA,UAGe,6BAAA;EACf,OAAA,EAAS,8BAA8B;AAAA;AAAA,UAGxB,cAAA;EACf,GAAA,CAAI,OAAA,UAAiB,OAAA,GAAU,kBAAA,GAAqB,OAAA,CAAQ,iBAAA;EAC5D,QAAA,CAAS,IAAA,WAAe,OAAA;EACxB,SAAA,CAAU,IAAA,UAAc,OAAA,WAAkB,OAAA;EAC1C,aAAA,EACE,QAAA,EAAU,kBAAA,EACV,OAAA,GAAU,8BAAA,GACT,OAAA,CAAQ,6BAAA;EAhEL;EAkEN,QAAA,KAAa,OAAA;EA/DgC;EAiE7C,OAAA,EAAS,UAAA,WAAqB,OAAA;AAAA;AAAA,UAGf,mBAAA;EACf,aAAA,GAAgB,cAAc;AAAA;;;UCtHtB,uBAAA;EACR,SAAA;EACA,GAAA;EACA,UAAA;AAAA;AAAA,UAGQ,iBAAA;EACR,MAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;AAAA;AAAA,UAGQ,YAAA;EACR,GAAA,CAAI,OAAA,UAAiB,OAAA,GAAU,uBAAA,GAA0B,OAAA,CAAQ,iBAAA;AAAA;AAAA,UAGzD,SAAA;EACR,IAAA,CAAK,IAAA,WAAe,OAAA,UAAiB,UAAA;EACrC,KAAA,CAAM,IAAA,UAAc,OAAA,WAAkB,OAAA;AAAA;AAAA,UAG9B,YAAA;EACR,UAAA;EACA,EAAE;AAAA;AAAA,UAGa,kBAAA;EACf,SAAA;EACA,QAAA,EAAU,YAAA;EACV,KAAA,EAAO,SAAA;EACP,KAAA,KAAU,OAAA;EACV,OAAA,KAAY,OAAA,CAAQ,kBAAA;EACpB,cAAA,KAAmB,OAAA,CAAQ,YAAA;AAAA;AAAA,UAGZ,wBAAA;EACf,OAAA,EAAS,kBAAA;EACT,cAAA,IAAkB,SAAA,aAAsB,OAAA,CAAQ,kBAAA;EAChD,yBAAA,IAA6B,UAAA,aAAuB,OAAA,CAAQ,kBAAA;AAAA;AAAA,cAGjD,gBAAA,YAA4B,cAAA;EAAA,QAC/B,OAAA;EAAA,iBACS,cAAA;EAAA,iBACA,yBAAA;cAEL,OAAA,EAAS,wBAAA;EAMf,GAAA,CAAI,OAAA,UAAiB,OAAA,GAAU,kBAAA,GAAqB,OAAA,CAAQ,iBAAA;EAc5D,QAAA,CAAS,IAAA,WAAe,OAAA;EAKxB,SAAA,CAAU,IAAA,UAAc,OAAA,WAAkB,OAAA;EAI1C,QAAA,CAAA,GAAY,OAAA;EAoBZ,OAAA,CAAQ,UAAA,WAAqB,OAAA;AAAA;;;KChGzB,0BAAA,IACV,OAAA,UACA,OAAA,EAAS,kBAAA,cACT,KAAA,EAAO,WAAA,qBACJ,OAAA,CAAQ,iBAAA,IAAqB,iBAAA;AAAA,UAEjB,6BAAA;EACf,KAAA,GAAQ,MAAA;EACR,UAAA,GAAa,0BAA0B;AAAA;AAAA,cAG5B,qBAAA,YAAiC,cAAA;EAAA,iBAC3B,KAAA;EAAA,iBACA,SAAA;EAAA,iBACA,UAAA;EAAA,QACT,gBAAA;cAEI,OAAA,GAAS,6BAAA;EAOf,GAAA,CAAI,OAAA,UAAiB,OAAA,GAAU,kBAAA,GAAqB,OAAA,CAAQ,iBAAA;EAO5D,QAAA,CAAS,IAAA,WAAe,OAAA;EAQxB,SAAA,CAAU,IAAA,UAAc,OAAA,WAAkB,OAAA;EAI1C,QAAA,CAAA,GAAY,OAAA;EAMZ,OAAA,CAAQ,UAAA,WAAqB,OAAA;EAWnC,OAAA,CAAQ,IAAA;AAAA;;;iBC/CY,sBAAA,CACpB,aAAA,EAAe,cAAA,EACf,QAAA,EAAU,kBAAA,EACV,OAAA,GAAS,8BAAA,GACR,OAAA,CAAQ,6BAAA;AAAA,iBAmBK,6BAAA,CAA8B,IAAY;;;;AJnC1D;;;cKMa,YAAA,YAAwB,aAAA;EAAA,QAC3B,KAAA;ELLR;;;EKUA,QAAA,CAAS,IAAA,EAAM,KAAA;ELNN;AAAA;;EKmCT,UAAA,CAAW,IAAA;;AJ5Cb;;EIyDE,GAAA,CAAI,IAAA,WAAe,KAAA;EJxDnB;AACgB;AAGlB;EI2DE,MAAA,CAAA,GAAU,KAAA;;;;EAOV,UAAA,CAAA,GAAc,WAAA;EJ/Dd;;AAAQ;EImFR,GAAA,CAAI,IAAA;EJhFsC;;;EIuF1C,KAAA,CAAA;EJrFA;;;EI8FA,YAAA,CAAA;EJ1Fe;;;EIiGf,iBAAA,CAAkB,OAAA,WAAkB,MAAA,GAAS,KAAA;EJhGzC;AAGN;;EIqGE,IAAA,CAAA;EJpGA;AACG;AAGL;EAJE,QI2GQ,kBAAA;AAAA;;;;;AL9HV;;;;UMKiB,eAAA;EACf,OAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,aAAA;EACf,QAAA;EACA,SAAA,GAAY,UAAA;EACZ,SAAA,GAAY,UAAA;EACZ,MAAA,GAAS,KAAA;IAAQ,IAAA;IAAc,KAAA,GAAQ,eAAA;EAAA;EACvC,KAAA,SAAc,MAAA,SAAe,UAAA;EAC7B,IAAA,GAAO,UAAA;EACP,MAAA,GAAS,eAAA;EACT,WAAA;EACA,WAAA;AAAA;AAAA,UAGe,UAAA;EACf,KAAA,CAAM,KAAA;EACN,SAAA,CAAU,KAAA,YAAiB,eAAA;EAC3B,IAAA,GAAO,aAAa;AAAA;ALlBtB;;;AAAA,UKwBiB,8BAAA;EACf,MAAA;EACA,YAAA;EACA,aAAA;AAAA;ALxBQ;AAGV;;AAHU,UK8BO,wBAAA;EACf,kBAAA;EACA,WAAA;EACA,yBAAA;AAAA;;;ALxBG;UK8BY,8BAAA;EACf,aAAA;EACA,QAAA;EACA,UAAA,EAAY,eAAe;AAAA;ALzB7B;;;AAAA,UK+BiB,mBAAA;EACf,OAAA;EACA,IAAA,EAAM,eAAA;EACN,QAAA,GAAW,8BAA8B;AAAA;;;AN9D3C;;;;;;;AAAA,cOsBa,YAAA,YAAwB,aAAA;EAAA,SAC1B,MAAA,EAAQ,WAAA;EAAA,SACR,EAAA,EAAI,aAAA;EAAA,QACL,YAAA;cAEI,MAAA,EAAQ,WAAA,EAAa,EAAA,EAAI,aAAA;;;AN9BvC;EMuCE,OAAA,CAAA;;;ANrCgB;AAGlB;;EM2CE,eAAA,CAAgB,YAAA,EAAc,aAAA;EN3CE;;;EMkD1B,OAAA,CACJ,UAAA,EAAY,eAAA,EACZ,OAAA,GAAU,qBAAA,GACT,OAAA,CAAQ,WAAA;ENlDH;AAAA;AAGV;EMkGE,QAAA,CAAS,UAAA,EAAY,eAAA;;;;EAcrB,kBAAA,CAAmB,UAAA,EAAY,eAAA,GAAkB,0BAAA;EN7GjD;;AAAQ;EMyHR,cAAA,CAAA;ENtH+C;;;EAAA,QM6HvC,yBAAA;AAAA;;;;iBAkBM,kBAAA,CACd,IAAA,UACA,WAAA,UACA,UAAA,EAAY,WAAA,gBACZ,EAAA,EAAI,aAAA,GACH,YAAA;AN3IH;;;AAAA,iBMwJgB,qBAAA,CACd,IAAA,UACA,WAAA,UACA,SAAA,EAAW,UAAA,EACX,EAAA,EAAI,aAAA,GACH,YAAA;;;;APpLH;;;;;;cQsBa,WAAA,YAAuB,KAAA;EAAA,SACzB,MAAA,EAAQ,WAAA;EAAA,iBACA,OAAA;EAAA,iBACA,WAAA;EAAA,iBACA,OAAA;EAAA,iBACA,MAAA;EAAA,QACT,YAAA;cAEI,MAAA,EAAQ,kBAAA;EPjCL;;;EOuDT,OAAA,CACJ,UAAA,EAAY,eAAA,EACZ,OAAA,GAAU,qBAAA,GACT,OAAA,CAAQ,WAAA;EPxDK;AAGlB;;EOsGE,QAAA,CAAS,UAAA,EAAY,eAAA;EPtGW;;;EO6GhC,kBAAA,CAAmB,UAAA,EAAY,eAAA,GAAkB,0BAAA;EP1GzC;AAAA;AAGV;EO0HE,OAAA,CAAA;;;;EAOA,eAAA,CAAgB,YAAA,EAAc,aAAA;EP9H9B;;AAAQ;EOqIR,cAAA,CAAA;EPlI+C;;;AAC3C;EAD2C,QO0IjC,cAAA;EPtIiC;;;EAAA,QOyJvC,kBAAA;EPpJO;;;EAAA,QO6OP,uBAAA;AAAA;APxOV;;;AAAA,iBOwPgB,iBAAA,CAAkB,MAAA,EAAQ,kBAAA,GAAqB,WAAW;;;;;;iBC/P1D,eAAA,CACd,MAAA,EAAQ,UAAA,EACR,OAAA,GAAS,wBAAA,GACR,WAAA;;;;;;iBC+Ga,cAAA,CAAe,OAAA,GAAS,mBAAA,GAAwB,YAAA;;AVjIrD;;cUgJE,QAAA,EAA2B,YAAA;;;;;;iBCKxB,cAAA,CAAe,OAAA,GAAS,mBAAA,GAAwB,YAAA;;;AXrJrD;cWmKE,QAAA,EAA2B,YAAA;;;;;;iBC/HxB,eAAA,CAAgB,OAAA,GAAS,mBAAA,GAAwB,YAAA;;;;cAcpD,SAAA,EAA6B,YAAA;;;;;;iBCkD1B,cAAA,CAAe,OAAA,GAAS,mBAAA,GAAwB,YAAA;;;AbpGrD;cakHE,QAAA,EAA2B,YAAA;;;;;;AbxHxC;;;;;;cc+Fa,QAAA,EAOZ,YAAA;;;;;;AdtGD;;;;;;;ce4Na,QAAA,EAOZ,YAAA;;;;;;AfnOD;;;cgBgGa,YAAA,EAKZ,YAAA;;;;;;AhBrGD;;;ciB6Fa,aAAA,EAKZ,YAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/types/tool-result.ts","../../src/sandbox/types.ts","../../src/sandbox/e2b-sandbox-client.ts","../../src/sandbox/in-memory-sandbox-client.ts","../../src/sandbox/workspace-manifest.ts","../../src/registry/tool-registry.ts","../../src/implementations/function-tool/types.ts","../../src/implementations/function-tool.ts","../../src/implementations/openapi-tool.ts","../../src/implementations/function-tool/schema-converter.ts","../../src/builtins/bash-tool.ts","../../src/builtins/read-tool.ts","../../src/builtins/write-tool.ts","../../src/builtins/edit-tool.ts","../../src/builtins/glob-tool.ts","../../src/builtins/grep-tool.ts","../../src/builtins/web-fetch-tool.ts","../../src/builtins/web-search-tool.ts"],"mappings":"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"}