helios-ai-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/helios/errors.js","../src/helios/lexer.js","../src/helios/ast.js","../src/helios/parser.js","../src/helios/typechecker.js","../src/helios/mcp.js","../src/helios/evaluator.js","../src/helios/memory.js","../src/helios/stdlib.js","../src/helios/jsBridge.js","../src/helios/models.js","../src/helios/sdk.ts"],"sourcesContent":["/**\n * Helios Custom Error Types\n */\n\nexport class HeliosError extends Error {\n constructor(message, line, col, phase, suggestion = null, source = null) {\n super(message);\n this.name = 'HeliosError';\n this.line = line;\n this.col = col;\n this.phase = phase; // 'Lexing', 'Parsing', 'TypeChecking', 'Evaluation'\n this.suggestion = suggestion;\n this.source = source;\n }\n\n format(providedSource = null) {\n const source = this.source || providedSource;\n const location = (this.line !== undefined && this.col !== undefined) \n ? ` at ${this.line}:${this.col}` \n : '';\n \n let output = `[${this.phase} Error]${location}: ${this.message}`;\n\n if (source && this.line !== undefined) {\n const lines = source.split('\\n');\n const errorLine = lines[this.line - 1];\n if (errorLine !== undefined) {\n output += `\\n\\n${this.line} | ${errorLine}`;\n if (this.col !== undefined) {\n const padding = ' '.repeat(String(this.line).length + 3 + this.col - 1);\n output += `\\n${padding}^`;\n }\n }\n }\n\n if (this.suggestion) {\n output += `\\n\\nSuggestion: ${this.suggestion}`;\n }\n\n return output;\n }\n}\n\nexport class HeliosSyntaxError extends HeliosError {\n constructor(message, line, col, suggestion = null, source = null) {\n super(message, line, col, 'Parsing', suggestion, source);\n this.name = 'HeliosSyntaxError';\n }\n}\n\nexport class HeliosLexicalError extends HeliosError {\n constructor(message, line, col, suggestion = null, source = null) {\n super(message, line, col, 'Lexing', suggestion, source);\n this.name = 'HeliosLexicalError';\n }\n}\n\nexport class HeliosTypeError extends HeliosError {\n constructor(message, line, col, suggestion = null, source = null) {\n super(message, line, col, 'TypeChecking', suggestion, source);\n this.name = 'HeliosTypeError';\n }\n}\n\nexport class HeliosRuntimeError extends HeliosError {\n constructor(message, line, col, suggestion = null, source = null) {\n super(message, line, col, 'Evaluation', suggestion, source);\n this.name = 'HeliosRuntimeError';\n }\n}\n","/**\n * Helios Lexer (Tokenizer)\n */\n\nimport { HeliosLexicalError } from './errors.js';\n\nexport const TokenType = {\n KEYWORD: 'KEYWORD',\n IDENTIFIER: 'IDENTIFIER',\n NUMBER: 'NUMBER',\n STRING: 'STRING',\n OPERATOR: 'OPERATOR',\n DELIMITER: 'DELIMITER',\n ANNOTATION: 'ANNOTATION',\n EOF: 'EOF'\n};\n\nconst KEYWORDS = new Set([\n 'export', 'fn', 'let', 'var', 'type', 'opaque', 'wrapping', 'enum', 'struct', \n 'trait', 'impl', 'match', 'if', 'else', 'while', 'for', 'in', 'from', 'loop', 'return', \n 'uses', 'prompt', 'as', 'fallback', 'retries', 'timeout', 'model', 'using', \n 'schema', 'pipeline', 'stage', 'test', 'ai', 'import', 'comptime', 'new',\n 'unsafe', 'Result', 'Option', 'true', 'false', 'null', 'Unit', 'Int', 'Float', \n 'Bool', 'String', 'Char', 'Byte', 'Never', 'UUID', 'Date', 'async', 'await',\n 'with', 'tools'\n]);\n\nconst OPERATORS = [\n '->', '=>', '==', '!=', '<=', '>=', '|>', '=', '+', '-', '*', '/', \n '&&', '||', '!', '?', '.', ':', ',', ';', '|', '&', '<', '>'\n];\n\nconst DELIMITERS = ['(', ')', '{', '}', '[', ']'];\n\nexport class Token {\n constructor(type, value, line, col) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.col = col;\n }\n}\n\nexport class Lexer {\n constructor(source) {\n this.source = source;\n this.pos = 0;\n this.line = 1;\n this.col = 1;\n }\n\n peek() {\n return this.source[this.pos];\n }\n\n advance() {\n const char = this.source[this.pos++];\n if (char === '\\n') {\n this.line++;\n this.col = 1;\n } else {\n this.col++;\n }\n return char;\n }\n\n skipWhitespace() {\n while (this.pos < this.source.length) {\n const char = this.peek();\n if (/\\s/.test(char)) {\n this.advance();\n } else if (char === '/' && this.source[this.pos + 1] === '/') {\n // Line comment\n while (this.pos < this.source.length && this.peek() !== '\\n') {\n this.advance();\n }\n } else if (char === '/' && this.source[this.pos + 1] === '*') {\n // Multi-line comment\n this.advance(); // consume /\n this.advance(); // consume *\n while (this.pos < this.source.length) {\n if (this.peek() === '*' && this.source[this.pos + 1] === '/') {\n this.advance(); // consume *\n this.advance(); // consume /\n break;\n }\n this.advance();\n }\n } else {\n break;\n }\n }\n }\n\n nextToken() {\n this.skipWhitespace();\n\n if (this.pos >= this.source.length) {\n return new Token(TokenType.EOF, null, this.line, this.col);\n }\n\n const char = this.peek();\n const startLine = this.line;\n const startCol = this.col;\n\n // Annotation\n if (char === '@') {\n this.advance();\n let value = '';\n while (this.pos < this.source.length && /[a-zA-Z0-9_]/.test(this.peek())) {\n value += this.advance();\n }\n return new Token(TokenType.ANNOTATION, value, startLine, startCol);\n }\n\n // Identifier or Keyword\n if (/[a-zA-Z_]/.test(char)) {\n let value = '';\n while (this.pos < this.source.length && /[a-zA-Z0-9_]/.test(this.peek())) {\n value += this.advance();\n }\n if (KEYWORDS.has(value)) {\n return new Token(TokenType.KEYWORD, value, startLine, startCol);\n }\n return new Token(TokenType.IDENTIFIER, value, startLine, startCol);\n }\n\n // Number\n if (/[0-9]/.test(char)) {\n let value = '';\n while (this.pos < this.source.length && /[0-9.]/.test(this.peek())) {\n value += this.advance();\n }\n return new Token(TokenType.NUMBER, value, startLine, startCol);\n }\n\n // String\n if (char === '\"' || char === \"'\") {\n const quote = this.advance();\n let value = '';\n while (this.pos < this.source.length && this.peek() !== quote) {\n if (this.peek() === '\\\\') {\n this.advance(); // consume \\\n const next = this.advance();\n switch (next) {\n case 'n': value += '\\n'; break;\n case 'r': value += '\\r'; break;\n case 't': value += '\\t'; break;\n case '\\\\': value += '\\\\'; break;\n case '\"': value += '\"'; break;\n case \"'\": value += \"'\"; break;\n default: value += next; break;\n }\n } else {\n value += this.advance();\n }\n }\n if (this.pos >= this.source.length) {\n throw new HeliosLexicalError(`Unterminated string literal`, startLine, startCol, `Add a closing ${quote} to end the string.`, this.source);\n }\n this.advance(); // consume closing quote\n return new Token(TokenType.STRING, value, startLine, startCol);\n }\n\n // Multi-char operators\n for (const op of OPERATORS.filter(o => o.length > 1)) {\n if (this.source.startsWith(op, this.pos)) {\n this.pos += op.length;\n this.col += op.length;\n return new Token(TokenType.OPERATOR, op, startLine, startCol);\n }\n }\n\n // Single-char operators and delimiters\n if (OPERATORS.includes(char)) {\n return new Token(TokenType.OPERATOR, this.advance(), startLine, startCol);\n }\n if (DELIMITERS.includes(char)) {\n return new Token(TokenType.DELIMITER, this.advance(), startLine, startCol);\n }\n\n throw new HeliosLexicalError(`Unexpected character: ${char}`, this.line, this.col, null, this.source);\n }\n\n tokenize() {\n const tokens = [];\n let token;\n do {\n token = this.nextToken();\n tokens.push(token);\n } while (token.type !== TokenType.EOF);\n return tokens;\n }\n}\n","/**\n * Helios AST Node Definitions\n */\n\nexport class Node {\n constructor(type, line, col) {\n this.type = type;\n this.line = line;\n this.col = col;\n }\n}\n\nexport class Program extends Node {\n constructor(body, line, col) {\n super('Program', line, col);\n this.body = body; // Array of TopLevel nodes\n }\n}\n\nexport class ImportDeclaration extends Node {\n constructor(source, specifiers, isExternal = false, uses = [], line, col) {\n super('ImportDeclaration', line, col);\n this.source = source; // String literal\n this.specifiers = specifiers; // Array of { name: string, alias: string | null }\n this.isExternal = isExternal; // True if it's an npm/js import\n this.uses = uses; // List of runtimes (e.g., ['js'])\n }\n}\n\nexport class FunctionDeclaration extends Node {\n constructor(name, params, returnType, effects, body, annotations = [], isExported = false, isAsync = false, typeParameters = [], line, col) {\n super('FunctionDeclaration', line, col);\n this.name = name;\n this.params = params;\n this.returnType = returnType;\n this.effects = effects;\n this.body = body;\n this.annotations = annotations;\n this.isExported = isExported;\n this.isAsync = isAsync;\n this.typeParameters = typeParameters;\n }\n}\n\nexport class Parameter extends Node {\n constructor(name, typeAnnotation, defaultValue = null, line, col) {\n super('Parameter', line, col);\n this.name = name;\n this.typeAnnotation = typeAnnotation;\n this.defaultValue = defaultValue;\n }\n}\n\nexport class VariableDeclaration extends Node {\n constructor(kind, pattern, typeAnnotation, init, line, col) {\n super('VariableDeclaration', line, col);\n this.kind = kind; // 'let' or 'var'\n this.pattern = pattern;\n this.typeAnnotation = typeAnnotation;\n this.init = init;\n }\n}\n\nexport class AssignmentExpression extends Node {\n constructor(left, value, line, col) {\n super('AssignmentExpression', line, col);\n this.left = left; // Identifier or MemberExpression\n this.value = value; // Expression\n }\n}\n\nexport class ArrayLiteral extends Node {\n constructor(elements, line, col) {\n super('ArrayLiteral', line, col);\n this.elements = elements;\n }\n}\n\nexport class ObjectLiteral extends Node {\n constructor(properties, line, col) {\n super('ObjectLiteral', line, col);\n this.properties = properties; // Array of { key: string, value: Expression }\n }\n}\n\nexport class MemberExpression extends Node {\n constructor(object, property, line, col) {\n super('MemberExpression', line, col);\n this.object = object;\n this.property = property;\n }\n}\n\nexport class TypeDeclaration extends Node {\n constructor(name, value, typeParams = [], line, col) {\n super('TypeDeclaration', line, col);\n this.name = name;\n this.value = value;\n this.typeParams = typeParams;\n }\n}\n\nexport class OpaqueTypeDeclaration extends Node {\n constructor(name, wrappingType) {\n super('OpaqueTypeDeclaration');\n this.name = name;\n this.wrappingType = wrappingType;\n }\n}\n\nexport class EnumDeclaration extends Node {\n constructor(name, variants, typeParams = []) {\n super('EnumDeclaration');\n this.name = name;\n this.variants = variants;\n this.typeParams = typeParams;\n }\n}\n\nexport class StructDeclaration extends Node {\n constructor(name, fields, typeParams = []) {\n super('StructDeclaration');\n this.name = name;\n this.fields = fields;\n this.typeParams = typeParams;\n }\n}\n\nexport class SchemaDeclaration extends Node {\n constructor(name, fields) {\n super('SchemaDeclaration');\n this.name = name;\n this.fields = fields;\n }\n}\n\nexport class ModelDeclaration extends Node {\n constructor(name, fields) {\n super('ModelDeclaration');\n this.name = name;\n this.fields = fields;\n }\n}\n\nexport class PromptExpression extends Node {\n constructor(template, asType, schema, fallback, retries, timeout, guardrails, model, tools, history, contexts, line, col) {\n super('PromptExpression', line, col);\n this.template = template;\n this.asType = asType;\n this.schema = schema;\n this.fallback = fallback;\n this.retries = retries;\n this.timeout = timeout;\n this.guardrails = guardrails;\n this.model = model;\n this.tools = tools;\n this.history = history;\n this.contexts = contexts; // Array of expressions\n }\n}\n\nexport class WithContextStatement extends Node {\n constructor(context, body, line, col) {\n super('WithContextStatement', line, col);\n this.context = context; // Array of expressions\n this.body = body; // Array of statements\n }\n}\n\nexport class MatchExpression extends Node {\n constructor(discriminant, arms, line, col) {\n super('MatchExpression', line, col);\n this.discriminant = discriminant;\n this.arms = arms;\n }\n}\n\nexport class MatchArm extends Node {\n constructor(pattern, guard, body, line, col) {\n super('MatchArm', line, col);\n this.pattern = pattern;\n this.guard = guard;\n this.body = body;\n }\n}\n\nexport class IfExpression extends Node {\n constructor(condition, consequent, alternate, line, col) {\n super('IfExpression', line, col);\n this.condition = condition;\n this.consequent = consequent; // Array of statements\n this.alternate = alternate; // Array of statements or IfExpression\n }\n}\n\nexport class WhileStatement extends Node {\n constructor(condition, body, line, col) {\n super('WhileStatement', line, col);\n this.condition = condition;\n this.body = body; // Array of statements\n }\n}\n\nexport class ForStatement extends Node {\n constructor(iterator, iterable, body, line, col) {\n super('ForStatement', line, col);\n this.iterator = iterator; // Identifier name\n this.iterable = iterable; // Expression\n this.body = body; // Array of statements\n }\n}\n\nexport class ComptimeBlock extends Node {\n constructor(body, line, col) {\n super('ComptimeBlock', line, col);\n this.body = body; // Array of statements\n }\n}\n\nexport class BinaryExpression extends Node {\n constructor(left, operator, right, line, col) {\n super('BinaryExpression', line, col);\n this.left = left;\n this.operator = operator;\n this.right = right;\n }\n}\n\nexport class CallExpression extends Node {\n constructor(callee, args, typeArguments = [], line, col) {\n super('CallExpression', line, col);\n this.callee = callee;\n this.arguments = args;\n this.typeArguments = typeArguments;\n }\n}\n\nexport class NewExpression extends Node {\n constructor(callee, args, line, col) {\n super('NewExpression', line, col);\n this.callee = callee;\n this.arguments = args;\n }\n}\n\nexport class ReturnStatement extends Node {\n constructor(argument, line, col) {\n super('ReturnStatement', line, col);\n this.argument = argument;\n }\n}\n\nexport class UnaryExpression extends Node {\n constructor(operator, argument, line, col) {\n super('UnaryExpression', line, col);\n this.operator = operator;\n this.argument = argument;\n }\n}\n\nexport class AwaitExpression extends Node {\n constructor(argument, line, col) {\n super('AwaitExpression', line, col);\n this.argument = argument;\n }\n}\n\nexport class Literal extends Node {\n constructor(value, kind, line, col) {\n super('Literal', line, col);\n this.value = value;\n this.kind = kind; // 'Int', 'Float', 'String', 'Bool'\n }\n}\n\nexport class Identifier extends Node {\n constructor(name, line, col) {\n super('Identifier', line, col);\n this.name = name;\n }\n}\n","/**\n * Helios Parser (Recursive Descent)\n */\n\nimport { \n Program, \n ImportDeclaration,\n FunctionDeclaration, \n Parameter, \n VariableDeclaration, \n AssignmentExpression,\n Literal, \n Identifier,\n BinaryExpression,\n UnaryExpression,\n CallExpression,\n NewExpression,\n ReturnStatement,\n IfExpression,\n PromptExpression,\n WhileStatement,\n ForStatement,\n ArrayLiteral,\n ObjectLiteral,\n MemberExpression,\n TypeDeclaration,\n AwaitExpression,\n WithContextStatement,\n MatchExpression,\n MatchArm,\n ComptimeBlock\n} from './ast.js';\nimport { TokenType } from './lexer.js';\nimport { HeliosSyntaxError } from './errors.js';\n\nexport class Parser {\n constructor(tokens, source = null) {\n this.tokens = tokens;\n this.source = source;\n this.pos = 0;\n }\n\n peek() {\n return this.tokens[this.pos] || { type: TokenType.EOF };\n }\n\n advance() {\n return this.tokens[this.pos++] || { type: TokenType.EOF };\n }\n\n expect(type, value = null) {\n const token = this.peek();\n if (token.type !== type || (value !== null && token.value !== value)) {\n const expected = value ? `'${value}'` : type;\n const found = token.type === TokenType.EOF ? 'end of file' : `'${token.value}'`;\n const suggestion = `Try adding ${expected} before ${found} or check for typos.`;\n throw new HeliosSyntaxError(`Expected ${expected}, but found ${token.type} ${found}`, token.line, token.col, suggestion, this.source);\n }\n return this.advance();\n }\n\n parse() {\n const firstToken = this.peek();\n const body = [];\n while (this.peek().type !== TokenType.EOF) {\n body.push(this.parseTopLevel());\n }\n return new Program(body, firstToken.line, firstToken.col);\n }\n\n parseTopLevel() {\n const firstToken = this.peek();\n const annotations = [];\n while (this.peek().type === TokenType.ANNOTATION) {\n annotations.push(this.parseAnnotation());\n }\n\n let isExported = false;\n if (this.peek().type === TokenType.KEYWORD && this.peek().value === 'export') {\n this.advance();\n isExported = true;\n }\n\n let isAsync = false;\n if (this.peek().type === TokenType.KEYWORD && this.peek().value === 'async') {\n this.advance();\n isAsync = true;\n }\n\n const token = this.peek();\n // Function declarations are unique to top-level (or specific blocks)\n if (token.type === TokenType.KEYWORD) {\n if (token.value === 'fn') {\n return this.parseFunctionDeclaration(annotations, isExported, isAsync, firstToken.line, firstToken.col);\n }\n if (token.value === 'import') {\n return this.parseImportDeclaration();\n }\n }\n\n // Fallback to general statement parsing (handles let, var, and expressions)\n try {\n const stmt = this.parseStatement();\n if (stmt && isExported) {\n stmt.isExported = true;\n }\n return stmt;\n } catch (err) {\n if (err instanceof HeliosSyntaxError) throw err;\n throw new HeliosSyntaxError(`Unexpected token in top-level: ${token.type} '${token.value}'`, token.line, token.col, null, this.source);\n }\n }\n\n parseImportDeclaration() {\n const startToken = this.expect(TokenType.KEYWORD, 'import');\n const specifiers = [];\n \n if (this.peek().value === '{') {\n this.advance();\n while (this.peek().value !== '}' && this.peek().type !== TokenType.EOF) {\n const name = this.expect(TokenType.IDENTIFIER).value;\n let alias = null;\n if (this.peek().value === 'as') {\n this.advance(); // consume 'as'\n alias = this.expect(TokenType.IDENTIFIER).value;\n }\n specifiers.push({ name, alias });\n if (this.peek().value === ',') this.advance();\n }\n this.expect(TokenType.DELIMITER, '}');\n this.expect(TokenType.KEYWORD, 'from');\n }\n \n const sourceToken = this.peek();\n let source;\n if (sourceToken.type === TokenType.STRING) {\n source = this.advance().value;\n } else if (sourceToken.type === TokenType.IDENTIFIER || sourceToken.type === TokenType.KEYWORD) {\n source = this.advance().value;\n } else {\n throw new HeliosSyntaxError(`Expected String, Identifier, or Keyword for import source, found ${sourceToken.type} '${sourceToken.value}'`, sourceToken.line, sourceToken.col, null, this.source);\n }\n\n let isExternal = source.startsWith('npm:') || source.startsWith('http');\n let uses = [];\n\n if (this.peek().value === 'uses') {\n this.advance();\n this.expect(TokenType.DELIMITER, '[');\n while (this.peek().value !== ']' && this.peek().type !== TokenType.EOF) {\n uses.push(this.advance().value);\n if (this.peek().value === ',') this.advance();\n }\n this.expect(TokenType.DELIMITER, ']');\n isExternal = true;\n }\n\n return new ImportDeclaration(source, specifiers, isExternal, uses, startToken.line, startToken.col);\n }\n\n parseAnnotation() {\n const name = this.expect(TokenType.ANNOTATION).value;\n let args = null;\n if (this.peek().value === '(') {\n this.advance(); // consume (\n args = '';\n let depth = 1;\n while (depth > 0 && this.peek().type !== TokenType.EOF) {\n const t = this.advance();\n if (t.value === '(') depth++;\n if (t.value === ')') depth--;\n if (depth > 0) args += t.value;\n else if (t.value === ')') break;\n }\n }\n return { name, args };\n }\n\n parseFunctionDeclaration(annotations, isExported, isAsync, line, col) {\n this.expect(TokenType.KEYWORD, 'fn');\n const nameToken = this.expect(TokenType.IDENTIFIER);\n const name = nameToken.value;\n \n let typeParameters = [];\n if (this.peek().value === '<') {\n typeParameters = this.parseTypeParameters();\n }\n\n this.expect(TokenType.DELIMITER, '(');\n const params = [];\n if (this.peek().value !== ')') {\n do {\n params.push(this.parseParameter());\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== ')' && this.peek().type !== TokenType.EOF);\n }\n this.expect(TokenType.DELIMITER, ')');\n\n let returnType = null;\n if (this.peek().value === '->') {\n this.advance();\n returnType = this.parseType();\n }\n\n let effects = [];\n if (isAsync && !effects.includes('async')) {\n effects.push('async');\n }\n if (this.peek().value === 'uses') {\n this.advance();\n this.expect(TokenType.DELIMITER, '[');\n while (this.peek().value !== ']' && this.peek().type !== TokenType.EOF) {\n const effect = this.advance().value;\n if (!effects.includes(effect)) {\n effects.push(effect);\n }\n if (this.peek().value === ',') this.advance();\n }\n this.expect(TokenType.DELIMITER, ']');\n }\n\n const body = this.parseBlock();\n return new FunctionDeclaration(name, params, returnType, effects, body, annotations, isExported, isAsync, typeParameters, line || nameToken.line, col || nameToken.col);\n }\n\n parseTypeParameters() {\n this.expect(TokenType.OPERATOR, '<');\n const params = [];\n do {\n params.push(this.expect(TokenType.IDENTIFIER).value);\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== '>' && this.peek().type !== TokenType.EOF);\n this.expect(TokenType.OPERATOR, '>');\n return params;\n }\n\n parseParameter() {\n const nameToken = this.expect(TokenType.IDENTIFIER);\n const name = nameToken.value;\n this.expect(TokenType.OPERATOR, ':');\n const type = this.parseType();\n return new Parameter(name, type, null, nameToken.line, nameToken.col);\n }\n\n parseTypeDeclaration() {\n const startToken = this.expect(TokenType.KEYWORD, 'type');\n const name = this.expect(TokenType.IDENTIFIER).value;\n \n let typeParams = [];\n if (this.peek().value === '<') {\n typeParams = this.parseTypeParameters();\n }\n\n this.expect(TokenType.OPERATOR, '=');\n const value = this.parseType();\n return new TypeDeclaration(name, value, typeParams, startToken.line, startToken.col);\n }\n\n parseType() {\n const token = this.peek();\n if (token.value === '[') {\n this.advance();\n const elementType = this.parseType();\n this.expect(TokenType.DELIMITER, ']');\n return { type: 'ArrayType', elementType };\n }\n if (token.value === '{') {\n this.advance();\n const fields = {};\n while (this.peek().value !== '}' && this.peek().type !== TokenType.EOF) {\n const keyToken = this.peek();\n let key;\n if (keyToken.type === TokenType.IDENTIFIER || keyToken.type === TokenType.STRING || keyToken.type === TokenType.KEYWORD) {\n key = this.advance().value;\n } else {\n throw new HeliosSyntaxError(`Expected Identifier, String, or Keyword for object key, found ${keyToken.type} '${keyToken.value}'`, keyToken.line, keyToken.col, null, this.source);\n }\n this.expect(TokenType.OPERATOR, ':');\n fields[key] = this.parseType();\n if (this.peek().value === ',') this.advance();\n else break;\n }\n this.expect(TokenType.DELIMITER, '}');\n return { type: 'ObjectType', fields };\n }\n if (token.type === TokenType.KEYWORD || token.type === TokenType.IDENTIFIER) {\n const name = this.advance().value;\n if (this.peek().value === '<') {\n this.advance();\n const typeArguments = [];\n do {\n typeArguments.push(this.parseType());\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== '>' && this.peek().type !== TokenType.EOF);\n this.expect(TokenType.OPERATOR, '>');\n return { type: 'TypeReference', name, typeArguments };\n }\n return name;\n }\n throw new HeliosSyntaxError(`Expected type (Keyword or Identifier), found ${token.type} '${token.value}'`, token.line, token.col, null, this.source);\n }\n\n parseBlock() {\n this.expect(TokenType.DELIMITER, '{');\n const body = [];\n while (this.peek().value !== '}' && this.peek().type !== TokenType.EOF) {\n body.push(this.parseStatement());\n if (this.peek().value === ';') this.advance();\n }\n this.expect(TokenType.DELIMITER, '}');\n return body;\n }\n\n parseStatement() {\n const token = this.peek();\n if (token.value === ';') {\n this.advance();\n return null;\n }\n let stmt;\n if (token.type === TokenType.KEYWORD) {\n if (token.value === 'let' || token.value === 'var') {\n stmt = this.parseVariableDeclaration();\n } else if (token.value === 'return') {\n const startToken = this.advance();\n let arg = null;\n if (this.peek().value !== ';' && this.peek().value !== '}') {\n arg = this.parseExpression();\n }\n stmt = new ReturnStatement(arg, startToken.line, startToken.col);\n } else if (token.value === 'if') {\n stmt = this.parseIfExpression();\n } else if (token.value === 'while') {\n stmt = this.parseWhileStatement();\n } else if (token.value === 'for') {\n stmt = this.parseForStatement();\n } else if (token.value === 'type') {\n stmt = this.parseTypeDeclaration();\n } else if (token.value === 'with') {\n stmt = this.parseWithContextStatement();\n } else if (token.value === 'comptime') {\n stmt = this.parseComptimeBlock();\n } else {\n stmt = this.parseExpression();\n }\n } else {\n stmt = this.parseExpression();\n }\n\n // Optional semicolon\n if (this.peek().value === ';') {\n this.advance();\n }\n \n return stmt;\n }\n\n parseComptimeBlock() {\n const startToken = this.expect(TokenType.KEYWORD, 'comptime');\n const body = this.parseBlock();\n return new ComptimeBlock(body, startToken.line, startToken.col);\n }\n\n parseWithContextStatement() {\n const startToken = this.expect(TokenType.KEYWORD, 'with');\n this.expect(TokenType.IDENTIFIER, 'context');\n this.expect(TokenType.DELIMITER, '(');\n const context = [];\n if (this.peek().value !== ')') {\n do {\n context.push(this.parseExpression());\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== ')' && this.peek().type !== TokenType.EOF);\n }\n this.expect(TokenType.DELIMITER, ')');\n const body = this.parseBlock();\n return new WithContextStatement(context, body, startToken.line, startToken.col);\n }\n\n parseWhileStatement() {\n const startToken = this.expect(TokenType.KEYWORD, 'while');\n const condition = this.parseExpression();\n const body = this.parseBlock();\n return new WhileStatement(condition, body, startToken.line, startToken.col);\n }\n\n parseIfExpression() {\n const startToken = this.expect(TokenType.KEYWORD, 'if');\n const condition = this.parseExpression();\n const consequent = this.parseBlock();\n let alternate = null;\n if (this.peek().type === TokenType.KEYWORD && this.peek().value === 'else') {\n this.advance();\n if (this.peek().type === TokenType.KEYWORD && this.peek().value === 'if') {\n alternate = this.parseIfExpression();\n } else {\n alternate = this.parseBlock();\n }\n }\n return new IfExpression(condition, consequent, alternate, startToken.line, startToken.col);\n }\n\n parseMatchExpression() {\n const startToken = this.expect(TokenType.KEYWORD, 'match');\n const discriminant = this.parseExpression();\n this.expect(TokenType.DELIMITER, '{');\n const arms = [];\n while (this.peek().value !== '}' && this.peek().type !== TokenType.EOF) {\n arms.push(this.parseMatchArm());\n if (this.peek().value === ',') this.advance();\n }\n this.expect(TokenType.DELIMITER, '}');\n return new MatchExpression(discriminant, arms, startToken.line, startToken.col);\n }\n\n parseMatchArm() {\n const pattern = this.parseExpression();\n let guard = null;\n if (this.peek().type === TokenType.KEYWORD && this.peek().value === 'if') {\n this.advance();\n guard = this.parseExpression();\n }\n this.expect(TokenType.OPERATOR, '=>');\n let body;\n if (this.peek().value === '{') {\n body = this.parseBlock();\n } else {\n body = this.parseExpression();\n }\n return new MatchArm(pattern, guard, body, pattern.line, pattern.col);\n }\n\n parseNewExpression() {\n const startToken = this.expect(TokenType.KEYWORD, 'new');\n const calleeToken = this.peek();\n let callee;\n if (calleeToken.type === TokenType.IDENTIFIER || calleeToken.type === TokenType.KEYWORD) {\n callee = new Identifier(this.advance().value, calleeToken.line, calleeToken.col);\n } else {\n throw new HeliosSyntaxError(`Expected identifier or type after 'new'`, calleeToken.line, calleeToken.col, null, this.source);\n }\n \n const args = [];\n if (this.peek().value === '(') {\n this.advance();\n if (this.peek().value !== ')') {\n do {\n args.push(this.parseExpression());\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== ')' && this.peek().type !== TokenType.EOF);\n }\n this.expect(TokenType.DELIMITER, ')');\n }\n return new NewExpression(callee, args, startToken.line, startToken.col);\n }\n\n parseForStatement() {\n const startToken = this.expect(TokenType.KEYWORD, 'for');\n const iterator = this.expect(TokenType.IDENTIFIER).value;\n this.expect(TokenType.KEYWORD, 'in');\n const iterable = this.parseExpression();\n const body = this.parseBlock();\n return new ForStatement(iterator, iterable, body, startToken.line, startToken.col);\n }\n\n parseVariableDeclaration() {\n const startToken = this.advance();\n const kind = startToken.value;\n const nameToken = this.expect(TokenType.IDENTIFIER);\n const name = nameToken.value;\n let typeAnnotation = null;\n if (this.peek().value === ':') {\n this.advance();\n typeAnnotation = this.parseType();\n }\n this.expect(TokenType.OPERATOR, '=');\n const init = this.parseExpression();\n return new VariableDeclaration(kind, name, typeAnnotation, init, startToken.line, startToken.col);\n }\n\n parseExpression() {\n let left = this.parseBinaryExpression();\n if (this.peek()?.value === '=') {\n const eqToken = this.advance();\n const right = this.parseExpression();\n return new AssignmentExpression(left, right, eqToken.line, eqToken.col);\n }\n return left;\n }\n\n parseBinaryExpression() {\n let left = this.parseUnaryExpression();\n while (this.peek()?.type === TokenType.OPERATOR && ['+', '-', '*', '/', '==', '!=', '<', '>', '<=', '>=', '|>', '&&', '||'].includes(this.peek().value)) {\n const opToken = this.advance();\n const operator = opToken.value;\n const right = this.parseUnaryExpression();\n left = new BinaryExpression(left, operator, right, opToken.line, opToken.col);\n }\n return left;\n }\n\n parseUnaryExpression() {\n const token = this.peek();\n if (token.type === TokenType.OPERATOR && (token.value === '-' || token.value === '!')) {\n const opToken = this.advance();\n const argument = this.parseUnaryExpression();\n return new UnaryExpression(opToken.value, argument, opToken.line, opToken.col);\n }\n if (token.type === TokenType.KEYWORD && token.value === 'await') {\n const awaitToken = this.advance();\n const argument = this.parseUnaryExpression();\n return new AwaitExpression(argument, awaitToken.line, awaitToken.col);\n }\n return this.parsePostfixExpression();\n }\n\n parsePostfixExpression() {\n let expr = this.parsePrimaryExpression();\n while (true) {\n if (this.peek()?.value === '[') {\n const bracketToken = this.advance();\n const property = this.parseExpression();\n this.expect(TokenType.DELIMITER, ']');\n expr = new MemberExpression(expr, property, bracketToken.line, bracketToken.col);\n } else if (this.peek()?.value === '.') {\n const dotToken = this.advance();\n const propertyToken = this.expect(TokenType.IDENTIFIER);\n const property = new Literal(propertyToken.value, 'String', propertyToken.line, propertyToken.col);\n expr = new MemberExpression(expr, property, dotToken.line, dotToken.col);\n } else if (this.peek()?.value === '(' || (expr.type === 'Identifier' && this.lookaheadIsGeneric())) {\n let typeArguments = [];\n if (this.peek().value === '<') {\n this.advance();\n do {\n typeArguments.push(this.parseType());\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== '>' && this.peek().type !== TokenType.EOF);\n this.expect(TokenType.OPERATOR, '>');\n }\n\n if (this.peek().value === '(') {\n const parenToken = this.advance();\n const args = [];\n if (this.peek().value !== ')') {\n do {\n args.push(this.parseExpression());\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== ')' && this.peek().type !== TokenType.EOF);\n }\n this.expect(TokenType.DELIMITER, ')');\n expr = new CallExpression(expr, args, typeArguments, parenToken.line, parenToken.col);\n } else if (typeArguments.length > 0) {\n // If we had type arguments but no parens, it might be a generic type instantiation or something else\n // For now, let's assume it's part of a call or we'll error out if it's just `foo<Int>` without `()`\n throw new HeliosSyntaxError(`Expected '(' after type arguments in call`, this.peek().line, this.peek().col, null, this.source);\n }\n } else {\n break;\n }\n }\n return expr;\n }\n\n lookaheadIsGeneric() {\n if (this.peek()?.value !== '<') return false;\n let i = this.pos + 1;\n let depth = 1;\n while (i < this.tokens.length && depth > 0) {\n const t = this.tokens[i];\n if (!t) break;\n if (t.value === '<') depth++;\n else if (t.value === '>') depth--;\n else if (t.value === '(' || t.value === '{' || t.value === ';' || t.type === TokenType.EOF) break;\n i++;\n }\n if (depth === 0) {\n const next = this.tokens[i];\n return next?.value === '(';\n }\n return false;\n }\n\n parsePrimaryExpression() {\n const token = this.peek();\n if (token.type === TokenType.NUMBER) {\n return new Literal(this.advance().value, 'Number', token.line, token.col);\n }\n if (token.type === TokenType.STRING) {\n return new Literal(this.advance().value, 'String', token.line, token.col);\n }\n if (token.type === TokenType.IDENTIFIER) {\n return new Identifier(this.advance().value, token.line, token.col);\n }\n if (token.type === TokenType.KEYWORD) {\n if (token.value === 'true') {\n this.advance();\n return new Literal(true, 'Boolean', token.line, token.col);\n }\n if (token.value === 'false') {\n this.advance();\n return new Literal(false, 'Boolean', token.line, token.col);\n }\n if (token.value === 'null') {\n this.advance();\n return new Literal(null, 'Null', token.line, token.col);\n }\n if (token.value === 'prompt') {\n return this.parsePromptExpression();\n }\n if (token.value === 'if') {\n return this.parseIfExpression();\n }\n if (token.value === 'match') {\n return this.parseMatchExpression();\n }\n if (token.value === 'new') {\n return this.parseNewExpression();\n }\n // Allow types to be used as identifiers (e.g. for constructors or static methods)\n if (['Int', 'Float', 'String', 'Bool', 'Date', 'UUID', 'Unit', 'Result', 'Option'].includes(token.value)) {\n return new Identifier(this.advance().value, token.line, token.col);\n }\n }\n if (token.value === '[') {\n return this.parseArrayLiteral();\n }\n if (token.value === '{') {\n return this.parseObjectLiteral();\n }\n if (token.value === '(') {\n this.advance();\n const expr = this.parseExpression();\n this.expect(TokenType.DELIMITER, ')');\n return expr;\n }\n throw new HeliosSyntaxError(`Unexpected token in expression: ${token.type} '${token.value}'`, token.line, token.col, null, this.source);\n }\n\n parseArrayLiteral() {\n const startToken = this.expect(TokenType.DELIMITER, '[');\n const elements = [];\n if (this.peek().value !== ']') {\n do {\n elements.push(this.parseExpression());\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== ']' && this.peek().type !== TokenType.EOF);\n }\n this.expect(TokenType.DELIMITER, ']');\n return new ArrayLiteral(elements, startToken.line, startToken.col);\n }\n\n parseObjectLiteral() {\n const startToken = this.expect(TokenType.DELIMITER, '{');\n const properties = [];\n if (this.peek().value !== '}') {\n do {\n const keyToken = this.peek();\n let key;\n if (keyToken.type === TokenType.IDENTIFIER || keyToken.type === TokenType.STRING || keyToken.type === TokenType.KEYWORD) {\n key = this.advance().value;\n } else {\n throw new HeliosSyntaxError(`Expected Identifier, String, or Keyword for object key, found ${keyToken.type} '${keyToken.value}'`, keyToken.line, keyToken.col, null, this.source);\n }\n this.expect(TokenType.OPERATOR, ':');\n const value = this.parseExpression();\n properties.push({ key, value });\n if (this.peek().value === ',') this.advance();\n else break;\n } while (this.peek().value !== '}' && this.peek().type !== TokenType.EOF);\n }\n this.expect(TokenType.DELIMITER, '}');\n return new ObjectLiteral(properties, startToken.line, startToken.col);\n }\n\n parsePromptExpression() {\n const startToken = this.expect(TokenType.KEYWORD, 'prompt');\n this.expect(TokenType.DELIMITER, '(');\n const template = this.parseExpression();\n this.expect(TokenType.DELIMITER, ')');\n \n let asType = null;\n let schema = null;\n let fallback = null;\n let retries = null;\n let timeout = null;\n let model = null;\n let tools = null;\n let history = null;\n let contexts = [];\n\n while (true) {\n const peek = this.peek();\n if (peek.value === 'as') {\n this.advance();\n asType = this.parseType();\n } else if (peek.value === 'with') {\n this.advance();\n const next = this.peek();\n if (next.value === 'schema') {\n this.advance();\n schema = this.parseType();\n } else if (next.value === 'context') {\n this.advance();\n this.expect(TokenType.DELIMITER, '(');\n contexts.push(this.parseExpression());\n this.expect(TokenType.DELIMITER, ')');\n } else {\n throw new HeliosSyntaxError(`Expected 'schema' or 'context' after 'with', found ${next.type} '${next.value}'`, next.line, next.col, null, this.source);\n }\n } else if (peek.value === 'fallback') {\n this.advance();\n fallback = this.parseExpression();\n } else if (peek.value === 'retries') {\n this.advance();\n retries = this.parseExpression();\n } else if (peek.value === 'timeout') {\n this.advance();\n timeout = this.parseExpression();\n } else if (peek.value === 'using') {\n this.advance();\n if (this.peek().value === 'tools') {\n this.advance();\n this.expect(TokenType.DELIMITER, '[');\n tools = [];\n while (this.peek().value !== ']' && this.peek().type !== TokenType.EOF) {\n tools.push(this.expect(TokenType.IDENTIFIER).value);\n if (this.peek().value === ',') this.advance();\n }\n this.expect(TokenType.DELIMITER, ']');\n } else {\n model = this.parseExpression();\n }\n } else if (peek.value === 'history') {\n this.advance();\n history = this.parseExpression();\n } else if (peek.value === 'tools') {\n this.advance();\n this.expect(TokenType.DELIMITER, '[');\n tools = [];\n while (this.peek().value !== ']' && this.peek().type !== TokenType.EOF) {\n tools.push(this.expect(TokenType.IDENTIFIER).value);\n if (this.peek().value === ',') this.advance();\n }\n this.expect(TokenType.DELIMITER, ']');\n } else {\n break;\n }\n }\n \n return new PromptExpression(template, asType, schema, fallback, retries, timeout, null, model, tools, history, contexts, startToken.line, startToken.col);\n }\n}\n","/**\n * Helios Type Checker\n */\n\nimport { HeliosTypeError } from './errors.js';\n\nexport class Type {\n constructor(name, params = [], effects = [], typeParams = []) {\n this.name = name;\n this.params = params;\n this.effects = effects;\n this.typeParams = typeParams; // For generic definitions\n }\n\n equals(other) {\n if (!other) return false;\n if (this.name === 'Float' && other.name === 'Int') return true;\n if (this.name !== other.name) return false;\n if (this.params.length !== other.params.length) return false;\n for (let i = 0; i < this.params.length; i++) {\n if (!this.params[i].equals(other.params[i])) return false;\n }\n return true;\n }\n\n substitute(mapping) {\n if (mapping.has(this.name) && this.params.length === 0) {\n return mapping.get(this.name);\n }\n if (this.name === 'Object' && this.fields) {\n const newFields = {};\n for (const [k, v] of Object.entries(this.fields)) {\n newFields[k] = v.substitute(mapping);\n }\n return new ObjectType(newFields);\n }\n const newParams = this.params.map(p => p.substitute(mapping));\n return new Type(this.name, newParams, this.effects, this.typeParams);\n }\n\n toString() {\n if (this.name === 'Function') {\n const params = this.params.slice(0, -1).map(p => p.toString()).join(', ');\n const ret = this.params[this.params.length - 1].toString();\n const effects = this.effects.length > 0 ? ` uses [${this.effects.join(', ')}]` : '';\n return `(${params}) -> ${ret}${effects}`;\n }\n if (this.params.length > 0) {\n return `${this.name}<${this.params.map(p => p.toString()).join(', ')}>`;\n }\n return this.name;\n }\n}\n\nexport class ObjectType extends Type {\n constructor(fields) {\n super('Object');\n this.fields = fields; // Record<string, Type>\n }\n\n equals(other) {\n if (!other || other.name !== 'Object') return false;\n const keys1 = Object.keys(this.fields);\n const keys2 = Object.keys(other.fields);\n if (keys1.length !== keys2.length) return false;\n for (const key of keys1) {\n if (!other.fields[key] || !this.fields[key].equals(other.fields[key])) {\n return false;\n }\n }\n return true;\n }\n\n toString() {\n const fields = Object.entries(this.fields).map(([k, v]) => `${k}: ${v.toString()}`).join(', ');\n return `{ ${fields} }`;\n }\n}\n\nexport const Primitives = {\n Int: new Type('Int'),\n Float: new Type('Float'),\n Bool: new Type('Bool'),\n String: new Type('String'),\n Unit: new Type('Unit'),\n Unknown: new Type('Unknown'),\n};\n\nexport class TypeEnv {\n constructor(parent = null) {\n this.types = new Map();\n this.parent = parent;\n }\n\n define(name, type) {\n this.types.set(name, type);\n }\n\n get(name) {\n if (this.types.has(name)) return this.types.get(name);\n if (this.parent) return this.parent.get(name);\n return null;\n }\n}\n\nexport class TypeChecker {\n constructor(options = {}) {\n this.globalEnv = new TypeEnv();\n this.modules = new Map();\n this.setupBuiltins();\n this.currentFunction = null;\n\n // Register dynamic tools\n if (options.tools) {\n for (const [name, tool] of Object.entries(options.tools)) {\n if (typeof tool === 'function') {\n // Legacy/simple function registration\n this.globalEnv.define(name, new Type('Function', [Primitives.Unknown], [], []));\n } else if (tool && tool.signature) {\n // Robust registration with explicit signature\n const params = (tool.signature.params || []).map(p => Primitives[p] || new Type(p));\n const ret = Primitives[tool.signature.returnType] || new Type(tool.signature.returnType || 'Unknown');\n const effects = tool.signature.effects || [];\n // In Helios, Function type params are [arg1, arg2, ..., returnType]\n this.globalEnv.define(name, new Type('Function', [...params, ret], effects, []));\n } else {\n // Default to Unknown function\n this.globalEnv.define(name, new Type('Function', [Primitives.Unknown], [], []));\n }\n }\n }\n\n // Register dynamic modules\n if (options.modules) {\n for (const [name, moduleData] of Object.entries(options.modules)) {\n const moduleEnv = new TypeEnv();\n if (moduleData && typeof moduleData === 'object') {\n for (const key of Object.keys(moduleData)) {\n moduleEnv.define(key, Primitives.Unknown);\n }\n }\n this.modules.set(name, moduleEnv);\n }\n }\n }\n\n setupBuiltins() {\n this.globalEnv.define('print', new Type('Function', [Primitives.Unknown, Primitives.Unit], ['io']));\n this.globalEnv.define('length', new Type('Function', [Primitives.Unknown, Primitives.Int]));\n this.globalEnv.define('typeof', new Type('Function', [Primitives.Unknown, Primitives.String]));\n this.globalEnv.define('toString', new Type('Function', [Primitives.Unknown, Primitives.String]));\n this.globalEnv.define('parseInt', new Type('Function', [Primitives.String, Primitives.Int]));\n this.globalEnv.define('parseFloat', new Type('Function', [Primitives.String, Primitives.Float]));\n \n this.globalEnv.define('Date', Primitives.Unknown);\n this.globalEnv.define('UUID', new Type('Function', [Primitives.String]));\n this.globalEnv.define('Unit', Primitives.Unit);\n\n // Mock modules\n this.modules.set('math', new TypeEnv());\n const math = this.modules.get('math');\n math.define('PI', Primitives.Float);\n math.define('abs', new Type('Function', [Primitives.Float, Primitives.Float]));\n\n // FS Module\n this.modules.set('fs', new TypeEnv());\n const fs = this.modules.get('fs');\n fs.define('read', new Type('Function', [Primitives.String, Primitives.String], ['io']));\n fs.define('write', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool], ['io']));\n fs.define('exists', new Type('Function', [Primitives.String, Primitives.Bool], ['io']));\n fs.define('list', new Type('Function', [new Type('Array', [Primitives.String])], ['io']));\n fs.define('delete', new Type('Function', [Primitives.String, Primitives.Bool], ['io']));\n\n // JSON Module\n this.modules.set('json', new TypeEnv());\n const json = this.modules.get('json');\n json.define('parse', new Type('Function', [Primitives.String, Primitives.Unknown]));\n json.define('stringify', new Type('Function', [Primitives.Unknown, Primitives.String]));\n\n // CSV Module\n this.modules.set('csv', new TypeEnv());\n const csv = this.modules.get('csv');\n csv.define('parse', new Type('Function', [Primitives.String, new Type('Array', [Primitives.Unknown])]));\n csv.define('stringify', new Type('Function', [new Type('Array', [Primitives.Unknown]), Primitives.String]));\n\n // XML Module\n this.modules.set('xml', new TypeEnv());\n const xml = this.modules.get('xml');\n xml.define('parse', new Type('Function', [Primitives.String, Primitives.Unknown]));\n xml.define('stringify', new Type('Function', [Primitives.Unknown, Primitives.String, Primitives.String]));\n\n // Web Module\n this.modules.set('web', new TypeEnv());\n const web = this.modules.get('web');\n web.define('fetch', new Type('Function', [Primitives.String, Primitives.Unknown], ['net']));\n web.define('search', new Type('Function', [Primitives.String, Primitives.String], ['net']));\n web.define('maps', new Type('Function', [Primitives.String, Primitives.String], ['net']));\n\n // HTTP Module\n this.modules.set('http', new TypeEnv());\n const http = this.modules.get('http');\n http.define('get', new Type('Function', [Primitives.String, Primitives.Unknown], ['net']));\n http.define('post', new Type('Function', [Primitives.String, Primitives.Unknown, Primitives.Unknown], ['net']));\n http.define('request', new Type('Function', [Primitives.Unknown, Primitives.Unknown], ['net']));\n\n // Storage Module\n this.modules.set('storage', new TypeEnv());\n const storage = this.modules.get('storage');\n storage.define('get', new Type('Function', [Primitives.String, Primitives.Unknown], ['io']));\n storage.define('set', new Type('Function', [Primitives.String, Primitives.Unknown, Primitives.Bool], ['io']));\n\n // Context Module\n this.modules.set('context', new TypeEnv());\n const context = this.modules.get('context');\n context.define('add', new Type('Function', [Primitives.Unknown, Primitives.Bool]));\n context.define('clear', new Type('Function', [], Primitives.Bool));\n context.define('requestInput', new Type('Function', [Primitives.String, Primitives.String], ['io']));\n\n // Swarm Module\n this.modules.set('swarm', new TypeEnv());\n const swarm = this.modules.get('swarm');\n swarm.define('createAgent', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool]));\n swarm.define('setAgentModel', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool]));\n swarm.define('delegate', new Type('Function', [Primitives.String, Primitives.String, Primitives.String], ['async']));\n swarm.define('broadcast', new Type('Function', [Primitives.String, Primitives.Bool]));\n swarm.define('readBlackboard', new Type('Function', [new Type('Array', [new ObjectType({ sender: Primitives.String, message: Primitives.String, timestamp: Primitives.Int })])]));\n swarm.define('addTool', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool]));\n swarm.define('removeTool', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool]));\n swarm.define('listTools', new Type('Function', [Primitives.String, new Type('Array', [Primitives.String])]));\n\n // MCP Module\n this.modules.set('mcp', new TypeEnv());\n const mcp = this.modules.get('mcp');\n const mcpConnectType = new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool], ['net']);\n const mcpListToolsType = new Type('Function', [Primitives.String, new Type('Array', [new ObjectType({ name: Primitives.String, description: Primitives.String, inputSchema: Primitives.Unknown })])], ['net']);\n const mcpCallToolType = new Type('Function', [Primitives.String, Primitives.String, Primitives.Unknown, Primitives.Unknown], ['net']);\n \n mcp.define('connect', mcpConnectType);\n mcp.define('listTools', mcpListToolsType);\n mcp.define('callTool', mcpCallToolType);\n\n // Expose MCP globally for convenience\n this.globalEnv.define('mcp', new ObjectType({\n connect: mcpConnectType,\n listTools: mcpListToolsType,\n callTool: mcpCallToolType\n }));\n\n // Memory Module\n this.modules.set('memory', new TypeEnv());\n const memory = this.modules.get('memory');\n memory.define('store', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool], ['io']));\n memory.define('search', new Type('Function', [Primitives.String, Primitives.Int, new Type('Array', [new ObjectType({ text: Primitives.String, score: Primitives.Float })])], ['io']));\n\n // AI Module\n this.modules.set('ai', new TypeEnv());\n const ai = this.modules.get('ai');\n ai.define('generateCode', new Type('Function', [Primitives.String, Primitives.String], ['ai']));\n // Generic extract function: <T>(String, T) -> T\n ai.define('extract', new Type('Function', [Primitives.String, new Type('T'), new Type('T')], ['ai'], ['T']));\n ai.define('sentiment', new Type('Function', [Primitives.String, Primitives.String], ['ai']));\n\n // UI Module\n this.modules.set('ui', new TypeEnv());\n const ui = this.modules.get('ui');\n ui.define('button', new Type('Function', [Primitives.String, Primitives.String, Primitives.String], ['io']));\n ui.define('input', new Type('Function', [Primitives.String, Primitives.String, Primitives.String], ['io']));\n ui.define('card', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool], ['io']));\n ui.define('image', new Type('Function', [Primitives.String, Primitives.String, Primitives.Bool], ['io']));\n ui.define('chart', new Type('Function', [Primitives.String, new Type('Array', [new Type('T')]), Primitives.Unknown, Primitives.Bool], ['io'], ['T']));\n ui.define('table', new Type('Function', [new Type('Array', [new Type('T')]), new Type('Array', [Primitives.String]), Primitives.Bool], ['io'], ['T']));\n ui.define('progress', new Type('Function', [Primitives.Float, Primitives.Float, Primitives.String, Primitives.Bool], ['io']));\n }\n\n check(node, env = this.globalEnv) {\n switch (node.type) {\n case 'Program':\n for (const stmt of node.body) {\n this.check(stmt, env);\n }\n return Primitives.Unit;\n\n case 'ImportDeclaration': {\n const rawSource = typeof node.source === 'string' ? node.source : (node.source?.value || String(node.source));\n const source = rawSource.replace(/['\"]/g, ''); // Ensure quotes are stripped\n \n if (node.isExternal || source.startsWith('npm:') || (node.uses && (node.uses.includes('js') || node.uses.length > 0))) {\n for (const spec of node.specifiers) {\n // External JS functions are treated as Unknown (dynamic)\n env.define(spec.alias || spec.name, Primitives.Unknown);\n }\n return Primitives.Unit;\n }\n const moduleEnv = this.modules.get(source);\n if (!moduleEnv) {\n throw new HeliosTypeError(`Module not found: ${source}`, node.line, node.col, `Check if the module name is correct or if it's available in the current environment.`);\n }\n for (const spec of node.specifiers) {\n const type = moduleEnv.get(spec.name);\n if (!type) {\n throw new HeliosTypeError(`Symbol ${spec.name} not found in module ${node.source}`, node.line, node.col, `Ensure ${spec.name} is exported from ${node.source}.`);\n }\n env.define(spec.alias || spec.name, type);\n }\n return Primitives.Unit;\n }\n\n case 'VariableDeclaration': {\n const initType = this.check(node.init, env);\n let declaredType = node.typeAnnotation ? this.resolveType(node.typeAnnotation, env) : null;\n \n if (declaredType && !declaredType.equals(initType) && declaredType.name !== 'Unknown' && initType.name !== 'Unknown') {\n throw new HeliosTypeError(`Type mismatch: cannot assign ${initType} to ${declaredType}`, node.line, node.col, `The initial value type (${initType}) must match the declared type (${declaredType}).`);\n }\n \n const finalType = declaredType || initType;\n env.define(node.pattern, finalType);\n return finalType;\n }\n\n case 'AssignmentExpression': {\n let varType;\n if (node.left.type === 'Identifier') {\n varType = env.get(node.left.name);\n if (!varType) {\n throw new HeliosTypeError(`Undefined identifier: ${node.left.name}`, node.line, node.col, `Make sure '${node.left.name}' is defined before use.`);\n }\n } else if (node.left.type === 'MemberExpression') {\n const objType = this.check(node.left.object, env);\n if (objType.name === 'Array') {\n const propType = this.check(node.left.property, env);\n if (propType.name !== 'Int') {\n throw new HeliosTypeError(`Array index must be Int, found ${propType}`, node.line, node.col, `Ensure the index expression evaluates to an integer.`);\n }\n varType = objType.params[0] || Primitives.Unknown;\n } else if (objType.name === 'Object') {\n if (node.left.property.type !== 'Literal' || node.left.property.kind !== 'String') {\n throw new HeliosTypeError(`Object property access requires string literal`, node.line, node.col, `Use dot notation or a string literal for property access.`);\n }\n const propName = node.left.property.value;\n varType = objType.fields[propName];\n if (!varType) {\n throw new HeliosTypeError(`Property '${propName}' does not exist on object`, node.line, node.col, `Check for typos or ensure the property is defined on the object.`);\n }\n } else {\n throw new HeliosTypeError(`Cannot assign to member of type ${objType}`, node.line, node.col);\n }\n } else {\n throw new HeliosTypeError(`Invalid assignment target`, node.line, node.col);\n }\n\n const valueType = this.check(node.value, env);\n if (!varType.equals(valueType) && varType.name !== 'Unknown' && valueType.name !== 'Unknown') {\n throw new HeliosTypeError(`Type mismatch: cannot assign ${valueType} to ${varType}`, node.line, node.col, `Ensure the assigned value matches the variable's type.`);\n }\n return varType;\n }\n\n case 'FunctionDeclaration': {\n const subEnv = new TypeEnv(env);\n if (node.typeParameters) {\n node.typeParameters.forEach(p => subEnv.define(p, new Type(p)));\n }\n\n const paramTypes = node.params.map(p => this.resolveType(p.typeAnnotation, subEnv));\n const retType = node.returnType ? this.resolveType(node.returnType, subEnv) : Primitives.Unit;\n const funcType = new Type('Function', [...paramTypes, retType], node.effects, node.typeParameters || []);\n \n env.define(node.name, funcType);\n\n // Check body\n node.params.forEach((p, i) => subEnv.define(p.name, paramTypes[i]));\n \n const prevFunc = this.currentFunction;\n this.currentFunction = node;\n this.checkBlock(node.body, subEnv);\n this.currentFunction = prevFunc;\n \n return funcType;\n }\n\n case 'AwaitExpression': {\n if (this.currentFunction && !this.currentFunction.effects.includes('async')) {\n throw new HeliosTypeError(`'await' can only be used in 'async' functions or functions with 'async' effect`, node.line, node.col, `Mark the function as 'async' or add 'async' to its 'uses' clause.`);\n }\n return this.check(node.argument, env);\n }\n\n case 'Literal':\n switch (node.kind) {\n case 'Number': return node.value.includes('.') ? Primitives.Float : Primitives.Int;\n case 'String': return Primitives.String;\n case 'Bool': return Primitives.Bool;\n default: return Primitives.Unknown;\n }\n\n case 'Identifier': {\n let type = env.get(node.name);\n if (!type) {\n // Fallback matching runtime's implicit module resolution\n const modStrType = this.modules.get(node.name);\n if (modStrType) {\n // Convert module TypeEnv to ObjectType so properties resolve\n const objFields = {};\n for (const [k, v] of modStrType.types.entries()) {\n objFields[k] = v;\n }\n type = new ObjectType(objFields);\n }\n }\n if (!type) {\n throw new HeliosTypeError(`Undefined identifier: ${node.name}`, node.line, node.col, `Check for typos or ensure '${node.name}' is defined in the current scope.`);\n }\n return type;\n }\n\n case 'BinaryExpression': {\n const left = this.check(node.left, env);\n \n if (node.operator === '|>') {\n if (node.right.type === 'CallExpression') {\n let funcType = this.check(node.right.callee, env);\n const argTypes = [left];\n for (const arg of node.right.arguments) {\n argTypes.push(this.check(arg, env));\n }\n return this.checkFunctionCall(node.right, funcType, argTypes, env);\n } else {\n const right = this.check(node.right, env);\n return this.checkFunctionCall(node, right, [left], env);\n }\n }\n\n const right = this.check(node.right, env);\n \n if (node.operator === '+') {\n if (left.name === 'String' || right.name === 'String') {\n return Primitives.String;\n }\n }\n\n if (!left.equals(right) && !right.equals(left) && left.name !== 'Unknown' && right.name !== 'Unknown') {\n throw new HeliosTypeError(`Binary operator ${node.operator} requires compatible types, found ${left} and ${right}`, node.line, node.col, `Convert one of the operands to match the other's type.`);\n }\n \n if (['+', '-', '*', '/'].includes(node.operator)) {\n if (left.name !== 'Int' && left.name !== 'Float' && left.name !== 'Unknown') {\n throw new HeliosTypeError(`Arithmetic operator ${node.operator} requires numeric types, found ${left}`, node.line, node.col, `Ensure both operands are Int or Float.`);\n }\n return (left.name === 'Float' || right.name === 'Float') ? Primitives.Float : left;\n }\n \n if (['==', '!=', '<', '>', '<=', '>='].includes(node.operator)) {\n return Primitives.Bool;\n }\n \n return left;\n }\n\n case 'UnaryExpression': {\n const argType = this.check(node.argument, env);\n if (node.operator === '-') {\n if (argType.name !== 'Int' && argType.name !== 'Float') {\n throw new HeliosTypeError(`Unary operator - requires numeric type, found ${argType}`, node.line, node.col);\n }\n return argType;\n }\n if (node.operator === '!') {\n if (argType.name !== 'Bool') {\n throw new HeliosTypeError(`Unary operator ! requires Bool type, found ${argType}`, node.line, node.col);\n }\n return Primitives.Bool;\n }\n return argType;\n }\n\n case 'CallExpression': {\n let funcType = this.check(node.callee, env);\n const argTypes = node.arguments.map(arg => this.check(arg, env));\n return this.checkFunctionCall(node, funcType, argTypes, env);\n }\n\n case 'NewExpression': {\n let funcType = this.check(node.callee, env);\n const argTypes = node.arguments.map(arg => this.check(arg, env));\n // For now, treat new calls similar to function calls but they return Unknown or the type itself\n if (funcType.name === 'Unknown') return Primitives.Unknown;\n return funcType; // Usually constructors return an instance of the type\n }\n\n case 'ArrayLiteral': {\n if (node.elements.length === 0) {\n return new Type('Array', [Primitives.Unknown]);\n }\n const elementTypes = node.elements.map(el => this.check(el, env));\n let commonType = elementTypes[0];\n \n for (let i = 1; i < elementTypes.length; i++) {\n const currentType = elementTypes[i];\n if (currentType.name === 'Unknown') continue;\n if (commonType.name === 'Unknown') {\n commonType = currentType;\n continue;\n }\n \n if (commonType.equals(currentType)) {\n // commonType is a supertype (e.g. Float and Int)\n } else if (currentType.equals(commonType)) {\n // currentType is a supertype, upgrade commonType\n commonType = currentType;\n } else {\n throw new HeliosTypeError(`Array elements must have consistent types, found ${commonType} and ${currentType}`, node.line, node.col);\n }\n }\n return new Type('Array', [commonType]);\n }\n\n case 'ObjectLiteral': {\n const fields = {};\n for (const prop of node.properties) {\n fields[prop.key] = this.check(prop.value, env);\n }\n return new ObjectType(fields);\n }\n\n case 'MemberExpression': {\n const objType = this.check(node.object, env);\n if (objType.name === 'Array') {\n // Handle array properties and methods\n if (node.property.type === 'Literal' && node.property.kind === 'String') {\n const propName = node.property.value;\n if (propName === 'length') return Primitives.Int;\n if (propName === 'push') {\n const elementType = objType.params[0] || Primitives.Unknown;\n return new Type('Function', [elementType, Primitives.Unit]);\n }\n if (propName === 'pop') {\n const elementType = objType.params[0] || Primitives.Unknown;\n return new Type('Function', [elementType]);\n }\n if (propName === 'shift') {\n const elementType = objType.params[0] || Primitives.Unknown;\n return new Type('Function', [elementType]);\n }\n if (propName === 'unshift') {\n const elementType = objType.params[0] || Primitives.Unknown;\n return new Type('Function', [elementType, Primitives.Unit]);\n }\n if (propName === 'join') {\n return new Type('Function', [Primitives.String, Primitives.String]);\n }\n }\n\n const propType = this.check(node.property, env);\n if (propType.name !== 'Int') {\n throw new HeliosTypeError(`Array index must be Int, found ${propType}`, node.line, node.col);\n }\n return objType.params[0] || Primitives.Unknown;\n } else if (objType.name === 'Object') {\n if (node.property.type !== 'Literal' || node.property.kind !== 'String') {\n throw new HeliosTypeError(`Object property access requires string literal`, node.line, node.col);\n }\n const propName = node.property.value;\n const propType = objType.fields[propName];\n if (!propType) {\n throw new HeliosTypeError(`Property '${propName}' does not exist on object`, node.line, node.col);\n }\n return propType;\n } else if (objType.name === 'String') {\n if (node.property.type === 'Literal' && node.property.kind === 'String') {\n const propName = node.property.value;\n if (propName === 'length') return Primitives.Int;\n if (propName === 'split') return new Type('Function', [Primitives.String, new Type('Array', [Primitives.String])]);\n if (propName === 'trim') return new Type('Function', [Primitives.String]);\n if (propName === 'toLowerCase') return new Type('Function', [Primitives.String]);\n if (propName === 'toUpperCase') return new Type('Function', [Primitives.String]);\n if (propName === 'includes') return new Type('Function', [Primitives.String, Primitives.Bool]);\n }\n throw new HeliosTypeError(`Property '${node.property.value}' does not exist on type String`, node.line, node.col);\n } else if (objType.name === 'Int' || objType.name === 'Float') {\n if (node.property.type === 'Literal' && node.property.kind === 'String' && node.property.value === 'toString') {\n return new Type('Function', [Primitives.String]);\n }\n throw new HeliosTypeError(`Property '${node.property.value}' does not exist on type ${objType.name}`, node.line, node.col);\n } else if (objType.name === 'Unknown') {\n return Primitives.Unknown;\n } else {\n throw new HeliosTypeError(`Cannot access member of type ${objType}`, node.line, node.col);\n }\n }\n\n case 'PromptExpression': {\n if (node.schema) {\n const schemaType = this.resolveType(node.schema, env);\n if (node.asType) {\n const asType = this.resolveType(node.asType, env);\n if (!schemaType.equals(asType)) {\n throw new HeliosTypeError(`Prompt schema type ${schemaType} does not match 'as' type ${asType}`, node.line, node.col);\n }\n }\n return schemaType;\n }\n return node.asType ? this.resolveType(node.asType, env) : Primitives.String;\n }\n\n case 'WhileStatement': {\n const condType = this.check(node.condition, env);\n if (!condType.equals(Primitives.Bool)) {\n throw new HeliosTypeError(`While condition must be Bool, found ${condType}`, node.line, node.col);\n }\n this.checkBlock(node.body, new TypeEnv(env));\n return Primitives.Unit;\n }\n\n case 'IfExpression': {\n const condType = this.check(node.condition, env);\n if (!condType.equals(Primitives.Bool)) {\n throw new HeliosTypeError(`If condition must be Bool, found ${condType}`, node.line, node.col);\n }\n const consType = this.checkBlock(node.consequent, new TypeEnv(env));\n if (node.alternate) {\n const altType = Array.isArray(node.alternate) \n ? this.checkBlock(node.alternate, new TypeEnv(env))\n : this.check(node.alternate, env);\n \n if (consType.equals(altType)) {\n return consType;\n } else if (altType.equals(consType)) {\n return altType;\n }\n }\n return Primitives.Unit;\n }\n\n case 'ForStatement': {\n const iterableType = this.check(node.iterable, env);\n let iteratorType = Primitives.Unknown;\n \n if (iterableType.equals(Primitives.Int)) {\n // Range iteration: for i in 10\n iteratorType = Primitives.Int;\n } else if (iterableType.name === 'Array') {\n // Array iteration: for item in [1, 2, 3]\n iteratorType = iterableType.params[0] || Primitives.Unknown;\n }\n\n const subEnv = new TypeEnv(env);\n subEnv.define(node.iterator, iteratorType);\n this.checkBlock(node.body, subEnv);\n return Primitives.Unit;\n }\n\n case 'WithContextStatement': {\n const subEnv = new TypeEnv(env);\n node.context.forEach(ctx => this.check(ctx, env));\n this.checkBlock(node.body, subEnv);\n return Primitives.Unit;\n }\n\n case 'TypeDeclaration': {\n const subEnv = new TypeEnv(env);\n if (node.typeParams) {\n node.typeParams.forEach(p => subEnv.define(p, new Type(p)));\n }\n const type = this.resolveType(node.value, subEnv);\n type.typeParams = node.typeParams;\n env.define(node.name, type);\n return Primitives.Unit;\n }\n\n case 'ReturnStatement':\n return this.check(node.argument, env);\n\n default:\n return Primitives.Unknown;\n }\n }\n\n checkFunctionCall(node, funcType, argTypes, env) {\n if (!funcType) {\n const calleeName = node.callee && node.callee.type === 'Identifier' ? node.callee.name : 'Expression';\n throw new HeliosTypeError(`${calleeName} is undefined`, node.line, node.col);\n }\n\n if (funcType.name === 'Unknown') {\n return Primitives.Unknown;\n }\n\n if (funcType.name !== 'Function') {\n const calleeName = node.callee && node.callee.type === 'Identifier' ? node.callee.name : 'Expression';\n throw new HeliosTypeError(`${calleeName} is not a function`, node.line, node.col, `Ensure you're calling a function and not another type.`);\n }\n\n // Handle generic instantiation\n if (funcType.typeParams && funcType.typeParams.length > 0) {\n const typeArgs = node.typeArguments ? node.typeArguments.map(arg => this.resolveType(arg, env)) : [];\n if (typeArgs.length > 0) {\n if (typeArgs.length !== funcType.typeParams.length) {\n throw new HeliosTypeError(`Generic function expects ${funcType.typeParams.length} type arguments, got ${typeArgs.length}`, node.line, node.col);\n }\n const mapping = new Map();\n funcType.typeParams.forEach((param, i) => mapping.set(param, typeArgs[i]));\n funcType = funcType.substitute(mapping);\n } else {\n // Type inference\n const mapping = new Map();\n funcType.typeParams.forEach(p => mapping.set(p, Primitives.Unknown));\n \n const expectedParams = funcType.params.slice(0, -1);\n for (let i = 0; i < Math.min(argTypes.length, expectedParams.length); i++) {\n this.inferTypes(expectedParams[i], argTypes[i], mapping);\n }\n funcType = funcType.substitute(mapping);\n }\n }\n \n const expectedParams = funcType.params.slice(0, -1);\n const returnType = funcType.params[funcType.params.length - 1];\n\n if (node.callee && node.callee.type === 'Identifier' && node.callee.name === 'print') {\n return returnType;\n }\n\n if (argTypes.length !== expectedParams.length) {\n const calleeName = node.callee && node.callee.type === 'Identifier' ? node.callee.name : 'Expression';\n throw new HeliosTypeError(`Function ${calleeName} expects ${expectedParams.length} arguments, got ${argTypes.length}`, node.line, node.col, `Check the function signature for the correct number of arguments.`);\n }\n\n for (let i = 0; i < argTypes.length; i++) {\n if (!expectedParams[i].equals(argTypes[i]) && expectedParams[i].name !== 'Unknown') {\n const calleeName = node.callee && node.callee.type === 'Identifier' ? node.callee.name : 'Expression';\n throw new HeliosTypeError(`Argument ${i + 1} to ${calleeName} expected ${expectedParams[i]}, got ${argTypes[i]}`, node.line, node.col, `Provide an argument of the correct type.`);\n }\n }\n\n return returnType;\n }\n\n checkBlock(stmts, env) {\n let lastType = Primitives.Unit;\n for (const stmt of stmts) {\n lastType = this.check(stmt, env);\n }\n return lastType;\n }\n\n resolveType(typeNode, env = this.globalEnv) {\n if (typeof typeNode === 'string') {\n return Primitives[typeNode] || env.get(typeNode) || new Type(typeNode);\n }\n if (typeNode && typeNode.type === 'TypeReference') {\n const baseType = this.resolveType(typeNode.name, env);\n const typeArgs = typeNode.typeArguments.map(arg => this.resolveType(arg, env));\n \n if (baseType.typeParams && baseType.typeParams.length > 0) {\n const mapping = new Map();\n baseType.typeParams.forEach((param, i) => {\n mapping.set(param, typeArgs[i] || Primitives.Unknown);\n });\n return baseType.substitute(mapping);\n }\n return new Type(baseType.name, typeArgs, baseType.effects);\n }\n if (typeNode && typeNode.type === 'ArrayType') {\n const elementType = this.resolveType(typeNode.elementType, env);\n return new Type('Array', [elementType]);\n }\n if (typeNode && typeNode.type === 'ObjectType') {\n const fields = {};\n for (const [key, val] of Object.entries(typeNode.fields)) {\n fields[key] = this.resolveType(val, env);\n }\n return new ObjectType(fields);\n }\n return Primitives.Unknown;\n }\n\n inferTypes(expected, actual, mapping) {\n if (!expected || !actual) return;\n\n if (mapping.has(expected.name) && expected.params.length === 0) {\n const current = mapping.get(expected.name);\n if (current.name === 'Unknown') {\n mapping.set(expected.name, actual);\n }\n return;\n }\n\n if (expected.name === actual.name && expected.params.length === actual.params.length) {\n for (let i = 0; i < expected.params.length; i++) {\n this.inferTypes(expected.params[i], actual.params[i], mapping);\n }\n }\n\n if (expected.name === 'Object' && actual.name === 'Object' && expected.fields && actual.fields) {\n for (const key in expected.fields) {\n if (actual.fields[key]) {\n this.inferTypes(expected.fields[key], actual.fields[key], mapping);\n }\n }\n }\n }\n}\n","\nexport class MCPConnection {\n constructor(url, onPrint) {\n this.url = url;\n this.ws = null;\n this.onPrint = onPrint;\n this.pendingRequests = new Map();\n this.requestId = 0;\n this.capabilities = {};\n this.serverInfo = {};\n this.isConnected = false;\n }\n\n async connect() {\n return new Promise((resolve, reject) => {\n try {\n this.ws = new WebSocket(this.url);\n } catch (e) {\n return reject(e);\n }\n\n this.ws.onopen = async () => {\n this.isConnected = true;\n this.onPrint(`[MCP] WebSocket connected to ${this.url}`);\n \n // Perform MCP Handshake\n try {\n const initResult = await this.request(\"initialize\", {\n protocolVersion: \"2024-11-05\",\n capabilities: { roots: { listChanged: true } },\n clientInfo: { name: \"helios-client\", version: \"1.0.0\" }\n });\n \n this.capabilities = initResult.capabilities;\n this.serverInfo = initResult.serverInfo;\n \n // Send initialized notification\n this.notify(\"notifications/initialized\");\n this.onPrint(`[MCP] Handshake complete. Server: ${this.serverInfo.name} v${this.serverInfo.version}`);\n resolve(true);\n } catch (err) {\n reject(err);\n }\n };\n\n this.ws.onmessage = (event) => {\n try {\n const msg = JSON.parse(event.data);\n if (msg.id !== undefined) {\n // Response\n const pending = this.pendingRequests.get(msg.id);\n if (pending) {\n if (msg.error) pending.reject(new Error(msg.error.message));\n else pending.resolve(msg.result);\n this.pendingRequests.delete(msg.id);\n }\n } else {\n // Notification\n // Handle server notifications here if needed\n }\n } catch (e) {\n console.error(\"[MCP] Error parsing message:\", e);\n }\n };\n\n this.ws.onerror = (err) => {\n if (!this.isConnected) reject(new Error(\"WebSocket connection failed\"));\n console.error(\"[MCP] WebSocket error:\", err);\n };\n\n this.ws.onclose = () => {\n this.isConnected = false;\n this.onPrint(`[MCP] Disconnected from ${this.url}`);\n };\n });\n }\n\n send(method, params) {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"Not connected\");\n }\n const msg = { jsonrpc: \"2.0\", method, params };\n this.ws.send(JSON.stringify(msg));\n }\n\n notify(method, params) {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n const msg = { jsonrpc: \"2.0\", method, params };\n this.ws.send(JSON.stringify(msg));\n }\n\n request(method, params) {\n return new Promise((resolve, reject) => {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n return reject(new Error(\"Not connected\"));\n }\n const id = this.requestId++;\n const msg = { jsonrpc: \"2.0\", id, method, params };\n this.pendingRequests.set(id, { resolve, reject });\n this.ws.send(JSON.stringify(msg));\n \n // Timeout after 10s\n setTimeout(() => {\n if (this.pendingRequests.has(id)) {\n this.pendingRequests.get(id).reject(new Error(\"Request timed out\"));\n this.pendingRequests.delete(id);\n }\n }, 10000);\n });\n }\n}\n","/**\n * Helios Interpreter / Evaluator\n */\n\nimport { MCPConnection } from './mcp.js';\nimport { HeliosRuntimeError } from './errors.js';\nimport { GoogleGenAI, ThinkingLevel } from \"@google/genai\";\n// import * as webllm from \"@mlc-ai/web-llm\";\nimport { Lexer } from './lexer.js';\nimport { Parser } from './parser.js';\nimport { registerStdLib } from './stdlib.js';\nimport { JSBridge } from './jsBridge.js';\nimport { ModelManager } from './models.js';\n\nexport class Environment {\n constructor(parent = null) {\n this.values = new Map();\n this.parent = parent;\n }\n\n define(name, value) {\n this.values.set(name, value);\n }\n\n get(name) {\n if (this.values.has(name)) {\n return this.values.get(name);\n }\n if (this.parent) {\n return this.parent.get(name);\n }\n throw new HeliosRuntimeError(`Undefined variable: ${name}`);\n }\n\n assign(name, value) {\n if (this.values.has(name)) {\n this.values.set(name, value);\n return;\n }\n if (this.parent) {\n this.parent.assign(name, value);\n return;\n }\n throw new HeliosRuntimeError(`Undefined variable: ${name}`);\n }\n}\n\nclass ReturnValue {\n constructor(value) {\n this.value = value;\n }\n}\n\n\nconst MAX_LOOP_ITERATIONS = 1_000_000;\n\nexport class Evaluator {\n constructor(onPrint = console.log, options = {}) {\n this.onPrint = onPrint;\n this.onInputRequest = options.onInputRequest || (async (prompt) => {\n console.warn(`[HITL] Input requested but no handler provided: ${prompt}`);\n return \"\";\n });\n this.options = options;\n this.globalEnv = new Environment();\n this.globalTypes = new Map();\n this.contextStack = [];\n this.history = options.history || [];\n this.memoryLimit = options.memoryLimit || 10;\n this.summarizeHistory = options.summarizeHistory || false;\n this.trace = [];\n this.blackboard = []; // Shared memory for agents\n this.systemPrompt = options.systemPrompt || \"You are the Helios AI engine. \" +\n \"If a JSON schema is provided, you MUST return a valid JSON object matching that schema exactly. \" +\n \"Do NOT wrap the JSON in a top-level property or code blocks. \" +\n \"If NO schema is provided, return a plain text response. \" +\n \"Always use the provided context items to inform your response.\";\n \n this.modules = new Map();\n this.toolMetadata = new Map();\n this.setupBuiltins();\n\n // Register initial tools and modules from options\n if (options.tools) {\n for (const [name, func] of Object.entries(options.tools)) {\n this.registerTool(name, func);\n }\n }\n if (options.modules) {\n for (const [name, env] of Object.entries(options.modules)) {\n this.registerModule(name, env);\n }\n }\n \n // Initialize Gemini API\n try {\n if (process.env.GEMINI_API_KEY) {\n this.ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });\n } else {\n throw new Error(\"GEMINI_API_KEY environment variable is not set.\");\n }\n } catch (e) {\n if (!options.dryRun) {\n console.warn(`[Warning] Could not initialize GoogleGenAI: ${e.message}. AI features will fail unless --dry-run is used.`);\n }\n }\n }\n\n getTrace() {\n return this.trace;\n }\n\n clearTrace() {\n this.trace = [];\n }\n\n addTrace(entry) {\n this.trace.push({\n timestamp: Date.now(),\n ...entry\n });\n }\n\n registerTool(name, tool) {\n if (!name || typeof name !== 'string') {\n throw new HeliosRuntimeError(`Invalid tool name: ${name}`);\n }\n\n let fn;\n let metadata = {\n name,\n description: `Tool: ${name}`,\n params: [],\n returnType: 'Unknown'\n };\n\n if (typeof tool === 'function') {\n fn = tool;\n const params = this.inferParams(tool);\n metadata.params = params.map(p => ({ name: p, type: 'Unknown' }));\n } else if (tool && typeof tool === 'object' && tool.fn) {\n if (typeof tool.fn !== 'function') {\n throw new HeliosRuntimeError(`Tool '${name}' must have a 'fn' property that is a function.`);\n }\n fn = tool.fn;\n const params = tool.signature?.params || this.inferParams(tool.fn);\n metadata.params = params.map((p, i) => {\n if (!p) return { name: `arg${i}`, type: 'Unknown' };\n return {\n name: typeof p === 'string' ? p : (p.name || `arg${i}`), \n type: typeof p === 'string' ? 'Unknown' : (p.type || 'Unknown') \n };\n });\n metadata.description = tool.description || metadata.description;\n metadata.returnType = tool.signature?.returnType || 'Unknown';\n } else {\n throw new HeliosRuntimeError(`Invalid tool definition for '${name}'. Expected a function or an object with a 'fn' property.`);\n }\n\n this.globalEnv.define(name, fn);\n this.toolMetadata.set(name, metadata);\n }\n\n inferParams(func) {\n const STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n const ARGUMENT_NAMES = /([^\\s,]+)/g;\n const fnStr = func.toString().replace(STRIP_COMMENTS, '');\n const openParen = fnStr.indexOf('(');\n const closeParen = fnStr.indexOf(')');\n if (openParen === -1 || closeParen === -1) return [];\n const result = fnStr.slice(openParen + 1, closeParen).match(ARGUMENT_NAMES);\n if (result === null) return [];\n // Filter out things like 'async' if it's an arrow function without parens (though we checked for parens)\n return result.filter(name => name !== 'async');\n }\n\n registerModule(name, env) {\n if (!(env instanceof Environment)) {\n const newEnv = new Environment();\n if (env && typeof env === 'object') {\n for (const [k, v] of Object.entries(env)) {\n newEnv.define(k, v);\n }\n }\n this.modules.set(name, newEnv);\n } else {\n this.modules.set(name, env);\n }\n }\n\n setupBuiltins() {\n this.globalEnv.define('print', async (args) => {\n this.onPrint(...args);\n return args[0];\n });\n\n this.globalEnv.define('length', async (args) => {\n const val = args[0];\n if (typeof val === 'string' || Array.isArray(val)) {\n return val.length;\n }\n throw new HeliosRuntimeError(`Cannot get length of ${typeof val}`);\n });\n\n this.globalEnv.define('typeof', async (args) => {\n const val = args[0];\n if (Array.isArray(val)) return 'Array';\n if (val === null) return 'Null';\n if (typeof val === 'object') return 'Object';\n if (typeof val === 'number') return Number.isInteger(val) ? 'Int' : 'Float';\n if (typeof val === 'boolean') return 'Bool';\n if (typeof val === 'string') return 'String';\n return typeof val;\n });\n\n this.globalEnv.define('toString', async (args) => {\n const val = args[0];\n if (typeof val === 'object' && val !== null) {\n return JSON.stringify(val, null, 2);\n }\n return String(val);\n });\n\n this.globalEnv.define('parseInt', async (args) => {\n const res = parseInt(args[0], 10);\n if (isNaN(res)) throw new HeliosRuntimeError(`Cannot parse integer from \"${args[0]}\"`);\n return res;\n });\n\n this.globalEnv.define('parseFloat', async (args) => {\n const res = parseFloat(args[0]);\n if (isNaN(res)) throw new HeliosRuntimeError(`Cannot parse float from \"${args[0]}\"`);\n return res;\n });\n\n // Mock modules\n this.registerModule('math', new Environment());\n this.registerModule('fs', new Environment());\n this.registerModule('json', new Environment());\n this.registerModule('csv', new Environment());\n this.registerModule('xml', new Environment());\n this.registerModule('list', new Environment());\n this.registerModule('obj', new Environment());\n this.registerModule('ui', new Environment());\n this.registerModule('memory', new Environment());\n this.registerModule('text', new Environment());\n this.registerModule('web', new Environment());\n this.registerModule('agent', new Environment());\n this.registerModule('crypto', new Environment());\n this.registerModule('base64', new Environment());\n this.registerModule('regex', new Environment());\n this.registerModule('url', new Environment());\n this.registerModule('workflow', new Environment());\n\n this.globalEnv.define('Date', Date);\n this.globalEnv.define('UUID', () => crypto.randomUUID());\n this.globalEnv.define('Unit', null);\n\n // Math module\n const math = this.modules.get('math');\n math.define('PI', Math.PI);\n math.define('abs', async (args) => Math.abs(args[0]));\n math.define('ceil', async (args) => Math.ceil(args[0]));\n math.define('floor', async (args) => Math.floor(args[0]));\n math.define('round', async (args) => Math.round(args[0]));\n\n registerStdLib(this);\n math.define('max', async (args) => Math.max(...args));\n math.define('min', async (args) => Math.min(...args));\n math.define('random', async () => Math.random());\n\n // FS module (Browser-safe using localStorage)\n const fsMod = this.modules.get('fs');\n const FS_PREFIX = 'helios_fs_';\n \n fsMod.define('read', async (args) => {\n const path = args[0];\n const content = localStorage.getItem(FS_PREFIX + path);\n if (content === null) throw new HeliosRuntimeError(`File not found: ${path}`);\n return content;\n });\n \n fsMod.define('write', async (args) => {\n const path = args[0];\n const content = args[1];\n localStorage.setItem(FS_PREFIX + path, String(content));\n return true;\n });\n \n fsMod.define('exists', async (args) => {\n const path = args[0];\n return localStorage.getItem(FS_PREFIX + path) !== null;\n });\n \n fsMod.define('list', async () => {\n const files = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key.startsWith(FS_PREFIX)) {\n files.push(key.substring(FS_PREFIX.length));\n }\n }\n return files;\n });\n \n fsMod.define('delete', async (args) => {\n const path = args[0];\n localStorage.removeItem(FS_PREFIX + path);\n return true;\n });\n\n // JSON module\n const jsonMod = this.modules.get('json');\n jsonMod.define('parse', async (args) => JSON.parse(args[0]));\n jsonMod.define('stringify', async (args) => JSON.stringify(args[0], null, 2));\n\n // CSV module\n const csvMod = this.modules.get('csv');\n csvMod.define('parse', async (args) => {\n const csv = args[0];\n const options = args[1] || { header: true, delimiter: ',' };\n const lines = csv.split('\\n').filter(l => l.trim());\n if (lines.length === 0) return [];\n \n const delimiter = options.delimiter || ',';\n const parseLine = (line) => {\n const parts = [];\n let current = '';\n let inQuotes = false;\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n if (char === '\"') inQuotes = !inQuotes;\n else if (char === delimiter && !inQuotes) {\n parts.push(current.trim());\n current = '';\n } else current += char;\n }\n parts.push(current.trim());\n return parts;\n };\n\n if (options.header) {\n const headers = parseLine(lines[0]);\n return lines.slice(1).map(line => {\n const values = parseLine(line);\n const obj = {};\n headers.forEach((h, i) => {\n let val = values[i] || '';\n // Auto-convert numbers\n if (!isNaN(val) && val !== '') val = Number(val);\n obj[h] = val;\n });\n return obj;\n });\n }\n return lines.map(line => parseLine(line));\n });\n\n csvMod.define('stringify', async (args) => {\n const data = args[0];\n if (!Array.isArray(data) || data.length === 0) return '';\n const options = args[1] || { header: true, delimiter: ',' };\n const delimiter = options.delimiter || ',';\n \n const formatValue = (v) => {\n const s = String(v);\n if (s.includes(delimiter) || s.includes('\"') || s.includes('\\n')) {\n return `\"${s.replace(/\"/g, '\"\"')}\"`;\n }\n return s;\n };\n\n if (options.header && typeof data[0] === 'object' && data[0] !== null) {\n const headers = Object.keys(data[0]);\n const headerRow = headers.join(delimiter);\n const rows = data.map(obj => headers.map(h => formatValue(obj[h])).join(delimiter));\n return [headerRow, ...rows].join('\\n');\n }\n return data.map(row => Array.isArray(row) ? row.map(formatValue).join(delimiter) : formatValue(row)).join('\\n');\n });\n\n // XML module\n const xmlMod = this.modules.get('xml');\n const domToObj = (node) => {\n if (node.nodeType === 3) return node.nodeValue.trim(); // Text node\n if (node.nodeType !== 1) return null; // Not an element\n \n const obj = {};\n if (node.attributes && node.attributes.length > 0) {\n obj['@attributes'] = {};\n for (let i = 0; i < node.attributes.length; i++) {\n const attr = node.attributes[i];\n obj['@attributes'][attr.name] = attr.value;\n }\n }\n \n for (let i = 0; i < node.childNodes.length; i++) {\n const child = node.childNodes[i];\n const result = domToObj(child);\n if (result === null || result === '') continue;\n \n const name = child.nodeName;\n if (obj[name]) {\n if (!Array.isArray(obj[name])) obj[name] = [obj[name]];\n obj[name].push(result);\n } else {\n obj[name] = result;\n }\n }\n return obj;\n };\n\n xmlMod.define('parse', async (args) => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(args[0], 'text/xml');\n const errorNode = doc.querySelector('parsererror');\n if (errorNode) throw new HeliosRuntimeError(`XML Parse Error: ${errorNode.textContent}`);\n return domToObj(doc.documentElement);\n });\n\n const objToXml = (obj, name) => {\n if (obj === null || typeof obj !== 'object') {\n return `<${name}>${obj === null ? '' : obj}</${name}>`;\n }\n let xml = `<${name}`;\n if (obj['@attributes']) {\n for (const [k, v] of Object.entries(obj['@attributes'])) {\n xml += ` ${k}=\"${v}\"`;\n }\n }\n xml += '>';\n \n for (const [k, v] of Object.entries(obj)) {\n if (k === '@attributes') continue;\n if (Array.isArray(v)) {\n v.forEach(item => xml += (typeof item === 'object' && item !== null) ? objToXml(item, k) : `<${k}>${item}</${k}>`);\n } else if (typeof v === 'object' && v !== null) {\n xml += objToXml(v, k);\n } else if (k === '#text') {\n xml += v;\n } else {\n xml += `<${k}>${v}</${k}>`;\n }\n }\n xml += `</${name}>`;\n return xml;\n };\n\n xmlMod.define('stringify', async (args) => {\n const data = args[0];\n const rootName = args[1] || 'root';\n return objToXml(data, rootName);\n });\n\n // Web module\n this.modules.set('web', new Environment());\n const webMod = this.modules.get('web');\n \n const runGrounding = async (query, toolName) => {\n const model = 'gemini-3-flash-preview';\n const response = await this.callAI(\n model, \n [{ role: 'user', parts: [{ text: query }] }],\n { temperature: 0 },\n [], \n [{ [toolName]: {} }]\n );\n return response.text;\n };\n\n const searchFunc = async (args) => {\n return await runGrounding(args[0], 'googleSearch');\n };\n searchFunc.isGrounding = true;\n searchFunc.groundingName = 'googleSearch';\n webMod.define('search', searchFunc);\n\n const mapsFunc = async (args) => {\n return await runGrounding(args[0], 'googleMaps');\n };\n mapsFunc.isGrounding = true;\n mapsFunc.groundingName = 'googleMaps';\n webMod.define('maps', mapsFunc);\n\n webMod.define('fetch', async (args) => {\n const url = args[0];\n const options = args[1] || {};\n const response = await fetch(url, options);\n if (options.json) return await response.json();\n return await response.text();\n });\n\n // Storage module\n this.modules.set('storage', new Environment());\n const storageMod = this.modules.get('storage');\n storageMod.define('get', async (args) => {\n const key = args[0];\n const val = localStorage.getItem(`helios_${key}`);\n try {\n return JSON.parse(val);\n } catch {\n return val;\n }\n });\n storageMod.define('set', async (args) => {\n const key = args[0];\n const val = args[1];\n localStorage.setItem(`helios_${key}`, typeof val === 'object' ? JSON.stringify(val) : String(val));\n return true;\n });\n storageMod.define('delete', async (args) => {\n localStorage.removeItem(`helios_${args[0]}`);\n return true;\n });\n\n // Context module\n this.modules.set('context', new Environment());\n const contextMod = this.modules.get('context');\n contextMod.define('requestInput', async (args) => {\n const prompt = args[0] || \"Input required:\";\n this.addTrace({ type: 'hitl_request', prompt });\n const result = await this.onInputRequest(prompt);\n this.addTrace({ type: 'hitl_response', prompt, result });\n return result;\n });\n contextMod.define('add', async (args) => {\n this.contextStack.push(args[0]);\n return true;\n });\n contextMod.define('clear', async () => {\n this.contextStack = [];\n return true;\n });\n contextMod.define('getHistory', async () => {\n return this.history;\n });\n contextMod.define('setHistory', async (args) => {\n this.history = args[0];\n return true;\n });\n contextMod.define('clearHistory', async () => {\n this.history = [];\n return true;\n });\n contextMod.define('setSystemPrompt', async (args) => {\n this.systemPrompt = args[0];\n return true;\n });\n contextMod.define('pruneHistory', async (args) => {\n const limit = args[0] || this.memoryLimit || 10;\n const entryLimit = limit * 2;\n if (this.history.length > entryLimit) {\n this.history = this.history.slice(-entryLimit);\n }\n return true;\n });\n\n // AI module for metaprogramming\n this.modules.set('ai', new Environment());\n const aiMod = this.modules.get('ai');\n \n // Swarm module\n this.modules.set('swarm', new Environment());\n const swarmMod = this.modules.get('swarm');\n this.subAgents = new Map();\n\n swarmMod.define('createAgent', async (args) => {\n const name = args[0];\n const systemPrompt = args[1];\n const tools = args[2] || [];\n // Automatically add swarm tools to every agent for collaboration\n const enhancedTools = [...new Set([...tools, 'delegate', 'broadcast', 'readBlackboard'])];\n // Default to global model or fallback\n const defaultModel = this.options.model || \"gemini-3-flash-preview\";\n this.subAgents.set(name, { systemPrompt, tools: enhancedTools, history: [], model: defaultModel });\n return true;\n });\n\n swarmMod.define('setAgentModel', async (args) => {\n const name = args[0];\n const model = args[1];\n const agent = this.subAgents.get(name);\n if (!agent) throw new HeliosRuntimeError(`Sub-agent '${name}' not found`);\n \n agent.model = model;\n this.onPrint(`[Swarm] Set model for ${name} to ${model}`);\n return true;\n });\n\n swarmMod.define('broadcast', async (args) => {\n const message = args[0];\n const sender = args[1] || \"System\";\n this.blackboard.push({ sender, message, timestamp: Date.now() });\n this.onPrint(`[Swarm] ${sender} broadcasted: ${message}`);\n return true;\n });\n // Add metadata for broadcast\n swarmMod.get('broadcast').__helios_tool = {\n description: \"Broadcast a message to all agents via the shared blackboard.\",\n params: [{ name: \"message\", type: \"string\" }]\n };\n\n swarmMod.define('readBlackboard', async () => {\n return this.blackboard;\n });\n // Add metadata for readBlackboard\n swarmMod.get('readBlackboard').__helios_tool = {\n description: \"Read all messages from the shared blackboard.\",\n params: []\n };\n\n swarmMod.define('addTool', async (args) => {\n const agentName = args[0];\n const toolName = args[1];\n const agent = this.subAgents.get(agentName);\n if (!agent) throw new HeliosRuntimeError(`Sub-agent '${agentName}' not found`);\n if (!agent.tools.includes(toolName)) {\n agent.tools.push(toolName);\n this.onPrint(`[Swarm] Added tool '${toolName}' to agent '${agentName}'`);\n }\n return true;\n });\n swarmMod.get('addTool').__helios_tool = {\n description: \"Add a tool to a specific agent.\",\n params: [{ name: \"agentName\", type: \"string\" }, { name: \"toolName\", type: \"string\" }]\n };\n\n swarmMod.define('removeTool', async (args) => {\n const agentName = args[0];\n const toolName = args[1];\n const agent = this.subAgents.get(agentName);\n if (!agent) throw new HeliosRuntimeError(`Sub-agent '${agentName}' not found`);\n const index = agent.tools.indexOf(toolName);\n if (index !== -1) {\n agent.tools.splice(index, 1);\n this.onPrint(`[Swarm] Removed tool '${toolName}' from agent '${agentName}'`);\n }\n return true;\n });\n swarmMod.get('removeTool').__helios_tool = {\n description: \"Remove a tool from a specific agent.\",\n params: [{ name: \"agentName\", type: \"string\" }, { name: \"toolName\", type: \"string\" }]\n };\n\n swarmMod.define('listTools', async (args) => {\n const agentName = args[0];\n if (agentName) {\n const agent = this.subAgents.get(agentName);\n if (!agent) throw new HeliosRuntimeError(`Sub-agent '${agentName}' not found`);\n return agent.tools;\n }\n return [];\n });\n swarmMod.get('listTools').__helios_tool = {\n description: \"List all tools available to a specific agent.\",\n params: [{ name: \"agentName\", type: \"string\" }]\n };\n\n swarmMod.define('delegate', async (args) => {\n const agentName = args[0];\n const task = args[1];\n const agent = this.subAgents.get(agentName);\n if (!agent) throw new HeliosRuntimeError(`Sub-agent '${agentName}' not found`);\n\n this.onPrint(`[Swarm] Delegating to ${agentName}: ${task}`);\n this.addTrace({ type: 'swarm_delegate', agent: agentName, task });\n\n // Prepare tools for the sub-agent\n const toolFunctions = new Map();\n const toolsList = [];\n \n for (const t of agent.tools) {\n let tool;\n try {\n tool = this.globalEnv.get(t);\n } catch (e) {\n // Try finding in modules\n for (const mod of this.modules.values()) {\n try { tool = mod.get(t); break; } catch (e2) {}\n }\n }\n\n const metadata = this.toolMetadata.get(t) || tool?.__helios_tool;\n if (tool) {\n const wrapped = {\n type: 'FunctionDeclaration',\n name: t,\n description: metadata?.description || `Executes the ${t} tool.`,\n params: metadata?.params || [],\n body: []\n };\n toolFunctions.set(t, wrapped);\n toolsList.push(wrapped);\n }\n }\n\n let currentContents = [...agent.history, { role: 'user', parts: [{ text: task }] }];\n let turnCount = 0;\n let maxTurns = 5;\n\n while (turnCount < maxTurns) {\n const response = await this.callAI(\n agent.model || \"gemini-3-flash-preview\",\n currentContents,\n { systemInstruction: agent.systemPrompt },\n toolsList\n );\n\n const functionCalls = response.functionCalls;\n if (functionCalls && functionCalls.length > 0) {\n currentContents.push({ role: 'model', parts: response.parts });\n const functionResponseParts = [];\n\n for (const call of functionCalls) {\n const func = toolFunctions.get(call.name);\n if (func) {\n this.onPrint(`[Swarm][${agentName}] Tool Call: ${call.name}`, call.args);\n try {\n const toolArgs = func.params.map(p => call.args[p.name]);\n // Pass agent name as sender if it's broadcast\n if (call.name === 'broadcast' && toolArgs.length === 1) {\n toolArgs.push(agentName);\n }\n \n let toolFn;\n try {\n toolFn = this.globalEnv.get(call.name);\n } catch (e) {\n for (const mod of this.modules.values()) {\n try { toolFn = mod.get(call.name); break; } catch (e2) {}\n }\n }\n \n if (!toolFn) throw new Error(`Tool function '${call.name}' implementation not found`);\n\n const result = await this.callFunction(toolFn, toolArgs);\n functionResponseParts.push({\n functionResponse: { name: call.name, response: { result }, id: call.id }\n });\n } catch (err) {\n functionResponseParts.push({\n functionResponse: { name: call.name, response: { error: err.message }, id: call.id }\n });\n }\n }\n }\n currentContents.push({ role: 'tool', parts: functionResponseParts });\n turnCount++;\n continue;\n }\n\n // Final response\n agent.history.push({ role: 'user', parts: [{ text: task }] });\n agent.history.push({ role: 'model', parts: response.parts });\n \n this.addTrace({ type: 'swarm_response', agent: agentName, response: response.text });\n return response.text;\n }\n\n throw new HeliosRuntimeError(`Agent '${agentName}' exceeded max turns during delegation.`);\n });\n\n // MCP Module (Model Context Protocol)\n this.modules.set('mcp', new Environment());\n const mcpMod = this.modules.get('mcp');\n this.mcpServers = new Map();\n\n mcpMod.define('connect', async (args) => {\n const serverName = args[0];\n const url = args[1];\n \n this.onPrint(`[MCP] Connecting to ${serverName} (${url})...`);\n \n try {\n const client = new MCPConnection(url, (msg) => this.onPrint(msg));\n await client.connect();\n this.mcpServers.set(serverName, { client, type: 'real' });\n return true;\n } catch (e) {\n this.onPrint(`[MCP] Connection failed: ${e.message}. Falling back to mock mode.`);\n // Fallback to mock for demo purposes if real connection fails\n this.mcpServers.set(serverName, { url, type: 'mock', tools: [] });\n return false;\n }\n });\n\n mcpMod.define('listTools', async (args) => {\n const serverName = args[0];\n const server = this.mcpServers.get(serverName);\n \n if (!server) {\n throw new HeliosRuntimeError(`MCP server '${serverName}' not found. Connect first.`);\n }\n\n if (server.type === 'real') {\n try {\n const result = await server.client.request(\"tools/list\", {});\n return result.tools;\n } catch (e) {\n throw new HeliosRuntimeError(`Failed to list tools: ${e.message}`);\n }\n } else {\n // Mock tools based on server name for demo purposes\n let tools = [];\n if (serverName === 'github') {\n tools = [\n { name: 'create_issue', description: 'Create a GitHub issue', inputSchema: { type: 'object', properties: { owner: { type: 'string' }, repo: { type: 'string' }, title: { type: 'string' } } } },\n { name: 'list_prs', description: 'List pull requests', inputSchema: { type: 'object', properties: { owner: { type: 'string' }, repo: { type: 'string' } } } }\n ];\n } else if (serverName === 'filesystem') {\n tools = [\n { name: 'read_file', description: 'Read a file from host', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } },\n { name: 'list_dir', description: 'List directory contents', inputSchema: { type: 'object', properties: { path: { type: 'string' } } } }\n ];\n } else {\n tools = [{ name: 'ping', description: 'Ping the server', inputSchema: {} }];\n }\n server.tools = tools;\n return tools;\n }\n });\n\n mcpMod.define('callTool', async (args) => {\n const serverName = args[0];\n const toolName = args[1];\n const toolArgs = args[2] || {};\n\n const server = this.mcpServers.get(serverName);\n if (!server) {\n throw new HeliosRuntimeError(`MCP server '${serverName}' not found.`);\n }\n\n this.onPrint(`[MCP] Calling tool '${toolName}' on server '${serverName}' with args: ${JSON.stringify(toolArgs)}`);\n \n if (server.type === 'real') {\n try {\n const result = await server.client.request(\"tools/call\", {\n name: toolName,\n arguments: toolArgs\n });\n return result;\n } catch (e) {\n throw new HeliosRuntimeError(`Tool execution failed: ${e.message}`);\n }\n } else {\n // Mock responses\n if (serverName === 'github' && toolName === 'create_issue') {\n return { content: [{ type: 'text', text: `Created issue #123 at https://github.com/${toolArgs.owner}/${toolArgs.repo}/issues/123` }] };\n } else if (serverName === 'filesystem' && toolName === 'read_file') {\n return { content: [{ type: 'text', text: \"Content of file at \" + toolArgs.path }] };\n }\n return { content: [{ type: 'text', text: `Executed ${toolName} on ${serverName}` }] };\n }\n });\n\n // Expose MCP globally\n this.globalEnv.define('mcp', mcpMod);\n\n // Memory module (Vector DB)\n this.modules.set('memory', new Environment());\n const memoryMod = this.modules.get('memory');\n \n const getEmbedding = async (text) => {\n if (this.options.dryRun) return new Array(768).fill(0);\n // Use gemini-embedding-001 with contents array to workaround SDK bug with singular content\n const result = await this.ai.models.embedContent({\n model: \"gemini-embedding-001\",\n contents: [{ parts: [{ text }] }],\n });\n return result.embeddings[0].values;\n };\n\n const cosineSimilarity = (v1, v2) => {\n let dotProduct = 0;\n let m1 = 0;\n let m2 = 0;\n for (let i = 0; i < v1.length; i++) {\n dotProduct += v1[i] * v2[i];\n m1 += v1[i] * v1[i];\n m2 += v2[i] * v2[i];\n }\n const mag = Math.sqrt(m1) * Math.sqrt(m2);\n if (mag === 0) return 0;\n return dotProduct / mag;\n };\n\n memoryMod.define('store', async (args) => {\n const key = args[0];\n const text = args[1];\n const metadata = args[2] || {};\n const vector = await getEmbedding(text);\n \n const memories = JSON.parse(localStorage.getItem('helios_memories') || '[]');\n memories.push({ key, text, vector, metadata, timestamp: Date.now() });\n localStorage.setItem('helios_memories', JSON.stringify(memories));\n return true;\n });\n\n memoryMod.define('search', async (args) => {\n const query = args[0];\n const limit = args[1] || 3;\n const queryVector = await getEmbedding(query);\n \n const memories = JSON.parse(localStorage.getItem('helios_memories') || '[]');\n const scored = memories.map(m => ({\n ...m,\n score: cosineSimilarity(queryVector, m.vector)\n })).sort((a, b) => b.score - a.score).slice(0, limit);\n \n return scored.map(s => ({ text: s.text, metadata: s.metadata, score: s.score }));\n });\n\n memoryMod.define('clear', async () => {\n localStorage.removeItem('helios_memories');\n return true;\n });\n\n aiMod.define('generateCode', async (args) => {\n const prompt = args[0];\n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: `You are a Helios code generator. Generate ONLY valid Helios code based on this request: ${prompt}. \n \n Helios Syntax Rules:\n - Use 'fn name(param: Type) -> ReturnType { ... }' for functions.\n - Common types: 'Int', 'Float', 'String', 'Bool', 'Unknown'.\n - Use 'let' or 'var' for variables.\n - Use 'print(val)' for logging.\n - Return types are optional but if used must follow '->'.\n - Do NOT include markdown code blocks, explanations, or any other text.` }] }],\n {}\n );\n let text = response.text.trim();\n // Strip markdown code blocks if present\n text = text.replace(/```[a-z]*\\s*([\\s\\S]*?)\\s*```/gi, '$1').trim();\n return text;\n });\n\n aiMod.define('classify', async (args) => {\n const text = args[0];\n const labels = args[1];\n if (!Array.isArray(labels)) throw new HeliosRuntimeError('Second argument to ai.classify must be a list of labels');\n \n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: `Classify the following text into exactly one of these labels: ${labels.join(', ')}. \n Text: \"${text}\". \n Return ONLY the label.` }] }],\n {}\n );\n return response.text.trim();\n });\n\n aiMod.define('extract', async (args) => {\n const text = args[0];\n let schema = args[1]; \n \n // If a Helios Type object is passed, convert it to a JSON example\n if (schema && schema.__type === 'Type') {\n const convertTypeToExample = (typeDef) => {\n if (!typeDef) return \"Unknown\";\n if (typeDef.type === 'TypeReference') {\n if (typeDef.name === 'String') return \"string\";\n if (typeDef.name === 'Int') return 0;\n if (typeDef.name === 'Float') return 0.0;\n if (typeDef.name === 'Bool') return true;\n // Handle nested types if needed, or just use name as hint\n return typeDef.name; \n }\n if (typeDef.type === 'ObjectType') {\n const example = {};\n for (const [key, val] of Object.entries(typeDef.fields)) {\n example[key] = convertTypeToExample(val);\n }\n return example;\n }\n if (typeDef.type === 'ArrayType') {\n return [convertTypeToExample(typeDef.elementType)];\n }\n return \"Unknown\";\n };\n schema = convertTypeToExample(schema.def);\n }\n \n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: `Extract data from the text according to this schema/structure: ${JSON.stringify(schema)}. \n Text: \"${text}\". \n Return ONLY valid JSON matching the structure.` }] }],\n { responseMimeType: \"application/json\" }\n );\n try {\n return JSON.parse(response.text);\n } catch (e) {\n return response.text;\n }\n });\n\n aiMod.define('summarize', async (args) => {\n const text = args[0];\n const length = args[1] || \"brief\"; // \"brief\", \"detailed\", or number of words\n \n let lenPrompt = \"briefly\";\n if (typeof length === 'number') lenPrompt = `in approximately ${length} words`;\n else if (length === 'detailed') lenPrompt = \"in detail\";\n \n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: `Summarize the following text ${lenPrompt}: \"${text}\".` }] }],\n {}\n );\n return response.text.trim();\n });\n\n aiMod.define('sentiment', async (args) => {\n const text = args[0];\n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: `Analyze the sentiment of the text below. Classify it as exactly one of: POSITIVE, NEGATIVE, NEUTRAL.\n \n Rules:\n - POSITIVE: Enthusiastic, happy, satisfied, praising, love, great, amazing.\n - NEGATIVE: Angry, disappointed, complaining, sad, hate, bad, terrible.\n - NEUTRAL: Factual, objective, no strong emotion, mixed but balanced.\n\n Text: \"${text}\"\n \n Return ONLY the classification label.` }] }],\n {}\n );\n const result = response.text.trim().toUpperCase();\n // Fallback cleanup in case the model returns \"Sentiment: POSITIVE\" etc.\n if (result.includes(\"POSITIVE\")) return \"POSITIVE\";\n if (result.includes(\"NEGATIVE\")) return \"NEGATIVE\";\n if (result.includes(\"NEUTRAL\")) return \"NEUTRAL\";\n return result;\n });\n\n aiMod.define('translate', async (args) => {\n const text = args[0];\n const targetLang = args[1];\n \n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: `Translate the following text to ${targetLang}. Return ONLY the translated text. \n Text: \"${text}\".` }] }],\n {}\n );\n return response.text.trim();\n });\n\n }\n\n async fixHeliosCode(code, errorMsg) {\n try {\n // If the error is \"Expression is not a function\", it might be due to a missing semicolon \n // causing two lines to be interpreted as a function call, or an actual invalid call.\n // We add this context to the prompt.\n \n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: `You are an expert in the Helios programming language. \n The following code generated a syntax or runtime error. Please fix it to be valid Helios code.\n \n ERROR: ${errorMsg}\n \n BROKEN CODE:\n ${code}\n \n HELIOS SYNTAX CHEATSHEET:\n - Declare variable: let x = 10\n - Function: fn myFunc(a: Int) -> Int { return a + 1 } (Use 'fn', NOT 'function')\n - NO arrow functions (=>), NO 'const', NO 'function' keyword.\n - If/Else: if x > 0 { ... } else { ... }\n - While: while x < 10 { ... }\n - Print: print(\"Hello\")\n - String conversion: use toString(x), NOT x.toString() or x.show()\n - Lists: let list = [1, 2, 3]; list.push(list, 4)\n - Objects: let obj = { a: 1 };\n - Comments: // comment\n - Semicolons are optional but recommended to avoid ambiguity.\n \n IMPORTANT: \n - If the error is \"Expression is not a function\", check if a variable is being called like a function, \n OR if a missing semicolon between a variable and a parenthesized expression on the next line is causing it.\n - Ensure all function calls use valid function names.\n - Do NOT use JavaScript syntax like 'const', '===', or 'function'. Use Helios syntax.\n - Do NOT use methods on primitives (like .toString()). Use global functions (toString(x)).\n \n Return ONLY the fixed code. Do not include markdown formatting or explanations.` }] }],\n {}\n );\n let text = response.text.trim();\n return text.replace(/```[a-z]*\\s*([\\s\\S]*?)\\s*```/gi, '$1').trim();\n } catch (e) {\n console.warn(\"Failed to auto-fix code:\", e);\n return code;\n }\n }\n\n async evaluate(node, env = this.globalEnv) {\n if (!node) return null;\n if (!node.type) {\n console.error(\"Node without type:\", node);\n }\n switch (node.type) {\n case 'Program':\n let lastResult = null;\n for (const stmt of node.body) {\n lastResult = await this.evaluate(stmt, env);\n if (lastResult instanceof ReturnValue) return lastResult.value;\n }\n return lastResult;\n\n case 'ComptimeBlock': {\n // 1. Evaluate the block\n let codeToInject = null;\n for (const stmt of node.body) {\n codeToInject = await this.evaluate(stmt, env);\n if (codeToInject instanceof ReturnValue) {\n codeToInject = codeToInject.value;\n break;\n }\n }\n\n // 2. If the block returned a string, parse and execute it\n if (typeof codeToInject === 'string') {\n let currentCode = codeToInject;\n let attempts = 0;\n const maxAttempts = 2; // 1 initial + 1 fix\n\n while (attempts < maxAttempts) {\n try {\n const lexer = new Lexer(currentCode);\n const tokens = lexer.tokenize();\n const parser = new Parser(tokens, currentCode);\n const program = parser.parse();\n \n // Execute the generated program in the current environment\n return await this.evaluate(program, env);\n } catch (err) {\n attempts++;\n const isSyntaxError = err.name === 'HeliosSyntaxError' || err.name === 'HeliosLexicalError';\n \n if (attempts < maxAttempts && this.ai) {\n this.onPrint(`[Comptime] Error detected: ${err.message}. Attempting AI fix...`);\n currentCode = await this.fixHeliosCode(currentCode, err.message);\n this.onPrint(`[Comptime] AI suggested fix:\\n${currentCode}`);\n continue;\n }\n \n // Re-throw if we're out of attempts or can't fix\n if (isSyntaxError) throw err;\n throw new HeliosRuntimeError(`Failed to parse or execute comptime injected code: ${err.message}`, node.line, node.col);\n }\n }\n }\n return codeToInject;\n }\n\n case 'ImportDeclaration': {\n let moduleEnv = this.modules.get(node.source);\n \n if (!moduleEnv && node.isExternal) {\n let source = node.source;\n if (source.startsWith('npm:')) {\n source = `https://esm.sh/${source.substring(4)}`;\n }\n \n if (node.uses.includes('js')) {\n this.addTrace({ type: 'external_import', source, runtime: 'js' });\n const jsModule = await JSBridge.loadModule(source);\n moduleEnv = new Environment();\n \n // Map all exports to the environment\n for (const [key, val] of Object.entries(jsModule)) {\n if (typeof val === 'function') {\n moduleEnv.define(key, JSBridge.wrap(val, { name: key }));\n } else {\n moduleEnv.define(key, val);\n }\n }\n \n // Handle default export if it exists and isn't already in entries\n if (jsModule.default && !jsModule.hasOwnProperty('default')) {\n if (typeof jsModule.default === 'function') {\n moduleEnv.define('default', JSBridge.wrap(jsModule.default, { name: 'default' }));\n } else {\n moduleEnv.define('default', jsModule.default);\n }\n }\n \n // Cache it for future use\n this.modules.set(node.source, moduleEnv);\n }\n }\n\n if (!moduleEnv) {\n throw new HeliosRuntimeError(`Module not found: ${node.source}`, node.line, node.col);\n }\n for (const spec of node.specifiers) {\n try {\n const value = moduleEnv.get(spec.name);\n env.define(spec.alias || spec.name, value);\n } catch (e) {\n throw new HeliosRuntimeError(`Module '${node.source}' does not export '${spec.name}'`, node.line, node.col);\n }\n }\n return undefined;\n }\n\n case 'VariableDeclaration':\n const value = await this.evaluate(node.init, env);\n env.define(node.pattern, value);\n return undefined;\n\n case 'TypeDeclaration':\n this.globalTypes.set(node.name, node.value);\n // Also define in env so it can be passed as a value (e.g. to extract())\n env.define(node.name, { __type: 'Type', name: node.name, def: node.value });\n return undefined;\n\n case 'AssignmentExpression': {\n const assignValue = await this.evaluate(node.value, env);\n if (!node.left) {\n throw new HeliosRuntimeError(`Invalid assignment target`, node.line, node.col);\n }\n if (node.left.type === 'Identifier') {\n env.assign(node.left.name, assignValue);\n } else if (node.left.type === 'MemberExpression') {\n const obj = await this.evaluate(node.left.object, env);\n const prop = await this.evaluate(node.left.property, env);\n if (obj == null) {\n throw new HeliosRuntimeError(`Cannot set property of null or undefined`, node.line, node.col);\n }\n obj[prop] = assignValue;\n } else {\n throw new HeliosRuntimeError(`Invalid assignment target`, node.line, node.col);\n }\n return assignValue;\n }\n\n case 'Literal':\n if (node.kind === 'Number') return parseFloat(node.value);\n if (node.kind === 'Boolean') return node.value === true || node.value === 'true';\n if (node.kind === 'Null') return null;\n return node.value;\n\n case 'Identifier':\n try {\n return env.get(node.name);\n } catch (err) {\n // Fallback to module auto-resolution like we did in typechecker\n const mod = this.modules.get(node.name);\n if (mod) return mod;\n throw new HeliosRuntimeError(err.message, node.line, node.col);\n }\n\n case 'BinaryExpression': {\n const left = await this.evaluate(node.left, env);\n \n if (node.operator === '&&') {\n if (!left) return left;\n return await this.evaluate(node.right, env);\n }\n if (node.operator === '||') {\n if (left) return left;\n return await this.evaluate(node.right, env);\n }\n\n if (node.operator === '|>') {\n if (!node.right) {\n throw new HeliosRuntimeError(`Invalid pipe target`, node.line, node.col);\n }\n if (node.right.type === 'CallExpression') {\n const callee = await this.evaluate(node.right.callee, env);\n const args = [left];\n for (const arg of node.right.arguments) {\n args.push(await this.evaluate(arg, env));\n }\n return await this.callFunction(callee, args, node.right);\n } else {\n const right = await this.evaluate(node.right, env);\n return await this.callFunction(right, [left], node);\n }\n }\n\n const right = await this.evaluate(node.right, env);\n switch (node.operator) {\n case '+': return left + right;\n case '-': return left - right;\n case '*': return left * right;\n case '/': return left / right;\n case '==': return left === right;\n case '!=': return left !== right;\n case '<': return left < right;\n case '>': return left > right;\n case '<=': return left <= right;\n case '>=': return left >= right;\n default: throw new HeliosRuntimeError(`Unknown operator: ${node.operator}`, node.line, node.col);\n }\n }\n\n case 'UnaryExpression': {\n const arg = await this.evaluate(node.argument, env);\n if (node.operator === '-') return -arg;\n if (node.operator === '!') return !arg;\n return arg;\n }\n\n case 'AwaitExpression':\n return await this.evaluate(node.argument, env);\n\n case 'ArrayLiteral': {\n const elements = [];\n for (const el of node.elements) {\n elements.push(await this.evaluate(el, env));\n }\n return elements;\n }\n\n case 'ObjectLiteral': {\n const obj = {};\n for (const prop of node.properties) {\n obj[prop.key] = await this.evaluate(prop.value, env);\n }\n return obj;\n }\n\n case 'MemberExpression': {\n const obj = await this.evaluate(node.object, env);\n const prop = await this.evaluate(node.property, env);\n if (obj == null) {\n throw new HeliosRuntimeError(`Cannot read property of null or undefined`, node.line, node.col);\n }\n \n let val;\n if (obj instanceof Environment) {\n try {\n val = obj.get(prop);\n } catch (e) {\n // If not found in environment, fall back to undefined (or let it throw if strict)\n // But for modules, we usually want it to throw if not found\n throw new HeliosRuntimeError(`Module member '${prop}' not found`, node.line, node.col);\n }\n } else {\n val = obj[prop];\n }\n\n if (typeof val === 'function') {\n // If it's a native function (like Array.push), we need to bind 'this' \n // and spread arguments because Helios passes them as a single array.\n // We exclude Environment (modules) because their members are Helios tools\n // which already expect the [args] array convention.\n const isNative = val.toString().includes('[native code]');\n const isModule = obj instanceof Environment;\n \n if (!isModule && isNative) {\n return (args) => val.apply(obj, args);\n }\n }\n return val;\n }\n\n case 'PromptExpression': {\n // Interpolate template\n let template = await this.evaluate(node.template, env);\n if (typeof template !== 'string') {\n template = String(template);\n }\n \n const regex = /\\{([^}]+)\\}/g;\n const matches = [...template.matchAll(regex)];\n \n for (const match of matches) {\n const exprStr = match[1];\n try {\n const lexer = new Lexer(exprStr);\n const tokens = lexer.tokenize();\n const parser = new Parser(tokens, exprStr);\n const exprNode = parser.parseExpression();\n const val = await this.evaluate(exprNode, env);\n template = template.replace(match[0], typeof val === 'object' ? JSON.stringify(val) : String(val));\n } catch (err) {\n console.warn(`Failed to interpolate expression \"${exprStr}\" in prompt:`, err);\n }\n }\n\n // Add context\n const localContexts = [];\n if (node.contexts) {\n for (const ctxExpr of node.contexts) {\n localContexts.push(await this.evaluate(ctxExpr, env));\n }\n }\n \n const allContexts = [...this.contextStack, ...localContexts];\n if (allContexts.length > 0) {\n const contextStr = allContexts.map((ctx, i) => \n `[CONTEXT_DATA_${i + 1}]\\n${typeof ctx === 'object' ? JSON.stringify(ctx, null, 2) : String(ctx)}`\n ).join('\\n\\n');\n \n template = `CRITICAL: You MUST use the provided [CONTEXT_DATA] below to fulfill the request. Do NOT use any other information or examples.\\n\\n${contextStr}\\n\\n---\\n\\nUSER REQUEST: ${template}`;\n }\n\n if (this.options.dryRun) {\n return `[DRY RUN] Prompt: ${template}`;\n }\n\n let retries = node.retries ? await this.evaluate(node.retries, env) : 0;\n let timeout = node.timeout ? await this.evaluate(node.timeout, env) : 30000;\n let modelName = node.model ? await this.evaluate(node.model, env) : (this.options.model || (this.options.provider === 'custom' ? \"gpt-3.5-turbo\" : \"gemini-3-flash-preview\"));\n let attempt = 0;\n let lastError = null;\n\n // Prepare tools\n let toolFunctions = new Map();\n let toolsList = []; \n let groundingTools = [];\n\n if (node.tools) {\n for (const toolName of node.tools) {\n const tool = env.get(toolName);\n if (!tool) {\n throw new HeliosRuntimeError(`Tool '${toolName}' not found`, node.line, node.col);\n }\n\n if (tool.isGrounding) {\n groundingTools.push({ [tool.groundingName]: {} });\n } else if (typeof tool === 'function' || tool.type === 'FunctionDeclaration' || this.toolMetadata.has(toolName)) {\n if (tool.type === 'FunctionDeclaration') {\n toolFunctions.set(toolName, tool);\n toolsList.push(tool);\n } else {\n // Built-in or dynamic function\n const metadata = this.toolMetadata.get(toolName) || tool.__helios_tool;\n const wrapped = {\n type: 'FunctionDeclaration',\n name: toolName,\n description: metadata?.description || `Executes the ${toolName} tool.`,\n params: metadata?.params || [],\n body: []\n };\n toolFunctions.set(toolName, wrapped);\n toolsList.push(wrapped);\n }\n } else {\n throw new HeliosRuntimeError(`Tool '${toolName}' is not a valid function or grounding tool`, node.line, node.col);\n }\n }\n }\n\n // Initial contents\n let history = node.history ? await this.evaluate(node.history, env) : this.history;\n let currentContents = [...history];\n \n // Add current prompt\n const promptEntry = { role: 'user', parts: [{ text: template }] };\n currentContents.push(promptEntry);\n \n this.addTrace({\n type: 'prompt_start',\n model: modelName,\n template: template,\n history: history.length,\n context: this.contextStack.length\n });\n\n let maxTurns = 10; \n let turnCount = 0;\n\n while (attempt <= retries) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n \n // Inner loop for function calling turns\n while (turnCount < maxTurns) {\n this.addTrace({\n type: 'ai_call_start',\n turn: turnCount,\n contents: JSON.parse(JSON.stringify(currentContents))\n });\n\n const response = await this.callAI(modelName, currentContents, {\n temperature: this.options.temperature ?? 0.9,\n topK: this.options.topK ?? 40,\n topP: this.options.topP ?? 0.95,\n schema: node.schema,\n signal: controller.signal\n }, toolsList, groundingTools);\n \n clearTimeout(timeoutId);\n\n this.addTrace({\n type: 'ai_call_end',\n turn: turnCount,\n response: {\n text: response.text,\n functionCalls: response.functionCalls,\n parts: response.parts,\n usage: response.usage,\n groundingMetadata: response.groundingMetadata\n }\n });\n\n const functionCalls = response.functionCalls;\n \n if (functionCalls && functionCalls.length > 0) {\n // 1. Add model's turn to history, preserving all parts (including thoughts)\n currentContents.push({ \n role: 'model', \n parts: response.parts\n });\n\n // 2. Execute functions and collect responses\n const functionResponseParts = [];\n for (const call of functionCalls) {\n const func = toolFunctions.get(call.name);\n if (func) {\n this.onPrint(`[Tool] Calling ${call.name} with args:`, call.args);\n this.addTrace({\n type: 'tool_call',\n name: call.name,\n args: call.args,\n id: call.id\n });\n\n try {\n // Map named args to positional args\n const args = func.params.map(p => call.args[p.name]);\n const result = await this.callFunction(func, args, node);\n \n this.addTrace({\n type: 'tool_response',\n name: call.name,\n result: result,\n id: call.id\n });\n\n functionResponseParts.push({\n functionResponse: {\n name: call.name,\n response: { result: result },\n id: call.id\n }\n });\n } catch (toolErr) {\n this.addTrace({\n type: 'tool_error',\n name: call.name,\n error: toolErr.message,\n id: call.id\n });\n\n functionResponseParts.push({\n functionResponse: {\n name: call.name,\n response: { error: toolErr.message },\n id: call.id\n }\n });\n }\n }\n }\n \n // 3. Add function responses to history\n currentContents.push({ role: 'tool', parts: functionResponseParts });\n turnCount++;\n continue; \n }\n\n // No function calls, process final text response\n let text = response.text;\n \n // Update global history\n this.history.push({ role: 'user', parts: [{ text: template }] });\n this.history.push({ role: 'model', parts: response.parts });\n \n // Apply memory constraints\n await this.manageHistory();\n \n // Strip markdown code blocks if present\n if (text) {\n text = text.replace(/```json\\s*([\\s\\S]*?)\\s*```/g, '$1')\n .replace(/```\\s*([\\s\\S]*?)\\s*```/g, '$1')\n .trim();\n }\n \n if (node.schema) {\n if (!text) {\n throw new Error(\"AI returned an empty response, but a structured schema was expected.\");\n }\n try {\n let parsed = JSON.parse(text);\n \n // Robust unwrapping logic...\n const schemaName = typeof node.schema === 'string' ? node.schema : \n (node.schema.type === 'TypeReference' ? node.schema.name : null);\n \n if (schemaName && typeof parsed === 'object' && parsed !== null) {\n const keys = Object.keys(parsed);\n if (keys.length === 1 && keys[0].toLowerCase() === schemaName.toLowerCase()) {\n parsed = parsed[keys[0]];\n } else if (parsed[schemaName]) {\n parsed = parsed[schemaName];\n } else {\n const match = keys.find(k => k.toLowerCase() === schemaName.toLowerCase());\n if (match) parsed = parsed[match];\n }\n }\n\n // Normalize keys...\n // Note: We need the schema definition here. \n // Since callAI handles the schema conversion for the provider, \n // we might need a unified way to get the schema properties for normalization.\n // For now, let's use convertToGeminiSchema as the canonical internal representation for normalization\n // or just skip normalization if it's too complex across providers.\n // Let's keep using convertToGeminiSchema for normalization logic as it produces a standard JSON schema structure.\n const geminiSchema = this.convertToGeminiSchema(node.schema);\n if (geminiSchema && geminiSchema.type === 'OBJECT' && typeof parsed === 'object' && parsed !== null) {\n const normalized = {};\n const schemaProperties = geminiSchema.properties || {};\n for (const key of Object.keys(parsed)) {\n const schemaKey = Object.keys(schemaProperties).find(sk => sk.toLowerCase() === key.toLowerCase());\n if (schemaKey) {\n normalized[schemaKey] = parsed[key];\n } else {\n normalized[key] = parsed[key];\n }\n }\n parsed = normalized;\n }\n\n return parsed;\n } catch (e) {\n throw new Error(`AI returned invalid JSON for schema: ${e.message}\\nResponse: ${text}`);\n }\n }\n return text;\n }\n \n throw new HeliosRuntimeError(`Max conversation turns reached during function calling.`, node.line, node.col);\n\n } catch (err) {\n lastError = err;\n attempt++;\n if (attempt <= retries) {\n this.onPrint(`[AI] Attempt ${attempt} failed, retrying...`);\n currentContents = [{ role: 'user', parts: [{ text: template }] }];\n turnCount = 0;\n }\n }\n }\n\n if (node.fallback) {\n return await this.evaluate(node.fallback, env);\n }\n\n throw new HeliosRuntimeError(`Prompt failed after ${retries} retries: ${lastError?.message}`, node.line, node.col);\n }\n\n case 'WhileStatement': {\n let result = undefined;\n let __iterations = 0;\n const __maxIter = this.options.maxLoopIterations || MAX_LOOP_ITERATIONS;\n while (await this.evaluate(node.condition, env)) {\n if (++__iterations > __maxIter) {\n throw new HeliosRuntimeError(`Infinite loop detected: exceeded ${__maxIter} iterations`, node.line, node.col);\n }\n result = await this.evaluateBlock(node.body, new Environment(env));\n if (result instanceof ReturnValue) return result;\n }\n return result;\n }\n\n case 'IfExpression': {\n const condition = await this.evaluate(node.condition, env);\n if (condition) {\n return await this.evaluateBlock(node.consequent, new Environment(env));\n } else if (node.alternate) {\n if (Array.isArray(node.alternate)) {\n return await this.evaluateBlock(node.alternate, new Environment(env));\n } else {\n return await this.evaluate(node.alternate, env);\n }\n }\n return undefined;\n }\n\n case 'MatchExpression': {\n const discriminant = await this.evaluate(node.discriminant, env);\n for (const arm of node.arms) {\n const bindings = {};\n if (await this.matchesPattern(arm.pattern, discriminant, env, bindings)) {\n // Create environment with bindings\n const matchEnv = new Environment(env);\n for (const [key, val] of Object.entries(bindings)) {\n matchEnv.define(key, val);\n }\n\n if (arm.guard) {\n const guardResult = await this.evaluate(arm.guard, matchEnv);\n if (!guardResult) continue;\n }\n return await this.evaluateInMatchBody(arm.body, matchEnv);\n }\n }\n throw new HeliosRuntimeError('No match found', node.line, node.col);\n }\n\n case 'ForStatement': {\n const iterable = await this.evaluate(node.iterable, env);\n let result = undefined;\n let __iterations = 0;\n const __maxIter = this.options.maxLoopIterations || MAX_LOOP_ITERATIONS;\n \n if (Array.isArray(iterable)) {\n for (const item of iterable) {\n if (++__iterations > __maxIter) {\n throw new HeliosRuntimeError(`Loop iteration limit exceeded: ${__maxIter}`, node.line, node.col);\n }\n const subEnv = new Environment(env);\n subEnv.define(node.iterator, item);\n result = await this.evaluateBlock(node.body, subEnv);\n if (result instanceof ReturnValue) return result;\n }\n } else if (typeof iterable === 'number') {\n for (let i = 0; i < iterable; i++) {\n if (++__iterations > __maxIter) {\n throw new HeliosRuntimeError(`Loop iteration limit exceeded: ${__maxIter}`, node.line, node.col);\n }\n const subEnv = new Environment(env);\n subEnv.define(node.iterator, i);\n result = await this.evaluateBlock(node.body, subEnv);\n if (result instanceof ReturnValue) return result;\n }\n }\n return result;\n }\n\n case 'WithContextStatement': {\n const contexts = [];\n for (const ctxExpr of node.context) {\n contexts.push(await this.evaluate(ctxExpr, env));\n }\n this.contextStack.push(...contexts);\n try {\n return await this.evaluateBlock(node.body, new Environment(env));\n } finally {\n for (let i = 0; i < contexts.length; i++) {\n this.contextStack.pop();\n }\n }\n }\n\n case 'FunctionDeclaration':\n env.define(node.name, node);\n return undefined;\n\n case 'CallExpression': {\n const callee = await this.evaluate(node.callee, env);\n const args = [];\n for (const arg of node.arguments) {\n args.push(await this.evaluate(arg, env));\n }\n return await this.callFunction(callee, args, node);\n }\n\n case 'NewExpression': {\n const callee = await this.evaluate(node.callee, env);\n const args = [];\n for (const arg of node.arguments) {\n args.push(await this.evaluate(arg, env));\n }\n \n if (typeof callee === 'function') {\n return new callee(...args);\n }\n \n throw new HeliosRuntimeError(`Cannot use 'new' on non-function: ${typeof callee}`, node.line, node.col);\n }\n\n case 'ReturnStatement':\n return new ReturnValue(await this.evaluate(node.argument, env));\n\n default:\n return null;\n }\n }\n\n async callFunction(callee, args, node) {\n if (typeof callee === 'function') {\n return await callee(args);\n }\n \n if (callee && callee.type === 'FunctionDeclaration') {\n const traceAnnotation = callee.annotations?.find(a => a.name === 'trace');\n if (traceAnnotation) {\n this.onPrint(`[Trace] Entering ${callee.name}${traceAnnotation.args ? ` (${traceAnnotation.args})` : ''} with args:`, args);\n }\n\n const subEnv = new Environment(this.globalEnv);\n callee.params.forEach((param, i) => {\n subEnv.define(param.name, args[i]);\n });\n const result = await this.evaluateBlock(callee.body, subEnv);\n const finalResult = result instanceof ReturnValue ? result.value : result;\n\n if (traceAnnotation) {\n this.onPrint(`[Trace] Exiting ${callee.name} with result:`, finalResult);\n }\n\n return finalResult;\n }\n const calleeName = node && node.callee && node.callee.type === 'Identifier' ? node.callee.name : 'Expression';\n throw new HeliosRuntimeError(`${calleeName} is not a function`, node ? node.line : 0, node ? node.col : 0);\n }\n\n async evaluateBlock(stmts, env) {\n let result = null;\n for (const stmt of stmts) {\n result = await this.evaluate(stmt, env);\n if (result instanceof ReturnValue) return result;\n }\n return result;\n }\n\n async matchesPattern(pattern, value, env, bindings) {\n if (!pattern) return false;\n // Wildcard match\n if (pattern.type === 'Identifier' && pattern.name === '_') {\n return true;\n }\n\n // Identifier binding\n if (pattern.type === 'Identifier') {\n bindings[pattern.name] = value;\n return true;\n }\n \n // Literal match\n if (pattern.type === 'Literal') {\n const litVal = await this.evaluate(pattern, env);\n return litVal === value;\n }\n\n // Array destructuring\n if (pattern.type === 'ArrayLiteral') {\n if (!Array.isArray(value)) return false;\n if (pattern.elements.length !== value.length) return false;\n \n for (let i = 0; i < pattern.elements.length; i++) {\n if (!await this.matchesPattern(pattern.elements[i], value[i], env, bindings)) {\n return false;\n }\n }\n return true;\n }\n\n // Object destructuring\n if (pattern.type === 'ObjectLiteral') {\n if (typeof value !== 'object' || value === null) return false;\n \n for (const prop of pattern.properties) {\n // Check if property exists in value\n if (!(prop.key in value)) return false;\n \n if (!await this.matchesPattern(prop.value, value[prop.key], env, bindings)) {\n return false;\n }\n }\n return true;\n }\n\n // Fallback: Evaluate pattern as expression (e.g. 1+2)\n try {\n const patternValue = await this.evaluate(pattern, env);\n \n // Deep equality check for objects/arrays\n if (typeof patternValue === 'object' && patternValue !== null && typeof value === 'object' && value !== null) {\n return JSON.stringify(patternValue) === JSON.stringify(value);\n }\n \n return patternValue === value;\n } catch (e) {\n // If evaluation fails (e.g. undefined variable), it's not a match\n return false;\n }\n }\n\n async evaluateInMatchBody(body, env) {\n const subEnv = new Environment(env);\n if (Array.isArray(body)) {\n return await this.evaluateBlock(body, subEnv);\n }\n return await this.evaluate(body, subEnv);\n }\n\n async callAI(model, contents, config, tools, groundingTools) {\n // Ensure the model is valid for the current provider, otherwise fallback to default\n const providerModels = ModelManager.getModelsByProvider(this.options.provider);\n const isModelValidForProvider = providerModels.some(m => m.id === model);\n \n if (!model || (!isModelValidForProvider && this.options.provider !== 'custom')) {\n const defaultModel = ModelManager.getDefaultModelForProvider(this.options.provider);\n if (defaultModel) {\n model = defaultModel.id;\n }\n }\n\n if (this.options.provider === 'openai' || this.options.provider === 'custom') {\n return this.callOpenAICompatible(model, contents, config, tools, groundingTools);\n } else if (this.options.provider === 'anthropic') {\n return this.callAnthropicAI(model, contents, config, tools, groundingTools);\n } else if (this.options.provider === 'webllm') {\n return this.callWebLLM(model, contents, config, tools, groundingTools);\n } else {\n return this.callGeminiAI(model, contents, config, tools, groundingTools);\n }\n }\n\n async manageHistory() {\n // Each turn is typically 2 entries (user + model), but can be more with tool calls\n // We'll use a simple heuristic: if history length > limit * 2\n if (this.history.length > this.memoryLimit * 2) {\n if (this.summarizeHistory && this.ai) {\n await this.summarizeOlderHistory();\n } else {\n // Simple pruning: keep the last N turns\n this.history = this.history.slice(-this.memoryLimit * 2);\n }\n }\n }\n\n async summarizeOlderHistory() {\n // Keep the last N turns, summarize the rest\n const keepCount = this.memoryLimit * 2;\n const toSummarize = this.history.slice(0, -keepCount);\n const keep = this.history.slice(-keepCount);\n \n if (toSummarize.length === 0) return;\n\n this.onPrint(`[Memory] Summarizing ${Math.floor(toSummarize.length / 2)} older turns to manage context...`);\n\n const summaryPrompt = \"Summarize the following conversation history briefly but comprehensively. \" +\n \"Focus on key facts, user preferences, and decisions made. \" +\n \"This summary will be used as context for future turns. \" +\n \"Keep the summary under 300 words.\\n\\n\" +\n toSummarize.map(m => {\n const text = m.parts.map(p => p.text || (p.functionCall ? `[Call ${p.functionCall.name}]` : '')).join(' ');\n return `${m.role.toUpperCase()}: ${text}`;\n }).join('\\n');\n\n try {\n const response = await this.callAI(\n this.options.model || \"gemini-3-flash-preview\",\n [{ role: 'user', parts: [{ text: summaryPrompt }] }],\n {}\n );\n \n const summary = response.text;\n \n // Create a new history starting with the summary\n // We use a special 'user' message to inject the summary context\n this.history = [\n { \n role: 'user', \n parts: [{ text: `[CONVERSATION SUMMARY: ${summary}]` }] \n },\n { \n role: 'model', \n parts: [{ text: \"I have noted the summary of our previous conversation. How can I help you further?\" }] \n },\n ...keep\n ];\n \n this.onPrint(\"[Memory] History summarized successfully.\");\n } catch (e) {\n this.onPrint(`[Memory Warning] Summarization failed: ${e.message}. Falling back to pruning.`);\n this.history = keep;\n }\n }\n\n async callGeminiAI(model, contents, config, tools, groundingTools) {\n if (!this.ai) {\n throw new Error(\"GoogleGenAI is not initialized.\");\n }\n\n // Auto-switch to Gemini 3.0 Flash for Google Maps grounding\n if (groundingTools?.some(gt => gt.googleMaps) && !model.startsWith('gemini-3')) {\n model = 'gemini-3-flash-preview';\n }\n\n const geminiConfig = {\n model: model,\n config: {\n temperature: config.temperature,\n topK: config.topK,\n topP: config.topP,\n systemInstruction: this.systemPrompt,\n }\n };\n\n // Thinking level is only supported for Gemini 3 series models\n if (model.includes('gemini-3')) {\n geminiConfig.config.thinkingConfig = { thinkingLevel: ThinkingLevel.LOW };\n }\n\n if (config.schema && !groundingTools?.some(gt => gt.googleMaps)) {\n geminiConfig.config.responseMimeType = \"application/json\";\n geminiConfig.config.responseSchema = this.convertToGeminiSchema(config.schema);\n }\n\n const geminiTools = [];\n if (tools && tools.length > 0) {\n const toolDecls = tools.map(t => this.convertToGeminiFunctionDeclaration(t));\n geminiTools.push({ functionDeclarations: toolDecls });\n }\n \n if (groundingTools && groundingTools.length > 0) {\n geminiTools.push(...groundingTools);\n }\n\n if (geminiTools.length > 0) {\n geminiConfig.config.tools = geminiTools;\n \n // Only add toolConfig if we have function declarations\n if (tools && tools.length > 0) {\n geminiConfig.config.toolConfig = {\n functionCallingConfig: {\n mode: \"AUTO\"\n }\n };\n }\n }\n\n try {\n const response = await this.ai.models.generateContent({\n ...geminiConfig,\n contents: contents,\n });\n\n // Robust text extraction\n let text = response.text;\n if (!text && response.candidates?.[0]?.content?.parts) {\n text = response.candidates[0].content.parts\n .filter(p => p.text)\n .map(p => p.text)\n .join('');\n }\n\n return {\n text: text,\n functionCalls: response.functionCalls,\n parts: response.candidates?.[0]?.content?.parts || [],\n usage: response.usageMetadata,\n groundingMetadata: response.candidates?.[0]?.groundingMetadata\n };\n } catch (e) {\n console.error(\"Gemini generateContent failed:\", e);\n throw e;\n }\n }\n\n async callAnthropicAI(model, contents, config, tools, groundingTools) {\n if (!this.options.apiKey) {\n throw new Error(\"API Key is required for Anthropic provider.\");\n }\n\n const messages = [];\n let systemPrompt = this.systemPrompt || \"\";\n\n // Convert contents to Anthropic format\n for (const content of contents) {\n if (content.role === 'model') {\n messages.push({ role: 'assistant', content: content.parts[0].text });\n } else if (content.role === 'user') {\n messages.push({ role: 'user', content: content.parts[0].text });\n } else if (content.role === 'system') {\n // Anthropic uses a top-level system parameter, not a message role\n systemPrompt += (systemPrompt ? \"\\n\" : \"\") + content.parts[0].text;\n }\n // Note: Tool use in Anthropic is different, simplifying for this demo to text-only if complex\n }\n\n const headers = {\n 'x-api-key': this.options.apiKey,\n 'anthropic-version': '2023-06-01',\n 'content-type': 'application/json',\n 'dangerously-allow-browser': 'true' // Required for client-side calls\n };\n\n const body = {\n model: model || 'claude-3-opus-20240229',\n messages: messages,\n max_tokens: 1024,\n temperature: config.temperature,\n system: systemPrompt\n };\n\n // TODO: Add tool support for Anthropic\n\n const response = await fetch('https://api.anthropic.com/v1/messages', {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: config.signal\n });\n\n if (!response.ok) {\n const errText = await response.text();\n throw new Error(`Anthropic API Error (${response.status}): ${errText}`);\n }\n\n const data = await response.json();\n return {\n text: data.content[0].text,\n parts: [{ text: data.content[0].text }],\n usage: data.usage\n };\n }\n\n async callWebLLM(model, contents, config, tools, groundingTools) {\n if (!this.webllmEngine) {\n this.onPrint(`[WebLLM] Initializing engine for model: ${model}... This may take a while to download weights.`);\n this.webllmEngine = await webllm.CreateMLCEngine(model, {\n initProgressCallback: (progress) => {\n if (progress.progress === 1) {\n this.onPrint(`[WebLLM] Model loaded successfully.`);\n }\n }\n });\n this.currentWebLLMModel = model;\n } else if (this.currentWebLLMModel !== model) {\n this.onPrint(`[WebLLM] Switching model to: ${model}...`);\n await this.webllmEngine.reload(model);\n this.currentWebLLMModel = model;\n }\n\n const messages = [];\n if (config.systemInstruction) {\n messages.push({ role: 'system', content: config.systemInstruction });\n }\n\n for (const turn of contents) {\n if (turn.role === 'user') {\n const text = turn.parts.map(p => p.text).join('\\n');\n messages.push({ role: 'user', content: text });\n } else if (turn.role === 'model') {\n const text = turn.parts.map(p => p.text).join('\\n');\n messages.push({ role: 'assistant', content: text });\n }\n }\n\n const request = {\n messages,\n temperature: config.temperature ?? 0.7,\n top_p: config.topP ?? 0.95,\n };\n\n if (tools && tools.length > 0) {\n request.tools = tools.map(tool => ({\n type: 'function',\n function: this.convertToOpenAIFunctionDeclaration(tool)\n }));\n }\n\n if (config.schema) {\n request.response_format = {\n type: \"json_object\",\n schema: this.convertToOpenAISchema(config.schema)\n };\n }\n\n this.onPrint(`[WebLLM] Generating response...`);\n const response = await this.webllmEngine.chat.completions.create(request);\n \n const message = response.choices[0].message;\n \n let functionCalls = null;\n if (message.tool_calls && message.tool_calls.length > 0) {\n functionCalls = message.tool_calls.map(tc => ({\n name: tc.function.name,\n args: JSON.parse(tc.function.arguments),\n id: tc.id\n }));\n }\n\n return {\n text: message.content || \"\",\n functionCalls,\n parts: message.tool_calls ? [\n { text: message.content || \"\" },\n ...message.tool_calls.map(tc => ({\n functionCall: {\n name: tc.function.name,\n args: JSON.parse(tc.function.arguments)\n }\n }))\n ] : [{ text: message.content || \"\" }],\n usage: response.usage\n };\n }\n\n async callOpenAICompatible(model, contents, config, tools, groundingTools) {\n const baseUrl = this.options.baseUrl || \"https://api.openai.com/v1\";\n \n const messages = [];\n \n // Add system instruction\n messages.push({\n role: 'system',\n content: (this.systemPrompt || \"\") + \n \" You are the Helios AI engine. \" +\n \"If a JSON schema is provided, you MUST return a valid JSON object matching that schema exactly. \" +\n \"Do NOT wrap the JSON in a top-level property or code blocks. \" +\n \"If NO schema is provided, return a plain text response. \" +\n \"Always use the provided context items to inform your response.\"\n });\n\n for (const content of contents) {\n if (content.role === 'model') {\n // Check if it's a function call turn\n if (content.parts && content.parts[0].functionCall) {\n messages.push({\n role: 'assistant',\n content: null,\n tool_calls: content.parts.map((p, i) => ({\n id: p.functionCall.id || `call_${i}_${Date.now()}`, // OpenAI requires IDs\n type: 'function',\n function: {\n name: p.functionCall.name,\n arguments: JSON.stringify(p.functionCall.args)\n }\n }))\n });\n } else {\n messages.push({ role: 'assistant', content: content.parts[0].text });\n }\n } else if (content.role === 'tool') {\n // Handle tool responses\n for (const part of content.parts) {\n messages.push({\n role: 'tool',\n tool_call_id: part.functionResponse.id || `call_0_${Date.now()}`, // Use stored ID\n name: part.functionResponse.name,\n content: JSON.stringify(part.functionResponse.response)\n });\n }\n } else {\n messages.push({ role: content.role, content: content.parts[0].text });\n }\n }\n\n const body = {\n model: model || 'gpt-4o',\n messages: messages,\n temperature: config.temperature,\n top_p: config.topP,\n };\n\n if (config.schema) {\n // OpenAI Structured Outputs (response_format)\n // Note: This requires a specific JSON schema format\n body.response_format = {\n type: \"json_schema\",\n json_schema: {\n name: \"response\",\n schema: this.convertToOpenAISchema(config.schema),\n strict: true\n }\n };\n }\n\n if (tools && tools.length > 0) {\n body.tools = tools.map(t => ({\n type: 'function',\n function: this.convertToOpenAIFunctionDeclaration(t)\n }));\n }\n\n const headers = {\n 'Content-Type': 'application/json',\n };\n if (this.options.apiKey) {\n headers['Authorization'] = `Bearer ${this.options.apiKey}`;\n }\n\n const res = await fetch(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: config.signal\n });\n\n if (!res.ok) {\n const errText = await res.text();\n throw new Error(`OpenAI/Compatible API Error (${res.status}): ${errText}`);\n }\n\n const data = await res.json();\n const choice = data.choices[0];\n const message = choice.message;\n\n let functionCalls = undefined;\n if (message.tool_calls) {\n functionCalls = message.tool_calls.map(tc => ({\n name: tc.function.name,\n args: JSON.parse(tc.function.arguments),\n id: tc.id\n }));\n }\n\n return {\n text: message.content,\n functionCalls,\n parts: message.tool_calls ? [\n { text: message.content || \"\" },\n ...message.tool_calls.map(tc => ({\n functionCall: {\n name: tc.function.name,\n args: JSON.parse(tc.function.arguments),\n id: tc.id\n }\n }))\n ] : [{ text: message.content || \"\" }],\n usage: data.usage\n };\n }\n\n convertToOpenAISchema(typeNode) {\n if (!typeNode) return { type: 'string' };\n // OpenAI Schema is standard JSON Schema\n if (typeof typeNode === 'string') {\n switch (typeNode) {\n case 'Int': return { type: 'integer' };\n case 'Float': return { type: 'number' };\n case 'Bool': return { type: 'boolean' };\n case 'String': return { type: 'string' };\n }\n const resolved = this.globalTypes.get(typeNode);\n if (resolved) return this.convertToOpenAISchema(resolved);\n return { type: 'string' };\n }\n \n if (typeNode.type === 'ArrayType') {\n return {\n type: 'array',\n items: this.convertToOpenAISchema(typeNode.elementType),\n };\n }\n \n if (typeNode.type === 'ObjectType') {\n const properties = {};\n const required = [];\n for (const [key, val] of Object.entries(typeNode.fields)) {\n properties[key] = this.convertToOpenAISchema(val);\n required.push(key);\n }\n return {\n type: 'object',\n properties,\n required,\n additionalProperties: false // OpenAI Strict Mode often requires this\n };\n }\n\n if (typeNode.type === 'TypeReference') {\n const resolved = this.globalTypes.get(typeNode.name);\n if (resolved) return this.convertToOpenAISchema(resolved);\n return { type: 'string' };\n }\n \n return { type: 'string' };\n }\n\n convertToOpenAIFunctionDeclaration(funcNode) {\n const parameters = {\n type: 'object',\n properties: {},\n required: [],\n additionalProperties: false\n };\n\n for (const param of funcNode.params) {\n parameters.properties[param.name] = this.convertToOpenAISchema(param.typeAnnotation);\n parameters.required.push(param.name);\n }\n\n return {\n name: funcNode.name,\n description: `Function ${funcNode.name}`,\n parameters,\n strict: true\n };\n }\n\n convertToGeminiFunctionDeclaration(funcNode) {\n const parameters = {\n type: 'OBJECT',\n properties: {},\n required: []\n };\n\n for (const param of funcNode.params) {\n parameters.properties[param.name] = this.convertToGeminiSchema(param.typeAnnotation);\n parameters.required.push(param.name);\n }\n\n return {\n name: funcNode.name,\n description: `Function ${funcNode.name}`, // Ideally we'd parse doc comments\n parameters\n };\n }\n\n\n\n convertToGeminiSchema(typeNode) {\n if (!typeNode) return { type: 'STRING' };\n if (typeof typeNode === 'string') {\n switch (typeNode) {\n case 'Int': return { type: 'INTEGER' };\n case 'Float': return { type: 'NUMBER' };\n case 'Bool': return { type: 'BOOLEAN' };\n case 'String': return { type: 'STRING' };\n }\n // Resolve string-based type references\n const resolved = this.globalTypes.get(typeNode);\n if (resolved) return this.convertToGeminiSchema(resolved);\n return { type: 'STRING' };\n }\n \n if (typeNode.type === 'ArrayType') {\n return {\n type: 'ARRAY',\n items: this.convertToGeminiSchema(typeNode.elementType),\n };\n }\n \n if (typeNode.type === 'ObjectType') {\n const properties = {};\n const required = [];\n for (const [key, val] of Object.entries(typeNode.fields)) {\n properties[key] = this.convertToGeminiSchema(val);\n required.push(key);\n }\n return {\n type: 'OBJECT',\n properties,\n required,\n };\n }\n \n if (typeNode.type === 'TypeReference') {\n const resolved = this.globalTypes.get(typeNode.name);\n if (resolved) {\n return this.convertToGeminiSchema(resolved);\n }\n return { type: 'STRING', description: `Type: ${typeNode.name}` };\n }\n \n return { type: 'STRING' };\n }\n}\n","\n/**\n * Helios Vector Memory Module\n * Implements a simple in-memory vector store for RAG.\n */\n\nexport class VectorMemory {\n constructor(evaluator) {\n this.evaluator = evaluator;\n this.store = []; // { id, text, embedding, metadata }\n }\n\n // Calculate cosine similarity between two vectors\n cosineSimilarity(vecA, vecB) {\n let dotProduct = 0;\n let magnitudeA = 0;\n let magnitudeB = 0;\n \n for (let i = 0; i < vecA.length; i++) {\n dotProduct += vecA[i] * vecB[i];\n magnitudeA += vecA[i] * vecA[i];\n magnitudeB += vecB[i] * vecB[i];\n }\n \n magnitudeA = Math.sqrt(magnitudeA);\n magnitudeB = Math.sqrt(magnitudeB);\n \n if (magnitudeA === 0 || magnitudeB === 0) return 0;\n return dotProduct / (magnitudeA * magnitudeB);\n }\n\n async getEmbedding(text) {\n // This depends on the AI provider. \n // For now, we'll assume the AI provider has an embed method or we use a generic one.\n // If the provider doesn't support embeddings, we might need a fallback or mock.\n \n const ai = this.evaluator.ai;\n if (ai && ai.embedContent) {\n return await ai.embedContent(text);\n }\n \n // Fallback/Mock for demo purposes if no real embedding is available\n // In a real app, this would call OpenAI/Gemini embedding API\n console.warn(\"[Memory] No embedding provider found. Using mock embedding.\");\n return this.mockEmbedding(text);\n }\n\n mockEmbedding(text) {\n // deterministic mock embedding based on char codes\n const vec = new Array(10).fill(0);\n for (let i = 0; i < text.length; i++) {\n vec[i % 10] += text.charCodeAt(i);\n }\n // normalize\n const mag = Math.sqrt(vec.reduce((sum, val) => sum + val * val, 0));\n return vec.map(v => v / mag);\n }\n\n async add(id, text, metadata = {}) {\n const embedding = await this.getEmbedding(text);\n // Remove existing if any\n this.store = this.store.filter(item => item.id !== id);\n this.store.push({ id, text, embedding, metadata, timestamp: Date.now() });\n return true;\n }\n\n async search(query, limit = 3) {\n const queryEmbedding = await this.getEmbedding(query);\n \n const results = this.store.map(item => ({\n ...item,\n score: this.cosineSimilarity(queryEmbedding, item.embedding)\n }));\n \n // Sort by score descending\n results.sort((a, b) => b.score - a.score);\n \n return results.slice(0, limit);\n }\n\n clear() {\n this.store = [];\n }\n \n dump() {\n return this.store;\n }\n \n load(data) {\n this.store = data;\n }\n}\n","/**\n * Helios Standard Library\n * Provides common tools for agents and scripts.\n */\n\nimport { HeliosRuntimeError } from './errors.js';\nimport { VectorMemory } from './memory.js';\n\nexport function registerStdLib(evaluator) {\n // Initialize Vector Memory\n // We attach it to the evaluator so it persists across runs if needed, \n // or re-initialize it if we want fresh memory per run.\n // For now, let's make it persistent per evaluator instance.\n if (!evaluator.memory) {\n evaluator.memory = new VectorMemory(evaluator);\n }\n\n // 0. Swarm Module (Agents)\n evaluator.modules.set('swarm', new (evaluator.globalEnv.constructor)());\n const swarm = evaluator.modules.get('swarm');\n \n // Natively track agents in the evaluator\n evaluator.agents = evaluator.agents || new Map();\n\n swarm.define('createAgent', async (args) => {\n const name = args[0];\n const prompt = args[1];\n evaluator.agents.set(name, { name, prompt, tools: [], model: null });\n return true;\n });\n\n swarm.define('setAgentModel', async (args) => {\n const name = args[0];\n const model = args[1];\n const agent = evaluator.agents.get(name);\n if (agent) agent.model = model;\n return true;\n });\n\n swarm.define('addTool', async (args) => {\n const name = args[0];\n const tool = args[1];\n const agent = evaluator.agents.get(name);\n if (agent && !agent.tools.includes(tool)) agent.tools.push(tool);\n return true;\n });\n\n swarm.define('delegate', async (args) => {\n const name = args[0];\n const task = args[1];\n const agent = evaluator.agents.get(name);\n \n // We will call the AI\n const promptText = agent ? `You are ${name}. ${agent.prompt}\\n\\nTask:\\n${task}` : `Task:\\n${task}`;\n const model = agent && agent.model ? agent.model : (evaluator.options.model || \"gemini-3-flash-preview\");\n \n // Convert agent tools into the format callAI expects\n const tools = agent ? agent.tools.map(t => evaluator.options.tools[t]).filter(Boolean) : [];\n \n const result = await evaluator.callAI(\n model,\n [{ role: 'user', parts: [{ text: promptText }] }],\n { tools }\n );\n \n evaluator.onPrint({ type: 'agent_delegate', from: 'Helios', to: name, task: task, result: result.text });\n return result.text;\n });\n\n // 1. Math Module (Enhanced)\n const math = evaluator.modules.get('math');\n math.define('sin', async (args) => Math.sin(args[0]));\n math.define('cos', async (args) => Math.cos(args[0]));\n math.define('tan', async (args) => Math.tan(args[0]));\n math.define('pow', async (args) => Math.pow(args[0], args[1]));\n math.define('sqrt', async (args) => Math.sqrt(args[0]));\n math.define('log', async (args) => Math.log(args[0]));\n math.define('exp', async (args) => Math.exp(args[0]));\n\n // 2. Date Module\n evaluator.modules.set('date', new (evaluator.globalEnv.constructor)());\n const date = evaluator.modules.get('date');\n \n date.define('now', async () => new Date().toISOString());\n \n date.define('format', async (args) => {\n const d = new Date(args[0]);\n const fmt = args[1] || 'iso';\n if (fmt === 'iso') return d.toISOString();\n if (fmt === 'local') return d.toLocaleString();\n if (fmt === 'date') return d.toLocaleDateString();\n if (fmt === 'time') return d.toLocaleTimeString();\n return d.toISOString();\n });\n\n date.define('diff', async (args) => {\n const d1 = new Date(args[0]);\n const d2 = new Date(args[1]);\n const unit = args[2] || 'ms';\n const diff = d1.getTime() - d2.getTime();\n if (unit === 'ms') return diff;\n if (unit === 's') return diff / 1000;\n if (unit === 'm') return diff / (1000 * 60);\n if (unit === 'h') return diff / (1000 * 60 * 60);\n if (unit === 'd') return diff / (1000 * 60 * 60 * 24);\n return diff;\n });\n\n date.define('add', async (args) => {\n const d = new Date(args[0]);\n const amount = args[1];\n const unit = args[2] || 'ms';\n if (unit === 'ms') d.setMilliseconds(d.getMilliseconds() + amount);\n if (unit === 's') d.setSeconds(d.getSeconds() + amount);\n if (unit === 'm') d.setMinutes(d.getMinutes() + amount);\n if (unit === 'h') d.setHours(d.getHours() + amount);\n if (unit === 'd') d.setDate(d.getDate() + amount);\n return d.toISOString();\n });\n\n // 3. File System Module (Enhanced & Browser-Safe)\n const fsMod = evaluator.modules.get('fs');\n \n // Virtual FS using localStorage\n const VFS_PREFIX = 'helios_vfs_';\n \n fsMod.define('list', async (args) => {\n const path = args[0] || '/';\n const files = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key.startsWith(VFS_PREFIX)) {\n const filePath = key.slice(VFS_PREFIX.length);\n if (filePath.startsWith(path === '/' ? '' : path)) {\n files.push(filePath);\n }\n }\n }\n return files;\n });\n\n fsMod.define('read', async (args) => {\n const path = args[0];\n const content = localStorage.getItem(VFS_PREFIX + path);\n if (content === null) throw new HeliosRuntimeError(`File not found: ${path}`);\n return content;\n });\n\n fsMod.define('write', async (args) => {\n const path = args[0];\n const content = String(args[1]);\n localStorage.setItem(VFS_PREFIX + path, content);\n return true;\n });\n\n fsMod.define('exists', async (args) => {\n return localStorage.getItem(VFS_PREFIX + args[0]) !== null;\n });\n\n fsMod.define('delete', async (args) => {\n localStorage.removeItem(VFS_PREFIX + args[0]);\n return true;\n });\n\n // 4. JSON Module (Enhanced)\n const json = evaluator.modules.get('json');\n json.define('parse', async (args) => JSON.parse(args[0]));\n json.define('stringify', async (args) => JSON.stringify(args[0], null, args[1] || 0));\n\n // 5. System Module\n evaluator.modules.set('sys', new (evaluator.globalEnv.constructor)());\n const sys = evaluator.modules.get('sys');\n \n sys.define('sleep', async (args) => {\n const ms = args[0] || 1000;\n return new Promise(resolve => setTimeout(resolve, ms));\n });\n\n sys.define('uuid', async () => {\n return crypto.randomUUID();\n });\n\n sys.define('env', async (args) => {\n const key = args[0];\n return process.env[key];\n });\n\n // 6. String Utils (as a module)\n evaluator.modules.set('str', new (evaluator.globalEnv.constructor)());\n const str = evaluator.modules.get('str');\n \n str.define('split', async (args) => args[0].split(args[1]));\n str.define('join', async (args) => args[0].join(args[1]));\n str.define('replace', async (args) => args[0].replace(args[1], args[2]));\n str.define('trim', async (args) => args[0].trim());\n str.define('includes', async (args) => args[0].includes(args[1]));\n str.define('lower', async (args) => args[0].toLowerCase());\n str.define('upper', async (args) => args[0].toUpperCase());\n\n // 7. List Module (extend existing)\n const list = evaluator.modules.get('list');\n\n list.define('push', async (args) => {\n const arr = args[0];\n const item = args[1];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('First argument to list.push must be a list');\n arr.push(item);\n return arr;\n });\n\n list.define('pop', async (args) => {\n const arr = args[0];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('Argument to list.pop must be a list');\n return arr.pop();\n });\n\n list.define('shift', async (args) => {\n const arr = args[0];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('Argument to list.shift must be a list');\n return arr.shift();\n });\n\n list.define('unshift', async (args) => {\n const arr = args[0];\n const item = args[1];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('First argument to list.unshift must be a list');\n arr.unshift(item);\n return arr;\n });\n\n list.define('slice', async (args) => {\n const arr = args[0];\n const start = args[1] || 0;\n const end = args[2];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('First argument to list.slice must be a list');\n return arr.slice(start, end);\n });\n\n list.define('splice', async (args) => {\n const arr = args[0];\n const start = args[1];\n const deleteCount = args[2] || 0;\n // args[3] and beyond are items to insert, but Helios args are passed as an array\n // We need to handle variadic arguments if possible, or just support one item for now\n // Since args is [arr, start, deleteCount, item1, item2...], we can slice args\n const items = args.slice(3);\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('First argument to list.splice must be a list');\n return arr.splice(start, deleteCount, ...items);\n });\n\n list.define('reverse', async (args) => {\n const arr = args[0];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('Argument to list.reverse must be a list');\n return [...arr].reverse(); // Return new array to avoid mutation confusion if unexpected\n });\n\n list.define('sort', async (args) => {\n const arr = args[0];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('Argument to list.sort must be a list');\n return [...arr].sort(); // Default string sort\n });\n\n list.define('contains', async (args) => {\n const arr = args[0];\n const item = args[1];\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('First argument to list.contains must be a list');\n return arr.includes(item);\n });\n \n list.define('join', async (args) => {\n const arr = args[0];\n const separator = args[1] || ',';\n if (!Array.isArray(arr)) throw new HeliosRuntimeError('First argument to list.join must be a list');\n return arr.join(separator);\n });\n\n list.define('range', async (args) => {\n const start = args[0];\n const end = args[1];\n const step = args[2] || 1;\n const result = [];\n for (let i = start; i < end; i += step) {\n result.push(i);\n }\n return result;\n });\n\n // 8. Object Module (extend existing)\n const obj = evaluator.modules.get('obj');\n\n obj.define('keys', async (args) => {\n const o = args[0];\n if (typeof o !== 'object' || o === null) throw new HeliosRuntimeError('Argument to obj.keys must be an object');\n return Object.keys(o);\n });\n\n obj.define('values', async (args) => {\n const o = args[0];\n if (typeof o !== 'object' || o === null) throw new HeliosRuntimeError('Argument to obj.values must be an object');\n return Object.values(o);\n });\n\n obj.define('entries', async (args) => {\n const o = args[0];\n if (typeof o !== 'object' || o === null) throw new HeliosRuntimeError('Argument to obj.entries must be an object');\n return Object.entries(o);\n });\n\n obj.define('has', async (args) => {\n const o = args[0];\n const key = args[1];\n if (typeof o !== 'object' || o === null) throw new HeliosRuntimeError('First argument to obj.has must be an object');\n return Object.prototype.hasOwnProperty.call(o, key);\n });\n\n obj.define('merge', async (args) => {\n const o1 = args[0];\n const o2 = args[1];\n if (typeof o1 !== 'object' || o1 === null) throw new HeliosRuntimeError('First argument to obj.merge must be an object');\n if (typeof o2 !== 'object' || o2 === null) throw new HeliosRuntimeError('Second argument to obj.merge must be an object');\n return { ...o1, ...o2 };\n });\n\n // 9. HTTP Module\n evaluator.modules.set('http', new (evaluator.globalEnv.constructor)());\n const http = evaluator.modules.get('http');\n\n http.define('get', async (args) => {\n const url = args[0];\n const headers = args[1] || {};\n const response = await fetch(url, {\n method: 'GET',\n headers: headers\n });\n \n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n return await response.json();\n }\n return await response.text();\n });\n\n http.define('post', async (args) => {\n const url = args[0];\n const body = args[1];\n const headers = args[2] || {};\n \n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...headers\n },\n body: typeof body === 'object' ? JSON.stringify(body) : body\n };\n\n const response = await fetch(url, options);\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n return await response.json();\n }\n return await response.text();\n });\n\n http.define('request', async (args) => {\n const options = args[0] || {};\n const url = options.url;\n if (!url) throw new HeliosRuntimeError('HTTP request requires a URL');\n\n const fetchOptions = {\n method: options.method || 'GET',\n headers: options.headers || {},\n body: options.body ? (typeof options.body === 'object' ? JSON.stringify(options.body) : options.body) : undefined\n };\n\n const response = await fetch(url, fetchOptions);\n const contentType = response.headers.get('content-type');\n \n const result = {\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n ok: response.ok\n };\n\n if (contentType && contentType.includes('application/json')) {\n result.data = await response.json();\n } else {\n result.data = await response.text();\n }\n\n return result;\n });\n\n // 10. UI Module (extend existing)\n const ui = evaluator.modules.get('ui');\n\n ui.define('button', async (args) => {\n const label = args[0];\n const value = args[1] || label;\n evaluator.onPrint({ type: 'ui_button', label, value });\n // Pause execution until clicked\n const result = await evaluator.onInputRequest(label, { type: 'ui_button', value });\n return result;\n });\n\n ui.define('input', async (args) => {\n const label = args[0];\n const placeholder = args[1] || \"\";\n // This is a blocking call that waits for user input via the UI\n // We reuse the existing onInputRequest mechanism but with a UI hint\n const result = await evaluator.onInputRequest(label, { type: 'ui_input', placeholder });\n return result;\n });\n\n ui.define('card', async (args) => {\n const title = args[0];\n const content = args[1];\n evaluator.onPrint({ type: 'ui_card', title, content });\n return true;\n });\n \n ui.define('image', async (args) => {\n const src = args[0];\n const alt = args[1] || \"Image\";\n evaluator.onPrint({ type: 'ui_image', src, alt });\n return true;\n });\n\n ui.define('chart', async (args) => {\n const type = args[0]; // 'bar', 'line', 'pie'\n const data = args[1];\n const config = args[2] || {}; // { x: 'key', y: 'key', title: 'Title' }\n \n if (!Array.isArray(data)) throw new HeliosRuntimeError('Second argument to ui.chart must be a list of objects');\n \n evaluator.onPrint({ \n type: 'ui_chart', \n chartType: type, \n data, \n config \n });\n return true;\n });\n\n ui.define('table', async (args) => {\n const data = args[0];\n const columns = args[1] || [];\n \n if (!Array.isArray(data)) throw new HeliosRuntimeError('First argument to ui.table must be a list of objects');\n \n evaluator.onPrint({ \n type: 'ui_table', \n data, \n columns \n });\n return true;\n });\n\n ui.define('progress', async (args) => {\n const value = args[0];\n const max = args[1] || 100;\n const label = args[2] || \"\";\n \n evaluator.onPrint({ \n type: 'ui_progress', \n value, \n max,\n label\n });\n return true;\n });\n\n // 11. Memory Module (extend existing)\n const memory = evaluator.modules.get('memory');\n\n memory.define('store', async (args) => {\n const id = args[0];\n const text = args[1];\n const metadata = args[2] || {};\n await evaluator.memory.add(id, text, metadata);\n return true;\n });\n\n memory.define('search', async (args) => {\n const query = args[0];\n const limit = args[1] || 3;\n return await evaluator.memory.search(query, limit);\n });\n\n memory.define('clear', async () => {\n evaluator.memory.clear();\n return true;\n });\n\n // 12. Text Module (extend existing)\n const text = evaluator.modules.get('text');\n\n text.define('chunk', async (args) => {\n const content = args[0];\n const size = args[1] || 1000;\n const overlap = args[2] || 0;\n \n if (typeof content !== 'string') throw new HeliosRuntimeError('First argument to text.chunk must be a string');\n \n const chunks = [];\n let i = 0;\n while (i < content.length) {\n chunks.push(content.slice(i, i + size));\n i += size - overlap;\n }\n return chunks;\n });\n\n text.define('tokenize', async (args) => {\n const content = args[0];\n if (typeof content !== 'string') return [];\n return content.split(/\\s+/).filter(t => t.length > 0);\n });\n\n text.define('lines', async (args) => {\n const content = args[0];\n if (typeof content !== 'string') return [];\n return content.split(/\\r?\\n/);\n });\n\n // 13. Web Module (extend existing)\n const web = evaluator.modules.get('web');\n\n web.define('scrape', async (args) => {\n const url = args[0];\n try {\n // Note: This is limited by CORS in the browser.\n // In a real agent runtime, this would go through a proxy.\n const response = await fetch(url);\n const html = await response.text();\n const doc = new DOMParser().parseFromString(html, 'text/html');\n \n // Remove scripts and styles\n const scripts = doc.querySelectorAll('script, style');\n scripts.forEach(s => s.remove());\n \n return doc.body.textContent || \"\";\n } catch (e) {\n throw new HeliosRuntimeError(`Failed to scrape ${url}: ${e.message}`);\n }\n });\n\n // 14. Agent Module (extend existing)\n const agent = evaluator.modules.get('agent');\n\n agent.define('think', async (args) => {\n const thought = args[0];\n evaluator.onPrint({ type: 'ui_card', title: 'Thinking', content: thought });\n return true;\n });\n \n agent.define('plan', async (args) => {\n const steps = args[0];\n if (!Array.isArray(steps)) throw new HeliosRuntimeError('agent.plan expects a list of steps');\n \n evaluator.onPrint({ \n type: 'ui_progress', \n value: 0, \n max: steps.length, \n label: 'Executing Plan' \n });\n \n return true;\n });\n\n // 15. CSV Module\n const csv = evaluator.modules.get('csv');\n \n csv.define('parse', async (args) => {\n const text = args[0];\n if (typeof text !== 'string') return [];\n \n const lines = text.trim().split(/\\r?\\n/);\n if (lines.length === 0) return [];\n \n const headers = lines[0].split(',').map(h => h.trim());\n const result = [];\n \n for (let i = 1; i < lines.length; i++) {\n // Basic CSV parsing (doesn't handle quotes/commas inside values perfectly)\n const values = lines[i].split(',').map(v => v.trim());\n const obj = {};\n headers.forEach((h, idx) => {\n obj[h] = values[idx] || null;\n });\n result.push(obj);\n }\n return result;\n });\n\n csv.define('stringify', async (args) => {\n const data = args[0];\n if (!Array.isArray(data) || data.length === 0) return \"\";\n \n const headers = Object.keys(data[0]);\n const lines = [headers.join(',')];\n \n for (const row of data) {\n const values = headers.map(h => {\n const val = row[h];\n return val === null || val === undefined ? '' : String(val);\n });\n lines.push(values.join(','));\n }\n return lines.join('\\n');\n });\n\n // 16. XML Module\n const xml = evaluator.modules.get('xml');\n\n xml.define('parse', async (args) => {\n const text = args[0];\n if (typeof text !== 'string') return {};\n \n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(text, \"text/xml\");\n \n // Recursive XML to JSON converter\n function xmlToJson(node) {\n // Text node\n if (node.nodeType === 3) { \n return node.nodeValue.trim();\n }\n \n const obj = {};\n \n // Attributes\n if (node.attributes && node.attributes.length > 0) {\n obj[\"@attributes\"] = {};\n for (let j = 0; j < node.attributes.length; j++) {\n const attribute = node.attributes.item(j);\n obj[\"@attributes\"][attribute.nodeName] = attribute.nodeValue;\n }\n }\n \n // Children\n if (node.hasChildNodes()) {\n let hasOnlyText = true;\n for(let i = 0; i < node.childNodes.length; i++) {\n const item = node.childNodes.item(i);\n if (item.nodeName !== \"#text\") {\n hasOnlyText = false;\n break;\n }\n }\n\n if (hasOnlyText && node.childNodes.length === 1) {\n return node.textContent.trim();\n }\n\n for(let i = 0; i < node.childNodes.length; i++) {\n const item = node.childNodes.item(i);\n const nodeName = item.nodeName;\n \n if (nodeName === \"#text\") {\n continue;\n }\n\n const json = xmlToJson(item);\n \n if (typeof(obj[nodeName]) === \"undefined\") {\n obj[nodeName] = json;\n } else {\n if (!Array.isArray(obj[nodeName])) {\n obj[nodeName] = [obj[nodeName]];\n }\n obj[nodeName].push(json);\n }\n }\n }\n return obj;\n }\n \n return xmlToJson(doc.documentElement);\n } catch (e) {\n throw new HeliosRuntimeError(`Failed to parse XML: ${e.message}`);\n }\n });\n\n // 17. Crypto Module\n const cryptoMod = evaluator.modules.get('crypto');\n \n cryptoMod.define('hash', async (args) => {\n const text = args[0];\n const algo = args[1] || 'SHA-256'; // 'SHA-1', 'SHA-256', 'SHA-384', 'SHA-512'\n if (typeof text !== 'string') throw new HeliosRuntimeError('First argument to crypto.hash must be a string');\n \n const msgUint8 = new TextEncoder().encode(text);\n const hashBuffer = await crypto.subtle.digest(algo, msgUint8);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n });\n\n cryptoMod.define('uuid', async () => {\n return crypto.randomUUID();\n });\n\n // 18. Base64 Module\n const base64 = evaluator.modules.get('base64');\n \n base64.define('encode', async (args) => {\n const text = args[0];\n if (typeof text !== 'string') throw new HeliosRuntimeError('Argument to base64.encode must be a string');\n return btoa(unescape(encodeURIComponent(text)));\n });\n\n base64.define('decode', async (args) => {\n const encoded = args[0];\n if (typeof encoded !== 'string') throw new HeliosRuntimeError('Argument to base64.decode must be a string');\n try {\n return decodeURIComponent(escape(atob(encoded)));\n } catch (e) {\n throw new HeliosRuntimeError(`Failed to decode base64: ${e.message}`);\n }\n });\n\n // 19. Regex Module\n const regex = evaluator.modules.get('regex');\n \n regex.define('test', async (args) => {\n const pattern = args[0];\n const text = args[1];\n const flags = args[2] || '';\n if (typeof pattern !== 'string' || typeof text !== 'string') {\n throw new HeliosRuntimeError('regex.test requires pattern and text as strings');\n }\n const re = new RegExp(pattern, flags);\n return re.test(text);\n });\n\n regex.define('match', async (args) => {\n const pattern = args[0];\n const text = args[1];\n const flags = args[2] || '';\n if (typeof pattern !== 'string' || typeof text !== 'string') {\n throw new HeliosRuntimeError('regex.match requires pattern and text as strings');\n }\n const re = new RegExp(pattern, flags);\n const matches = text.match(re);\n return matches ? Array.from(matches) : [];\n });\n\n regex.define('replace', async (args) => {\n const pattern = args[0];\n const text = args[1];\n const replacement = args[2];\n const flags = args[3] || 'g';\n if (typeof pattern !== 'string' || typeof text !== 'string' || typeof replacement !== 'string') {\n throw new HeliosRuntimeError('regex.replace requires pattern, text, and replacement as strings');\n }\n const re = new RegExp(pattern, flags);\n return text.replace(re, replacement);\n });\n\n // 20. URL Module\n const urlMod = evaluator.modules.get('url');\n \n urlMod.define('parse', async (args) => {\n const urlString = args[0];\n if (typeof urlString !== 'string') throw new HeliosRuntimeError('Argument to url.parse must be a string');\n try {\n const u = new URL(urlString);\n const params = {};\n for (const [key, value] of u.searchParams.entries()) {\n params[key] = value;\n }\n return {\n href: u.href,\n origin: u.origin,\n protocol: u.protocol,\n host: u.host,\n hostname: u.hostname,\n port: u.port,\n pathname: u.pathname,\n search: u.search,\n hash: u.hash,\n params: params\n };\n } catch (e) {\n throw new HeliosRuntimeError(`Invalid URL: ${urlString}`);\n }\n });\n\n urlMod.define('build', async (args) => {\n const base = args[0];\n const params = args[1] || {};\n if (typeof base !== 'string') throw new HeliosRuntimeError('First argument to url.build must be a string');\n if (typeof params !== 'object') throw new HeliosRuntimeError('Second argument to url.build must be an object');\n \n try {\n const u = new URL(base);\n for (const [key, value] of Object.entries(params)) {\n u.searchParams.append(key, String(value));\n }\n return u.toString();\n } catch (e) {\n throw new HeliosRuntimeError(`Invalid base URL: ${base}`);\n }\n });\n\n // 21. Workflow Module\n const workflow = evaluator.modules.get('workflow');\n\n workflow.define('pipeline', async (args) => {\n const agents = args[0]; // List of agent names\n const initialInput = args[1];\n \n if (!Array.isArray(agents)) throw new HeliosRuntimeError('workflow.pipeline expects a list of agent names');\n \n let currentInput = initialInput;\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Pipeline', content: `Starting pipeline with ${agents.length} agents.` });\n\n for (let i = 0; i < agents.length; i++) {\n const agentName = agents[i];\n evaluator.onPrint({ type: 'ui_progress', value: i, max: agents.length, label: `Agent ${i+1}/${agents.length}: ${agentName}` });\n \n // We simulate delegation by calling the evaluator's AI integration directly\n // In a real implementation, this would look up the agent's system prompt from the swarm registry\n const prompt = `You are ${agentName}. Process the following input and provide the output for the next stage.\\n\\nInput:\\n${currentInput}`;\n \n const defaultModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const result = await evaluator.callAI(\n defaultModel,\n [{ role: 'user', parts: [{ text: prompt }] }],\n {}\n );\n \n currentInput = result.text;\n }\n \n evaluator.onPrint({ type: 'ui_progress', value: agents.length, max: agents.length, label: `Pipeline Complete` });\n return currentInput;\n });\n\n workflow.define('optimize', async (args) => {\n const config = args[0];\n if (typeof config !== 'object') throw new HeliosRuntimeError('workflow.optimize expects a configuration object');\n \n const actor = config.actor || 'Programmer';\n const critic = config.critic || 'Reviewer';\n const task = config.task;\n const criteria = config.criteria || 'Ensure high quality.';\n const maxIterations = config.max_iterations || 3;\n \n if (!task) throw new HeliosRuntimeError('workflow.optimize requires a task');\n\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Actor-Critic', content: `Task: ${task}\\nMax Iterations: ${maxIterations}` });\n\n let currentDraft = \"\";\n let feedback = \"\";\n let iteration = 0;\n let approved = false;\n\n while (iteration < maxIterations && !approved) {\n iteration++;\n evaluator.onPrint({ type: 'ui_progress', value: iteration - 1, max: maxIterations, label: `Iteration ${iteration}: ${actor} drafting...` });\n \n // 1. Actor generates draft\n const actorPrompt = `You are ${actor}. Your task is: ${task}.\\n\\nCriteria: ${criteria}\\n\\n${feedback ? `Previous Feedback to address:\\n${feedback}\\n\\nPrevious Draft:\\n${currentDraft}\\n\\nProvide an updated draft.` : 'Provide your initial draft.'}`;\n const defaultModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const actorResult = await evaluator.callAI(\n defaultModel,\n [{ role: 'user', parts: [{ text: actorPrompt }] }],\n {}\n );\n currentDraft = actorResult.text;\n\n evaluator.onPrint({ type: 'ui_progress', value: iteration - 0.5, max: maxIterations, label: `Iteration ${iteration}: ${critic} reviewing...` });\n\n // 2. Critic reviews draft\n const criticPrompt = `You are ${critic}. Review the following draft against these criteria: ${criteria}.\\n\\nDraft:\\n${currentDraft}\\n\\nIf it meets all criteria perfectly, reply with exactly \"APPROVED\". Otherwise, provide specific feedback on what needs to be fixed.`;\n const criticResult = await evaluator.callAI(\n defaultModel,\n [{ role: 'user', parts: [{ text: criticPrompt }] }],\n {}\n );\n feedback = criticResult.text;\n\n if (feedback.trim().toUpperCase() === \"APPROVED\") {\n approved = true;\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Actor-Critic', content: `Approved after ${iteration} iterations!` });\n }\n }\n\n if (!approved) {\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Actor-Critic', content: `Max iterations reached. Returning best effort.` });\n }\n\n return currentDraft;\n });\n\n workflow.define('map_reduce', async (args) => {\n const config = args[0];\n if (typeof config !== 'object') throw new HeliosRuntimeError('workflow.map_reduce expects a configuration object');\n \n const worker = config.worker || 'Worker';\n const synthesizer = config.synthesizer || 'Synthesizer';\n const data = config.data;\n const task = config.task || 'Process this data';\n \n if (!Array.isArray(data)) throw new HeliosRuntimeError('workflow.map_reduce requires a data array');\n\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Map-Reduce', content: `Processing ${data.length} items in parallel.` });\n\n // Map Phase (Parallel)\n const mapPromises = data.map(async (item, index) => {\n const prompt = `You are ${worker}. ${task}\\n\\nData item:\\n${typeof item === 'object' ? JSON.stringify(item) : item}`;\n const defaultModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const result = await evaluator.callAI(\n defaultModel,\n [{ role: 'user', parts: [{ text: prompt }] }],\n {}\n );\n return `Result ${index + 1}:\\n${result.text}`;\n });\n\n const mappedResults = await Promise.all(mapPromises);\n \n evaluator.onPrint({ type: 'ui_progress', value: 50, max: 100, label: `Map phase complete. Synthesizing...` });\n\n // Reduce Phase\n const reducePrompt = `You are ${synthesizer}. Synthesize the following processed results into a final cohesive summary or conclusion.\\n\\nResults:\\n${mappedResults.join('\\n\\n---\\n\\n')}`;\n const reduceModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const finalResult = await evaluator.callAI(\n reduceModel,\n [{ role: 'user', parts: [{ text: reducePrompt }] }],\n {}\n );\n\n evaluator.onPrint({ type: 'ui_progress', value: 100, max: 100, label: `Map-Reduce Complete` });\n return finalResult.text;\n });\n\n workflow.define('route', async (args) => {\n const input = args[0];\n const routes = args[1]; // Object mapping intent to agent name\n \n if (typeof input !== 'string') throw new HeliosRuntimeError('workflow.route requires a string input');\n if (typeof routes !== 'object') throw new HeliosRuntimeError('workflow.route requires a routes object');\n\n const routeKeys = Object.keys(routes);\n const routeDescriptions = routeKeys.map(k => `- ${k}`).join('\\n');\n\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Router', content: `Routing input to one of: ${routeKeys.join(', ')}` });\n\n // 1. Router decides\n const routerPrompt = `You are a Router agent. Analyze the following input and determine which of the available routes is the best fit. Reply with ONLY the exact name of the route, nothing else.\\n\\nAvailable Routes:\\n${routeDescriptions}\\n\\nInput:\\n${input}`;\n \n const routerModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const routerResult = await evaluator.callAI(\n routerModel,\n [{ role: 'user', parts: [{ text: routerPrompt }] }],\n {}\n );\n \n let selectedRoute = routerResult.text.trim();\n \n // Fallback if the AI hallucinates a route\n if (!routes[selectedRoute]) {\n selectedRoute = routeKeys[0]; \n }\n\n const targetAgent = routes[selectedRoute];\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Router', content: `Routed to: ${selectedRoute} (${targetAgent})` });\n\n // 2. Target Agent processes\n const agentPrompt = `You are ${targetAgent}. Process the following input:\\n\\n${input}`;\n const finalResult = await evaluator.callAI(\n routerModel,\n [{ role: 'user', parts: [{ text: agentPrompt }] }],\n {}\n );\n\n return {\n route: selectedRoute,\n agent: targetAgent,\n response: finalResult.text\n };\n });\n\n workflow.define('debate', async (args) => {\n const config = args[0];\n if (typeof config !== 'object') throw new HeliosRuntimeError('workflow.debate expects a configuration object');\n \n const topic = config.topic;\n const participants = config.participants || ['Proponent', 'Opponent'];\n const judge = config.judge || 'Judge';\n const rounds = config.rounds || 2;\n \n if (!topic) throw new HeliosRuntimeError('workflow.debate requires a topic');\n if (!Array.isArray(participants) || participants.length < 2) {\n throw new HeliosRuntimeError('workflow.debate requires at least 2 participants');\n }\n\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Debate', content: `Topic: ${topic}\\nParticipants: ${participants.join(', ')}\\nRounds: ${rounds}` });\n\n let debateHistory = `Topic: ${topic}\\n\\n`;\n\n for (let r = 1; r <= rounds; r++) {\n evaluator.onPrint({ type: 'ui_progress', value: r - 1, max: rounds, label: `Round ${r}/${rounds}` });\n \n for (const participant of participants) {\n const prompt = `You are ${participant} in a debate. The topic is: ${topic}.\\n\\nHere is the debate so far:\\n${debateHistory}\\n\\nProvide your next argument or rebuttal. Keep it concise and focused.`;\n \n const debateModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const result = await evaluator.callAI(\n debateModel,\n [{ role: 'user', parts: [{ text: prompt }] }],\n {}\n );\n \n const argument = result.text;\n debateHistory += `**${participant}**: ${argument}\\n\\n`;\n \n // Optional: Print each argument as it happens\n // evaluator.onPrint({ type: 'ui_card', title: `${participant} (Round ${r})`, content: argument });\n }\n }\n\n evaluator.onPrint({ type: 'ui_progress', value: rounds, max: rounds, label: `Debate complete. ${judge} is synthesizing...` });\n\n // Judge Synthesis\n const judgePrompt = `You are ${judge}. Review the following debate on the topic: \"${topic}\".\\n\\nDebate Transcript:\\n${debateHistory}\\n\\nSynthesize the arguments and provide a final, objective conclusion or recommendation based on the points raised.`;\n \n const judgeModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const judgeResult = await evaluator.callAI(\n judgeModel,\n [{ role: 'user', parts: [{ text: judgePrompt }] }],\n {}\n );\n\n return {\n transcript: debateHistory,\n conclusion: judgeResult.text\n };\n });\n\n workflow.define('execute_tree', async (args) => {\n const manager = args[0] || 'Manager';\n const goal = args[1];\n \n if (typeof goal !== 'string') throw new HeliosRuntimeError('workflow.execute_tree requires a string goal');\n\n evaluator.onPrint({ type: 'ui_card', title: 'Workflow: Hierarchical Tree', content: `Manager: ${manager}\\nGoal: ${goal}` });\n\n // 1. Manager breaks down the goal\n const breakdownPrompt = `You are ${manager}. Your overall goal is: \"${goal}\".\\n\\nBreak this goal down into 3-5 distinct, actionable sub-tasks. Return ONLY a JSON array of strings, where each string is a sub-task. Do not include markdown formatting or any other text.`;\n \n const treeModel = evaluator.options.model || \"gemini-3-flash-preview\";\n const breakdownResult = await evaluator.callAI(\n treeModel,\n [{ role: 'user', parts: [{ text: breakdownPrompt }] }],\n {}\n );\n\n let subTasks = [];\n try {\n // Clean up potential markdown from the model\n let jsonStr = breakdownResult.text.replace(/```json/g, '').replace(/```/g, '').trim();\n subTasks = JSON.parse(jsonStr);\n if (!Array.isArray(subTasks)) throw new Error(\"Not an array\");\n } catch (e) {\n evaluator.onPrint({ type: 'ui_card', title: 'Error', content: `Failed to parse sub-tasks. Falling back to simple split.\\n\\nRaw output: ${breakdownResult.text}` });\n // Fallback: just split by newlines if JSON parsing fails\n subTasks = breakdownResult.text.split('\\n').filter(line => line.trim().length > 0);\n }\n\n evaluator.onPrint({ type: 'ui_card', title: 'Sub-tasks Identified', content: subTasks.map((t, i) => `${i+1}. ${t}`).join('\\n') });\n\n // 2. Execute sub-tasks (simulating worker agents)\n const results = [];\n for (let i = 0; i < subTasks.length; i++) {\n const task = subTasks[i];\n evaluator.onPrint({ type: 'ui_progress', value: i, max: subTasks.length, label: `Executing Task ${i+1}/${subTasks.length}` });\n \n const workerPrompt = `You are a Worker agent. Your task is: \"${task}\".\\n\\nThis is part of the overall goal: \"${goal}\".\\n\\nProvide the result of your work.`;\n const workerResult = await evaluator.callAI(\n treeModel,\n [{ role: 'user', parts: [{ text: workerPrompt }] }],\n {}\n );\n \n results.push(`Task: ${task}\\nResult:\\n${workerResult.text}`);\n }\n\n evaluator.onPrint({ type: 'ui_progress', value: subTasks.length, max: subTasks.length, label: `All tasks complete. Compiling final report...` });\n\n // 3. Manager compiles final report\n const compilePrompt = `You are ${manager}. Your overall goal was: \"${goal}\".\\n\\nYour workers have completed their sub-tasks. Here are their results:\\n\\n${results.join('\\n\\n---\\n\\n')}\\n\\nCompile these results into a final, comprehensive report that achieves the original goal.`;\n \n const finalResult = await evaluator.callAI(\n treeModel,\n [{ role: 'user', parts: [{ text: compilePrompt }] }],\n {}\n );\n\n return finalResult.text;\n });\n}\n","/**\n * Helios JS Bridge\n * Facilitates interoperability between Helios and JavaScript/npm packages.\n */\n\nimport { HeliosRuntimeError } from './errors.js';\n\nexport class JSBridge {\n /**\n * Wraps a JavaScript function into a Helios-compatible callable.\n * @param {Function} jsFunc The JavaScript function to wrap.\n * @param {Object} metadata Optional metadata for the function.\n * @returns {Function} A Helios-compatible async function.\n */\n static wrap(jsFunc, metadata = {}) {\n if (typeof jsFunc !== 'function') {\n throw new HeliosRuntimeError('JSBridge.wrap expects a function.');\n }\n\n // We use a regular function (not arrow) to support 'new' and 'this'\n const wrapped = function(args) {\n try {\n if (new.target) {\n // Constructor call: arguments are passed separately via 'new callee(...args)'\n return new jsFunc(...arguments);\n }\n // Helios function call: arguments are passed as a single array [arg1, arg2, ...]\n // We spread them to match standard JS function signature\n return jsFunc(...(args || []));\n } catch (e) {\n throw new HeliosRuntimeError(`Error in JS function '${metadata.name || 'anonymous'}': ${e.message}`);\n }\n };\n\n // Attach metadata for the AI to understand the tool\n wrapped.__helios_tool = {\n name: metadata.name || jsFunc.name || 'js_tool',\n description: metadata.description || `JavaScript tool: ${metadata.name || jsFunc.name}`,\n params: metadata.params || JSBridge.inferParams(jsFunc),\n returnType: metadata.returnType || 'Unknown'\n };\n\n return wrapped;\n }\n\n /**\n * Infers parameter names from a JS function.\n * @param {Function} func \n * @returns {Array}\n */\n static inferParams(func) {\n const fnStr = func.toString().replace(/((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg, '');\n const result = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(/([^\\s,]+)/g);\n if (result === null) return [];\n return result.map(p => ({ name: p, type: 'Unknown' }));\n }\n\n /**\n * Dynamically imports a module from a URL (e.g., esm.sh).\n * @param {string} url \n * @returns {Promise<Object>}\n */\n static async loadModule(url) {\n try {\n // In the browser, we can use native dynamic import\n return await import(url);\n } catch (e) {\n throw new HeliosRuntimeError(`Failed to load JS module from ${url}: ${e.message}`);\n }\n }\n}\n","export const PROVIDERS = {\n GEMINI: 'gemini',\n ANTHROPIC: 'anthropic',\n OPENAI: 'openai',\n WEBLLM: 'webllm',\n CUSTOM: 'custom'\n};\n\nexport const CAPABILITIES = {\n FUNCTION_CALLING: 'function_calling',\n VISION: 'vision',\n JSON_MODE: 'json_mode',\n SYSTEM_INSTRUCTIONS: 'system_instructions',\n STREAMING: 'streaming'\n};\n\nexport const MODELS = [\n // Gemini Models\n {\n id: 'gemini-3-flash-preview',\n provider: PROVIDERS.GEMINI,\n name: 'Gemini 3 Flash Preview',\n version: '3.0',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.VISION, CAPABILITIES.JSON_MODE, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.STREAMING],\n contextWindow: 1048576,\n recommended: true\n },\n {\n id: 'gemini-3.1-pro-preview',\n provider: PROVIDERS.GEMINI,\n name: 'Gemini 3.1 Pro Preview',\n version: '3.1',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.VISION, CAPABILITIES.JSON_MODE, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.STREAMING],\n contextWindow: 2097152,\n recommended: false\n },\n // Anthropic Models\n {\n id: 'claude-3-5-sonnet-20240620',\n provider: PROVIDERS.ANTHROPIC,\n name: 'Claude 3.5 Sonnet',\n version: '3.5',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.VISION, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.STREAMING],\n contextWindow: 200000,\n recommended: true\n },\n {\n id: 'claude-3-opus-20240229',\n provider: PROVIDERS.ANTHROPIC,\n name: 'Claude 3 Opus',\n version: '3.0',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.VISION, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.STREAMING],\n contextWindow: 200000,\n recommended: false\n },\n // OpenAI Models\n {\n id: 'gpt-4o',\n provider: PROVIDERS.OPENAI,\n name: 'GPT-4o',\n version: '4.0',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.VISION, CAPABILITIES.JSON_MODE, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.STREAMING],\n contextWindow: 128000,\n recommended: true\n },\n {\n id: 'gpt-4o-mini',\n provider: PROVIDERS.OPENAI,\n name: 'GPT-4o Mini',\n version: '4.0',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.VISION, CAPABILITIES.JSON_MODE, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.STREAMING],\n contextWindow: 128000,\n recommended: false\n },\n // WebLLM Models\n {\n id: 'Hermes-3-Llama-3.1-8B-q4f32_1-MLC',\n provider: PROVIDERS.WEBLLM,\n name: 'Hermes 3 Llama 3.1 8B',\n version: '3.1',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.JSON_MODE],\n contextWindow: 8192,\n recommended: true\n },\n {\n id: 'Hermes-3-Llama-3.1-8B-q4f16_1-MLC',\n provider: PROVIDERS.WEBLLM,\n name: 'Hermes 3 Llama 3.1 8B (Fast)',\n version: '3.1',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.JSON_MODE],\n contextWindow: 8192,\n recommended: false\n },\n {\n id: 'Hermes-2-Pro-Llama-3-8B-q4f32_1-MLC',\n provider: PROVIDERS.WEBLLM,\n name: 'Hermes 2 Pro Llama 3 8B',\n version: '2.0',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.JSON_MODE],\n contextWindow: 8192,\n recommended: false\n },\n {\n id: 'Hermes-2-Pro-Llama-3-8B-q4f16_1-MLC',\n provider: PROVIDERS.WEBLLM,\n name: 'Hermes 2 Pro Llama 3 8B (Fast)',\n version: '2.0',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.JSON_MODE],\n contextWindow: 8192,\n recommended: false\n },\n {\n id: 'Hermes-2-Pro-Mistral-7B-q4f16_1-MLC',\n provider: PROVIDERS.WEBLLM,\n name: 'Hermes 2 Pro Mistral 7B',\n version: '2.0',\n capabilities: [CAPABILITIES.FUNCTION_CALLING, CAPABILITIES.SYSTEM_INSTRUCTIONS, CAPABILITIES.JSON_MODE],\n contextWindow: 8192,\n recommended: false\n }\n];\n\nexport class ModelManager {\n static getModelsByProvider(provider) {\n return MODELS.filter(m => m.provider === provider);\n }\n\n static getModelById(id) {\n return MODELS.find(m => m.id === id);\n }\n\n static getDefaultModelForProvider(provider) {\n const models = this.getModelsByProvider(provider);\n return models.find(m => m.recommended) || models[0];\n }\n\n static supportsCapability(modelId, capability) {\n const model = this.getModelById(modelId);\n return model ? model.capabilities.includes(capability) : false;\n }\n}\n","/**\n * Helios Embedded SDK — Comprehensive API\n * \n * A full-featured TypeScript SDK for embedding the Helios AI-native\n * runtime into JavaScript/TypeScript applications.\n * \n * @module helios-sdk\n */\n\nimport { Lexer } from './lexer.js';\nimport { Parser } from './parser.js';\nimport { TypeChecker } from './typechecker.js';\nimport { Evaluator } from './evaluator.js';\nimport { JSBridge } from './jsBridge.js';\n\n// ─── Types & Interfaces ────────────────────────────────────────────\n\n/** Supported AI providers */\nexport type HeliosProvider = 'gemini' | 'openai' | 'anthropic' | 'webllm' | 'custom';\n\n/** Event types emitted by the Helios runtime */\nexport type HeliosEventType = 'print' | 'error' | 'trace' | 'tool_call' | 'agent_delegate' | 'prompt_start' | 'prompt_end';\n\n/** A structured print payload from UI primitives */\nexport interface HeliosPrintPayload {\n type?: string;\n title?: string;\n content?: string;\n value?: number;\n max?: number;\n label?: string;\n [key: string]: unknown;\n}\n\n/** Trace entry from the execution engine */\nexport interface HeliosTraceEntry {\n type: string;\n name?: string;\n model?: string;\n input?: string;\n output?: string;\n duration?: number;\n timestamp?: number;\n tokens?: { input?: number; output?: number };\n [key: string]: unknown;\n}\n\n/** Tool call event */\nexport interface HeliosToolCallEvent {\n name: string;\n args: unknown[];\n result?: unknown;\n}\n\n/** Agent delegation event */\nexport interface HeliosAgentDelegateEvent {\n from: string;\n to: string;\n task: string;\n result?: string;\n}\n\n/** Prompt lifecycle events */\nexport interface HeliosPromptEvent {\n prompt: string;\n model?: string;\n provider?: string;\n}\n\n/** Event map for typed event listeners */\nexport interface HeliosEventMap {\n print: string | HeliosPrintPayload;\n error: Error;\n trace: HeliosTraceEntry;\n tool_call: HeliosToolCallEvent;\n agent_delegate: HeliosAgentDelegateEvent;\n prompt_start: HeliosPromptEvent;\n prompt_end: HeliosPromptEvent & { response?: string; duration?: number };\n}\n\n/** Typed event handler */\nexport type HeliosEventHandler<T extends HeliosEventType> = (data: HeliosEventMap[T]) => void;\n\n/** Tool metadata for registration */\nexport interface HeliosToolMetadata {\n name: string;\n description?: string;\n params?: Array<{ name: string; type: string; description?: string }>;\n returnType?: string;\n}\n\n/** Configuration for Helios runtime */\nexport interface HeliosConfig {\n /** AI provider API key */\n apiKey?: string;\n /** AI provider to use */\n provider?: HeliosProvider;\n /** Default model ID */\n model?: string;\n /** Base URL for custom API providers */\n baseUrl?: string;\n\n /** Sampling temperature (0-2) */\n temperature?: number;\n /** Top-K sampling */\n topK?: number;\n /** Top-P (nucleus) sampling */\n topP?: number;\n\n /** Maximum conversation history entries to retain */\n memoryLimit?: number;\n /** Auto-summarize when history exceeds limit */\n summarizeHistory?: boolean;\n /** Default system prompt for all AI calls */\n systemPrompt?: string;\n /** Maximum loop iterations before kill (default: 1,000,000) */\n maxLoopIterations?: number;\n\n /** Skip actual AI API calls (return placeholder) */\n dryRun?: boolean;\n\n /** Middleware stack */\n middleware?: HeliosMiddleware[];\n\n /** Handler for user input requests from the runtime */\n onInputRequest?: (prompt: string) => Promise<string>;\n}\n\n/** Middleware hook interface */\nexport interface HeliosMiddleware {\n /** Unique name for this middleware */\n name: string;\n /** Called before each AI prompt call */\n beforePrompt?: (context: MiddlewarePromptContext) => Promise<MiddlewarePromptContext | void>;\n /** Called after each AI prompt call */\n afterPrompt?: (context: MiddlewarePromptContext, response: MiddlewarePromptResponse) => Promise<MiddlewarePromptResponse | void>;\n /** Called when a tool is invoked */\n onToolCall?: (name: string, args: unknown[]) => Promise<void>;\n /** Called on any runtime error */\n onError?: (error: Error) => Promise<void>;\n}\n\n/** Context passed through prompt middleware */\nexport interface MiddlewarePromptContext {\n prompt: string;\n model: string;\n provider: string;\n history: HeliosMessage[];\n systemPrompt?: string;\n metadata: Record<string, unknown>;\n}\n\n/** Response from prompt middleware */\nexport interface MiddlewarePromptResponse {\n text: string;\n usage?: { inputTokens?: number; outputTokens?: number };\n metadata: Record<string, unknown>;\n}\n\n/** Conversation message */\nexport interface HeliosMessage {\n role: 'user' | 'assistant' | 'system';\n content: string;\n timestamp: number;\n}\n\n/** Session configuration */\nexport interface HeliosSessionConfig {\n /** Session-specific system prompt (overrides global) */\n systemPrompt?: string;\n /** Maximum history length for this session */\n historyLimit?: number;\n /** Initial context data */\n context?: Record<string, unknown>;\n}\n\n/** Agent configuration */\nexport interface HeliosAgentConfig {\n /** Agent system prompt / persona description */\n prompt: string;\n /** Model override for this agent */\n model?: string;\n /** Tool names available to this agent */\n tools?: string[];\n /** Whether the agent has persistent memory */\n memory?: boolean;\n}\n\n/** Memory store entry */\nexport interface HeliosMemoryEntry {\n key: string;\n text: string;\n metadata?: Record<string, unknown>;\n embedding?: number[];\n timestamp: number;\n}\n\n/** Memory search result */\nexport interface HeliosMemorySearchResult {\n key: string;\n text: string;\n score: number;\n metadata?: Record<string, unknown>;\n}\n\n// ─── Error Hierarchy ────────────────────────────────────────────\n\nexport class HeliosSDKError extends Error {\n code: string;\n constructor(message: string, code: string) {\n super(message);\n this.name = 'HeliosSDKError';\n this.code = code;\n }\n}\n\nexport class HeliosConfigError extends HeliosSDKError {\n constructor(message: string) {\n super(message, 'CONFIG_ERROR');\n this.name = 'HeliosConfigError';\n }\n}\n\nexport class HeliosExecutionError extends HeliosSDKError {\n line?: number;\n col?: number;\n sourceHint?: string;\n\n constructor(message: string, line?: number, col?: number, sourceHint?: string) {\n super(message, 'EXECUTION_ERROR');\n this.name = 'HeliosExecutionError';\n this.line = line;\n this.col = col;\n this.sourceHint = sourceHint;\n }\n}\n\nexport class HeliosCancelledError extends HeliosSDKError {\n constructor() {\n super('Operation was cancelled', 'CANCELLED');\n this.name = 'HeliosCancelledError';\n }\n}\n\n// ─── HeliosMemory ───────────────────────────────────────────────\n\nexport class HeliosMemory {\n private _store: Map<string, HeliosMemoryEntry> = new Map();\n\n /** Store a text entry with optional metadata */\n async store(key: string, text: string, metadata?: Record<string, unknown>): Promise<void> {\n this._store.set(key, {\n key,\n text,\n metadata,\n timestamp: Date.now()\n });\n }\n\n /** Search entries by text similarity (basic substring search without embeddings) */\n async search(query: string, limit: number = 5): Promise<HeliosMemorySearchResult[]> {\n const results: HeliosMemorySearchResult[] = [];\n const queryLower = query.toLowerCase();\n\n for (const entry of this._store.values()) {\n const textLower = entry.text.toLowerCase();\n // Simple relevance: count query term appearances\n const words = queryLower.split(/\\s+/);\n let matchCount = 0;\n for (const word of words) {\n if (textLower.includes(word)) matchCount++;\n }\n if (matchCount > 0) {\n results.push({\n key: entry.key,\n text: entry.text,\n score: matchCount / words.length,\n metadata: entry.metadata\n });\n }\n }\n\n return results\n .sort((a, b) => b.score - a.score)\n .slice(0, limit);\n }\n\n /** Get a specific entry by key */\n get(key: string): HeliosMemoryEntry | undefined {\n return this._store.get(key);\n }\n\n /** Check if a key exists */\n has(key: string): boolean {\n return this._store.has(key);\n }\n\n /** Remove an entry */\n delete(key: string): boolean {\n return this._store.delete(key);\n }\n\n /** Clear all entries */\n clear(): void {\n this._store.clear();\n }\n\n /** Get total entry count */\n get size(): number {\n return this._store.size;\n }\n\n /** Export all entries as a portable array */\n export(): HeliosMemoryEntry[] {\n return Array.from(this._store.values());\n }\n\n /** Import entries from a previously exported array */\n import(data: HeliosMemoryEntry[]): void {\n for (const entry of data) {\n this._store.set(entry.key, entry);\n }\n }\n}\n\n// ─── HeliosSession ──────────────────────────────────────────────\n\nexport class HeliosSession {\n readonly id: string;\n private helios: Helios;\n private history: HeliosMessage[] = [];\n private context: Map<string, unknown> = new Map();\n private systemPrompt: string;\n private historyLimit: number;\n private abortController: AbortController | null = null;\n\n constructor(helios: Helios, config: HeliosSessionConfig = {}) {\n this.id = `session_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;\n this.helios = helios;\n this.systemPrompt = config.systemPrompt || helios.getConfig().systemPrompt || '';\n this.historyLimit = config.historyLimit || helios.getConfig().memoryLimit || 100;\n\n if (config.context) {\n for (const [key, value] of Object.entries(config.context)) {\n this.context.set(key, value);\n }\n }\n }\n\n /** Run a Helios prompt within this session's context and history */\n async prompt(text: string, options: { model?: string; schema?: string } = {}): Promise<string> {\n this.abortController = new AbortController();\n\n // Add user message to history\n this.history.push({\n role: 'user',\n content: text,\n timestamp: Date.now()\n });\n\n // Build Helios source with context\n let source = '';\n if (this.systemPrompt) {\n source += `// System: ${this.systemPrompt}\\n`;\n }\n \n // Inject context variables\n for (const [key, value] of this.context.entries()) {\n const serialized = typeof value === 'string' ? `\"${value}\"` : JSON.stringify(value);\n source += `let ${key} = ${serialized}\\n`;\n }\n\n // Build the prompt expression\n source += `let __result = await prompt(\"${text.replace(/\"/g, '\\\\\"')}\")`;\n if (options.model) {\n source += ` using \"${options.model}\"`;\n }\n source += '\\n__result';\n\n try {\n // Check cancellation\n if (this.abortController.signal.aborted) {\n throw new HeliosCancelledError();\n }\n\n const result = await this.helios.run(source);\n const responseText = typeof result === 'string' ? result : JSON.stringify(result);\n\n // Add assistant response to history\n this.history.push({\n role: 'assistant',\n content: responseText,\n timestamp: Date.now()\n });\n\n // Trim history if needed\n this.trimHistory();\n\n return responseText;\n } finally {\n this.abortController = null;\n }\n }\n\n /** Run arbitrary Helios code within session context */\n async run(source: string): Promise<unknown> {\n this.abortController = new AbortController();\n \n try {\n if (this.abortController.signal.aborted) {\n throw new HeliosCancelledError();\n }\n\n const contextObj: Record<string, unknown> = {};\n for (const [key, value] of this.context.entries()) {\n contextObj[key] = value;\n }\n\n return await this.helios.run(source, contextObj);\n } finally {\n this.abortController = null;\n }\n }\n\n /** Get the conversation history */\n getHistory(): HeliosMessage[] {\n return [...this.history];\n }\n\n /** Clear the conversation history */\n clearHistory(): void {\n this.history = [];\n }\n\n /** Set the system prompt */\n setSystemPrompt(prompt: string): void {\n this.systemPrompt = prompt;\n }\n\n /** Add contextual data available to all prompts */\n addContext(key: string, value: unknown): void {\n this.context.set(key, value);\n }\n\n /** Remove a context key */\n removeContext(key: string): boolean {\n return this.context.delete(key);\n }\n\n /** Clear all context */\n clearContext(): void {\n this.context.clear();\n }\n\n /** Get current context as a plain object */\n getContext(): Record<string, unknown> {\n const obj: Record<string, unknown> = {};\n for (const [key, value] of this.context.entries()) {\n obj[key] = value;\n }\n return obj;\n }\n\n /** Cancel any running operation */\n abort(): void {\n if (this.abortController) {\n this.abortController.abort();\n }\n }\n\n private trimHistory(): void {\n while (this.history.length > this.historyLimit) {\n this.history.shift();\n }\n }\n}\n\n// ─── HeliosAgent ────────────────────────────────────────────────\n\nexport class HeliosAgent {\n readonly name: string;\n private helios: Helios;\n private config: HeliosAgentConfig;\n private tools: Map<string, { fn: Function; metadata: HeliosToolMetadata }> = new Map();\n private history: HeliosMessage[] = [];\n private isRegistered: boolean = false;\n\n constructor(helios: Helios, name: string, config: HeliosAgentConfig) {\n this.name = name;\n this.helios = helios;\n this.config = config;\n }\n\n /** Register agent in the Helios runtime and make it available for delegation */\n async register(): Promise<void> {\n if (this.isRegistered) return;\n\n const toolNames = this.config.tools || [];\n const source = `\n swarm.createAgent(\"${this.name}\", \"${this.config.prompt.replace(/\"/g, '\\\\\"')}\")\n ${this.config.model ? `swarm.setAgentModel(\"${this.name}\", \"${this.config.model}\")` : ''}\n ${toolNames.map(t => `swarm.addTool(\"${this.name}\", \"${t}\")`).join('\\n')}\n `;\n\n await this.helios.run(source);\n this.isRegistered = true;\n }\n\n /** Delegate a task to this agent */\n async delegate(task: string): Promise<string> {\n if (!this.isRegistered) {\n await this.register();\n }\n\n const source = `await swarm.delegate(\"${this.name}\", \"${task.replace(/\"/g, '\\\\\"')}\")`;\n const result = await this.helios.run(source);\n\n // Track history\n this.history.push(\n { role: 'user', content: task, timestamp: Date.now() },\n { role: 'assistant', content: String(result), timestamp: Date.now() }\n );\n\n this.helios.emit('agent_delegate', {\n from: 'sdk',\n to: this.name,\n task,\n result: String(result)\n });\n\n return String(result);\n }\n\n /** Add a tool to this agent */\n addTool(name: string, fn: Function, metadata?: Partial<HeliosToolMetadata>): void {\n const fullMetadata: HeliosToolMetadata = {\n name,\n description: metadata?.description || `Tool: ${name}`,\n params: metadata?.params || [],\n returnType: metadata?.returnType || 'Unknown'\n };\n this.tools.set(name, { fn, metadata: fullMetadata });\n\n // Also register globally in Helios\n this.helios.registerTool(name, fn, fullMetadata);\n\n // If already registered, update the agent's tool in the runtime\n if (this.isRegistered) {\n this.helios.run(`swarm.addTool(\"${this.name}\", \"${name}\")`).catch(() => {});\n }\n }\n\n /** Remove a tool from this agent */\n removeTool(name: string): boolean {\n const removed = this.tools.delete(name);\n if (removed && this.isRegistered) {\n this.helios.run(`swarm.removeTool(\"${this.name}\", \"${name}\")`).catch(() => {});\n }\n return removed;\n }\n\n /** List tool names on this agent */\n listTools(): string[] {\n return Array.from(this.tools.keys());\n }\n\n /** Switch the agent's model */\n setModel(model: string): void {\n this.config.model = model;\n if (this.isRegistered) {\n this.helios.run(`swarm.setAgentModel(\"${this.name}\", \"${model}\")`).catch(() => {});\n }\n }\n\n /** Get agent's conversation history */\n getHistory(): HeliosMessage[] {\n return [...this.history];\n }\n\n /** Clear agent's history */\n clearHistory(): void {\n this.history = [];\n }\n\n /** Get the agent's config */\n getConfig(): Readonly<HeliosAgentConfig> {\n return { ...this.config };\n }\n}\n\n// ─── Main Helios Class ──────────────────────────────────────────\n\nexport class Helios {\n private config: HeliosConfig;\n private tools: Record<string, Function> = {};\n private toolMetadata: Map<string, HeliosToolMetadata> = new Map();\n private modules: Record<string, Record<string, Function>> = {};\n private listeners: Map<HeliosEventType, Set<Function>> = new Map();\n private middleware: HeliosMiddleware[] = [];\n private sessions: Map<string, HeliosSession> = new Map();\n private agents: Map<string, HeliosAgent> = new Map();\n private memory: HeliosMemory;\n\n private evaluator: any = null;\n\n constructor(config: HeliosConfig = {}) {\n this.config = {\n provider: 'gemini',\n maxLoopIterations: 1_000_000,\n memoryLimit: 100,\n dryRun: false,\n ...config\n };\n\n this.memory = new HeliosMemory();\n this.middleware = config.middleware || [];\n\n // Initialize event listener sets\n const eventTypes: HeliosEventType[] = ['print', 'error', 'trace', 'tool_call', 'agent_delegate', 'prompt_start', 'prompt_end'];\n for (const type of eventTypes) {\n this.listeners.set(type, new Set());\n }\n }\n\n // ─── Configuration ─────────────────────────────────────\n\n /** Get the current configuration (read-only copy) */\n getConfig(): Readonly<HeliosConfig> {\n return { ...this.config };\n }\n\n /** Update configuration (merges with existing) */\n updateConfig(updates: Partial<HeliosConfig>): void {\n this.config = { ...this.config, ...updates };\n // Reset evaluator so new config takes effect\n this.evaluator = null;\n }\n\n // ─── Event System ──────────────────────────────────────\n\n /** Register an event listener */\n on<T extends HeliosEventType>(event: T, handler: HeliosEventHandler<T>): this {\n const handlers = this.listeners.get(event);\n if (handlers) {\n handlers.add(handler as Function);\n }\n return this;\n }\n\n /** Remove an event listener */\n off<T extends HeliosEventType>(event: T, handler: HeliosEventHandler<T>): this {\n const handlers = this.listeners.get(event);\n if (handlers) {\n handlers.delete(handler as Function);\n }\n return this;\n }\n\n /** Remove all listeners for an event, or all events if no type given */\n removeAllListeners(event?: HeliosEventType): this {\n if (event) {\n this.listeners.get(event)?.clear();\n } else {\n for (const set of this.listeners.values()) {\n set.clear();\n }\n }\n return this;\n }\n\n /** Emit an event (internal + public) */\n emit<T extends HeliosEventType>(event: T, data: HeliosEventMap[T]): void {\n const handlers = this.listeners.get(event);\n if (handlers) {\n for (const handler of handlers) {\n try {\n handler(data);\n } catch (e) {\n console.error(`[Helios] Error in ${event} handler:`, e);\n }\n }\n }\n }\n\n // ─── Middleware ─────────────────────────────────────────\n\n /** Add a middleware to the stack */\n use(middleware: HeliosMiddleware): this {\n this.middleware.push(middleware);\n return this;\n }\n\n /** Remove a middleware by name */\n removeMiddleware(name: string): boolean {\n const idx = this.middleware.findIndex(m => m.name === name);\n if (idx >= 0) {\n this.middleware.splice(idx, 1);\n return true;\n }\n return false;\n }\n\n /** Run prompt through middleware beforePrompt hooks */\n async runBeforePromptMiddleware(context: MiddlewarePromptContext): Promise<MiddlewarePromptContext> {\n let current = context;\n for (const mw of this.middleware) {\n if (mw.beforePrompt) {\n const result = await mw.beforePrompt(current);\n if (result) current = result;\n }\n }\n return current;\n }\n\n /** Run response through middleware afterPrompt hooks */\n async runAfterPromptMiddleware(context: MiddlewarePromptContext, response: MiddlewarePromptResponse): Promise<MiddlewarePromptResponse> {\n let current = response;\n for (const mw of this.middleware) {\n if (mw.afterPrompt) {\n const result = await mw.afterPrompt(context, current);\n if (result) current = result;\n }\n }\n return current;\n }\n\n /** Notify middleware of tool calls */\n async notifyToolCallMiddleware(name: string, args: unknown[]): Promise<void> {\n for (const mw of this.middleware) {\n if (mw.onToolCall) {\n await mw.onToolCall(name, args);\n }\n }\n }\n\n /** Notify middleware of errors */\n async notifyErrorMiddleware(error: Error): Promise<void> {\n for (const mw of this.middleware) {\n if (mw.onError) {\n await mw.onError(error);\n }\n }\n }\n\n // ─── Tool Registration ─────────────────────────────────\n\n /** Register a JavaScript function as a Helios tool */\n registerTool(name: string, fn: Function, metadata?: Partial<HeliosToolMetadata>): this {\n const fullMetadata: HeliosToolMetadata = {\n name,\n description: metadata?.description || `Tool: ${name}`,\n params: metadata?.params || JSBridge.inferParams(fn as any).map((p: any) => ({ name: p.name, type: p.type })),\n returnType: metadata?.returnType || 'Unknown'\n };\n\n // Wrap with middleware notification\n const wrappedFn = async (...args: unknown[]) => {\n await this.notifyToolCallMiddleware(name, args);\n this.emit('tool_call', { name, args });\n\n try {\n const result = await (fn as any)(...args);\n return result;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n await this.notifyErrorMiddleware(err);\n throw err;\n }\n };\n\n this.tools[name] = JSBridge.wrap(wrappedFn, { name, ...metadata });\n this.toolMetadata.set(name, fullMetadata);\n\n // Reset evaluator so tool is picked up\n this.evaluator = null;\n return this;\n }\n\n /** Unregister a tool */\n unregisterTool(name: string): boolean {\n if (this.tools[name]) {\n delete this.tools[name];\n this.toolMetadata.delete(name);\n this.evaluator = null;\n return true;\n }\n return false;\n }\n\n /** List registered tools */\n listTools(): HeliosToolMetadata[] {\n return Array.from(this.toolMetadata.values());\n }\n\n // ─── Module Registration ───────────────────────────────\n\n /** Register a module of functions */\n registerModule(name: string, exports: Record<string, Function>): this {\n this.modules[name] = exports;\n this.evaluator = null;\n return this;\n }\n\n /** Unregister a module */\n unregisterModule(name: string): boolean {\n if (this.modules[name]) {\n delete this.modules[name];\n this.evaluator = null;\n return true;\n }\n return false;\n }\n\n // ─── Code Execution ────────────────────────────────────\n\n /** Execute Helios source code */\n async run(source: string, context: Record<string, unknown> = {}): Promise<unknown> {\n try {\n // 1. Lex\n const lexer = new Lexer(source);\n const tokens = lexer.tokenize();\n\n // 2. Parse\n const parser = new Parser(tokens, source as any);\n const ast = parser.parse();\n\n // 3. Type check\n const typeChecker = new TypeChecker({\n tools: this.tools,\n modules: this.modules\n });\n typeChecker.check(ast);\n\n // 4. Evaluate\n this.ensureEvaluator();\n\n // Inject context into evaluator environment\n for (const [key, value] of Object.entries(context)) {\n this.evaluator!.globalEnv.define(key, value);\n }\n\n const result = await this.evaluator!.evaluate(ast);\n return result;\n\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.emit('error', err);\n await this.notifyErrorMiddleware(err);\n\n // Re-throw as SDK error with location info\n if ((error as any).line !== undefined) {\n throw new HeliosExecutionError(\n err.message,\n (error as any).line,\n (error as any).col,\n (error as any).hint\n );\n }\n throw err;\n }\n }\n\n // ─── Session Management ────────────────────────────────\n\n /** Create a new conversation session */\n createSession(config?: HeliosSessionConfig): HeliosSession {\n const session = new HeliosSession(this, config);\n this.sessions.set(session.id, session);\n return session;\n }\n\n /** Get a session by ID */\n getSession(id: string): HeliosSession | undefined {\n return this.sessions.get(id);\n }\n\n /** List active session IDs */\n listSessions(): string[] {\n return Array.from(this.sessions.keys());\n }\n\n /** Destroy a session */\n destroySession(id: string): boolean {\n const session = this.sessions.get(id);\n if (session) {\n session.abort();\n session.clearHistory();\n session.clearContext();\n return this.sessions.delete(id);\n }\n return false;\n }\n\n // ─── Agent Management ──────────────────────────────────\n\n /** Create a new agent with declarative config */\n createAgent(name: string, config: HeliosAgentConfig): HeliosAgent {\n if (this.agents.has(name)) {\n throw new HeliosConfigError(`Agent \"${name}\" already exists. Use getAgent() or destroyAgent() first.`);\n }\n const agent = new HeliosAgent(this, name, config);\n this.agents.set(name, agent);\n return agent;\n }\n\n /** Get an existing agent */\n getAgent(name: string): HeliosAgent | undefined {\n return this.agents.get(name);\n }\n\n /** List all agent names */\n listAgents(): string[] {\n return Array.from(this.agents.keys());\n }\n\n /** Destroy an agent */\n destroyAgent(name: string): boolean {\n const agent = this.agents.get(name);\n if (agent) {\n agent.clearHistory();\n return this.agents.delete(name);\n }\n return false;\n }\n\n // ─── Memory ────────────────────────────────────────────\n\n /** Access the vector memory store */\n getMemory(): HeliosMemory {\n return this.memory;\n }\n\n // ─── Lifecycle ─────────────────────────────────────────\n\n /** Reset all state (evaluator, sessions, agents, memory) */\n reset(): void {\n this.evaluator = null;\n for (const session of this.sessions.values()) {\n session.abort();\n }\n this.sessions.clear();\n this.agents.clear();\n this.memory.clear();\n }\n\n /** Reset only the evaluator (keeps sessions, agents, memory) */\n resetRuntime(): void {\n this.evaluator = null;\n }\n\n // ─── Internal ──────────────────────────────────────────\n\n private ensureEvaluator(): void {\n if (this.evaluator) return;\n\n this.evaluator = new Evaluator(\n (...args: unknown[]) => {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null) {\n this.emit('print', args[0] as HeliosPrintPayload);\n } else {\n this.emit('print', args.map(a => typeof a === 'object' ? JSON.stringify(a) : String(a)).join(' '));\n }\n },\n {\n ...this.config,\n tools: this.tools,\n modules: this.modules,\n onInputRequest: this.config.onInputRequest\n }\n );\n\n // Wire up tracing\n const originalAddTrace = this.evaluator!.addTrace.bind(this.evaluator!);\n this.evaluator!.addTrace = (entry: HeliosTraceEntry) => {\n originalAddTrace(entry);\n this.emit('trace', entry);\n };\n }\n}\n\n// ─── Builder Pattern ────────────────────────────────────────────\n\n/** Fluent builder for creating a Helios instance */\nexport class HeliosBuilder {\n private config: HeliosConfig = {};\n private toolRegistrations: Array<{ name: string; fn: Function; metadata?: Partial<HeliosToolMetadata> }> = [];\n private moduleRegistrations: Array<{ name: string; exports: Record<string, Function> }> = [];\n private middlewareStack: HeliosMiddleware[] = [];\n private eventHandlers: Array<{ event: HeliosEventType; handler: Function }> = [];\n\n /** Set the AI provider */\n provider(provider: HeliosProvider): this {\n this.config.provider = provider;\n return this;\n }\n\n /** Set the API key */\n apiKey(key: string): this {\n this.config.apiKey = key;\n return this;\n }\n\n /** Set the default model */\n model(model: string): this {\n this.config.model = model;\n return this;\n }\n\n /** Set a custom base URL */\n baseUrl(url: string): this {\n this.config.baseUrl = url;\n return this;\n }\n\n /** Set the system prompt */\n systemPrompt(prompt: string): this {\n this.config.systemPrompt = prompt;\n return this;\n }\n\n /** Set sampling temperature */\n temperature(temp: number): this {\n this.config.temperature = temp;\n return this;\n }\n\n /** Set memory limit */\n memoryLimit(limit: number): this {\n this.config.memoryLimit = limit;\n return this;\n }\n\n /** Set max loop iterations */\n maxLoopIterations(limit: number): this {\n this.config.maxLoopIterations = limit;\n return this;\n }\n\n /** Enable dry-run mode (no real AI calls) */\n dryRun(enabled: boolean = true): this {\n this.config.dryRun = enabled;\n return this;\n }\n\n /** Set input request handler */\n onInputRequest(handler: (prompt: string) => Promise<string>): this {\n this.config.onInputRequest = handler;\n return this;\n }\n\n /** Register a tool */\n tool(name: string, fn: Function, metadata?: Partial<HeliosToolMetadata>): this {\n this.toolRegistrations.push({ name, fn, metadata });\n return this;\n }\n\n /** Register a module */\n module(name: string, exports: Record<string, Function>): this {\n this.moduleRegistrations.push({ name, exports });\n return this;\n }\n\n /** Add middleware */\n use(middleware: HeliosMiddleware): this {\n this.middlewareStack.push(middleware);\n return this;\n }\n\n /** Add an event handler */\n on<T extends HeliosEventType>(event: T, handler: HeliosEventHandler<T>): this {\n this.eventHandlers.push({ event, handler: handler as Function });\n return this;\n }\n\n /** Build the Helios instance */\n build(): Helios {\n this.config.middleware = this.middlewareStack;\n const helios = new Helios(this.config);\n\n // Register tools\n for (const { name, fn, metadata } of this.toolRegistrations) {\n helios.registerTool(name, fn, metadata);\n }\n\n // Register modules\n for (const { name, exports } of this.moduleRegistrations) {\n helios.registerModule(name, exports);\n }\n\n // Register event handlers\n for (const { event, handler } of this.eventHandlers) {\n helios.on(event as HeliosEventType, handler as any);\n }\n\n return helios;\n }\n}\n\n// ─── Convenience Factory ────────────────────────────────────────\n\n/** Create a HeliosBuilder for fluent configuration */\nexport function createHelios(): HeliosBuilder {\n return new HeliosBuilder();\n}\n\n/** Quick-start: Create a Helios instance with minimal config */\nexport function helios(config?: HeliosConfig): Helios {\n return new Helios(config);\n}\n"],"mappings":"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","names":["HeliosError","message","line","col","phase","suggestion","source","providedSource","location","output","errorLine","padding","HeliosSyntaxError","HeliosLexicalError","HeliosTypeError","HeliosRuntimeError","TokenType","KEYWORDS","OPERATORS","DELIMITERS","Token","type","value","line","col","Lexer","source","char","startLine","startCol","quote","next","HeliosLexicalError","op","o","tokens","token","Node","type","line","col","Program","body","ImportDeclaration","source","specifiers","isExternal","uses","FunctionDeclaration","name","params","returnType","effects","annotations","isExported","isAsync","typeParameters","Parameter","typeAnnotation","defaultValue","VariableDeclaration","kind","pattern","init","AssignmentExpression","left","value","ArrayLiteral","elements","ObjectLiteral","properties","MemberExpression","object","property","TypeDeclaration","typeParams","PromptExpression","Node","template","asType","schema","fallback","retries","timeout","guardrails","model","tools","history","contexts","line","col","WithContextStatement","context","body","MatchExpression","discriminant","arms","MatchArm","pattern","guard","IfExpression","condition","consequent","alternate","WhileStatement","ForStatement","iterator","iterable","ComptimeBlock","BinaryExpression","left","operator","right","CallExpression","callee","args","typeArguments","NewExpression","ReturnStatement","argument","UnaryExpression","AwaitExpression","Literal","value","kind","Identifier","name","Parser","tokens","source","TokenType","type","value","token","expected","found","suggestion","HeliosSyntaxError","firstToken","body","Program","annotations","isExported","isAsync","stmt","err","startToken","specifiers","name","alias","sourceToken","isExternal","uses","ImportDeclaration","args","depth","t","line","col","nameToken","typeParameters","params","returnType","effects","effect","FunctionDeclaration","Parameter","typeParams","TypeDeclaration","elementType","fields","keyToken","key","typeArguments","arg","ReturnStatement","ComptimeBlock","context","WithContextStatement","condition","WhileStatement","consequent","alternate","IfExpression","discriminant","arms","MatchExpression","pattern","guard","MatchArm","calleeToken","callee","Identifier","NewExpression","iterator","iterable","ForStatement","kind","typeAnnotation","init","VariableDeclaration","left","eqToken","right","AssignmentExpression","opToken","operator","BinaryExpression","argument","UnaryExpression","awaitToken","AwaitExpression","expr","bracketToken","property","MemberExpression","dotToken","propertyToken","Literal","parenToken","CallExpression","i","elements","ArrayLiteral","properties","ObjectLiteral","template","asType","schema","fallback","retries","timeout","model","tools","history","contexts","peek","next","PromptExpression","Type","_Type","name","params","effects","typeParams","other","i","mapping","newFields","k","v","ObjectType","newParams","p","ret","fields","keys1","keys2","key","Primitives","TypeEnv","parent","type","TypeChecker","options","tool","moduleData","moduleEnv","math","fs","json","csv","xml","web","http","storage","context","swarm","mcp","mcpConnectType","mcpListToolsType","mcpCallToolType","memory","ai","ui","node","env","stmt","source","spec","HeliosTypeError","initType","declaredType","finalType","varType","objType","propType","propName","valueType","subEnv","paramTypes","retType","funcType","prevFunc","modStrType","objFields","left","argTypes","arg","right","argType","elementTypes","el","commonType","currentType","prop","elementType","schemaType","asType","condType","consType","altType","iterableType","iteratorType","ctx","calleeName","typeArgs","param","expectedParams","returnType","stmts","lastType","typeNode","baseType","val","expected","actual","MCPConnection","url","onPrint","resolve","reject","e","initResult","err","event","msg","pending","method","params","id","GoogleGenAI","ThinkingLevel","VectorMemory","evaluator","vecA","vecB","dotProduct","magnitudeA","magnitudeB","i","text","ai","vec","mag","sum","val","v","id","metadata","embedding","item","query","limit","queryEmbedding","results","a","b","data","registerStdLib","evaluator","VectorMemory","swarm","args","name","prompt","model","agent","tool","task","promptText","tools","t","result","math","date","d","fmt","d1","d2","unit","diff","amount","fsMod","VFS_PREFIX","path","files","i","key","filePath","content","HeliosRuntimeError","json","sys","ms","resolve","str","list","arr","item","start","end","deleteCount","items","separator","step","obj","o1","o2","http","url","headers","response","contentType","body","options","fetchOptions","ui","label","value","placeholder","title","src","alt","type","data","config","columns","max","memory","id","text","metadata","query","limit","size","overlap","chunks","html","doc","s","e","thought","steps","csv","lines","h","values","v","idx","row","val","xmlToJson","node","j","attribute","hasOnlyText","nodeName","cryptoMod","algo","msgUint8","hashBuffer","b","base64","encoded","regex","pattern","flags","re","matches","replacement","urlMod","urlString","u","params","base","workflow","agents","initialInput","currentInput","agentName","defaultModel","actor","critic","criteria","maxIterations","currentDraft","feedback","iteration","approved","actorPrompt","criticPrompt","worker","synthesizer","mapPromises","index","mappedResults","reducePrompt","reduceModel","finalResult","input","routes","routeKeys","routeDescriptions","k","routerPrompt","routerModel","selectedRoute","targetAgent","agentPrompt","topic","participants","judge","rounds","debateHistory","r","participant","debateModel","argument","judgePrompt","judgeModel","judgeResult","manager","goal","breakdownPrompt","treeModel","breakdownResult","subTasks","jsonStr","line","results","workerPrompt","workerResult","compilePrompt","JSBridge","_JSBridge","jsFunc","metadata","HeliosRuntimeError","wrapped","args","e","func","fnStr","result","p","url","PROVIDERS","CAPABILITIES","MODELS","ModelManager","provider","m","id","models","modelId","capability","model","Environment","parent","name","value","HeliosRuntimeError","ReturnValue","MAX_LOOP_ITERATIONS","Evaluator","onPrint","options","prompt","func","env","GoogleGenAI","e","entry","tool","fn","metadata","params","p","i","STRIP_COMMENTS","ARGUMENT_NAMES","fnStr","openParen","closeParen","result","newEnv","k","v","args","val","res","math","registerStdLib","fsMod","FS_PREFIX","path","content","files","key","jsonMod","csvMod","csv","lines","l","delimiter","parseLine","line","parts","current","inQuotes","char","headers","values","obj","h","data","formatValue","s","headerRow","rows","row","xmlMod","domToObj","node","attr","child","doc","errorNode","objToXml","xml","item","rootName","webMod","runGrounding","query","toolName","searchFunc","mapsFunc","url","response","storageMod","contextMod","entryLimit","aiMod","swarmMod","systemPrompt","tools","enhancedTools","defaultModel","model","agent","message","sender","agentName","index","task","toolFunctions","toolsList","t","mod","wrapped","currentContents","turnCount","maxTurns","functionCalls","functionResponseParts","call","toolArgs","toolFn","err","mcpMod","serverName","client","MCPConnection","msg","server","memoryMod","getEmbedding","text","cosineSimilarity","v1","v2","dotProduct","m1","m2","mag","vector","memories","limit","queryVector","m","a","b","labels","schema","convertTypeToExample","typeDef","example","length","lenPrompt","targetLang","code","errorMsg","lastResult","stmt","codeToInject","currentCode","attempts","maxAttempts","tokens","Lexer","program","Parser","isSyntaxError","moduleEnv","source","jsModule","JSBridge","spec","assignValue","prop","left","callee","arg","right","elements","el","isNative","template","regex","matches","match","exprStr","exprNode","localContexts","ctxExpr","allContexts","ctx","retries","timeout","modelName","attempt","lastError","groundingTools","history","promptEntry","controller","timeoutId","toolErr","parsed","schemaName","keys","geminiSchema","normalized","schemaProperties","schemaKey","sk","__iterations","__maxIter","discriminant","arm","bindings","matchEnv","iterable","subEnv","contexts","traceAnnotation","param","finalResult","calleeName","stmts","pattern","patternValue","body","contents","config","isModelValidForProvider","ModelManager","keepCount","toSummarize","keep","summaryPrompt","summary","gt","geminiConfig","ThinkingLevel","geminiTools","toolDecls","messages","errText","progress","turn","request","tc","baseUrl","part","typeNode","resolved","properties","required","funcNode","parameters","HeliosSDKError","message","code","HeliosConfigError","HeliosExecutionError","line","col","sourceHint","HeliosCancelledError","HeliosMemory","key","text","metadata","query","limit","results","queryLower","entry","textLower","words","matchCount","word","a","b","data","HeliosSession","helios","config","value","options","source","serialized","result","responseText","contextObj","prompt","obj","HeliosAgent","name","toolNames","t","task","fn","fullMetadata","removed","model","Helios","eventTypes","type","updates","event","handler","handlers","set","e","middleware","idx","m","context","current","mw","response","args","error","JSBridge","p","wrappedFn","err","exports","tokens","Lexer","ast","Parser","TypeChecker","session","id","agent","Evaluator","originalAddTrace","HeliosBuilder","provider","url","temp","enabled","createHelios"]}