Advanced AI agent library with multi-provider support, reactive contexts, and intelligent tool orchestration.
@arcaelas/agent is a production-ready TypeScript library that enables developers to build sophisticated conversational AI agents with enterprise-grade features. Our architecture combines reactive context inheritance, intelligent multi-provider failover, and extensible tool orchestration to create agents that scale from simple chatbots to complex organizational workflows.
Why Choose @arcaelas/agent?
- π Intelligent Failover: Automatic provider switching ensures 99.9% uptime across OpenAI, Anthropic, Groq, and custom APIs
- ποΈ Reactive Architecture: Context inheritance system that scales from individual agents to enterprise-wide organizational hierarchies
- π οΈ Tool Ecosystem: Built-in HTTP tools, time utilities, and seamless custom function integration with parallel execution
- π Type Safety: Full TypeScript support with discriminated unions, generics, and comprehensive IDE integration
- β‘ Performance First: Optimized for high-throughput applications with intelligent load balancing and memory management
- π― Developer Experience: Intuitive API design that reduces complexity while maintaining full control over agent behavior
- π Agent Class
- π Context System
- π οΈ Tool System
- π¨ Message Management
- βοΈ Advanced Configuration
@arcaelas/agent supports multiple installation methods for different environments:
# npm (recommended)
npm install @arcaelas/agent
# yarn
yarn add @arcaelas/agent
# pnpm
pnpm add @arcaelas/agent
# bun
bun add @arcaelas/agent<!-- ES Modules -->
<script type="module">
import { Agent, Tool } from 'https://cdn.skypack.dev/@arcaelas/agent';
</script>
<!-- UMD (Global) -->
<script src="https://unpkg.com/@arcaelas/agent/dist/index.umd.js"></script>
<script>
const { Agent, Tool } = ArcaelasAgent;
</script>- Node.js β₯ 16.0.0
- TypeScript β₯ 4.5.0 (for TypeScript projects)
- Modern Browser (ES2020+ support for browser usage)
Create a .env file in your project root:
# OpenAI
OPENAI_API_KEY=your_openai_api_key
# Anthropic (optional)
ANTHROPIC_API_KEY=your_anthropic_api_key
# Groq (optional)
GROQ_API_KEY=your_groq_api_keyEnsure your tsconfig.json includes:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "node",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
}
}Create your first AI agent in 3 simple steps:
import { Agent } from '@arcaelas/agent';
import OpenAI from 'openai';
// Initialize your AI provider
const openai = new OpenAI({
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY
});const assistant = new Agent({
name: "Personal_Assistant",
description: "Helpful assistant for daily tasks and questions",
providers: [
async (ctx) => {
return await openai.chat.completions.create({
model: "gpt-4",
messages: ctx.messages.map(m => ({
role: m.role,
content: m.content
}))
});
}
]
});// Simple interaction
const [messages, success] = await assistant.call("What's the weather like today?");
if (success) {
const response = messages[messages.length - 1].content;
console.log("Assistant:", response);
} else {
console.log("Failed to get response");
}Test your installation with this complete example:
import { Agent, Tool } from '@arcaelas/agent';
import OpenAI from 'openai';
// Create a simple time tool
const time_tool = new Tool("get_current_time", async (agent) => {
return new Date().toLocaleString();
});
// Create agent with tool
const agent = new Agent({
name: "Time_Assistant",
description: "Assistant that can tell the current time",
tools: [time_tool],
providers: [
async (ctx) => {
const openai = new OpenAI({
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY
});
return await openai.chat.completions.create({
model: "gpt-4",
messages: ctx.messages.map(m => ({ role: m.role, content: m.content })),
tools: ctx.tools?.map(tool => ({
type: "function",
function: {
name: tool.name,
description: tool.description,
parameters: {
type: "object",
properties: tool.parameters
}
}
}))
});
}
]
});
// Test the agent
console.log("Testing agent...");
const [conversation, success] = await agent.call("What time is it?");
if (success) {
console.log("β
Installation successful!");
console.log("Response:", conversation[conversation.length - 1].content);
} else {
console.log("β Installation failed. Check your API key.");
}Expected Output:
Testing agent...
β
Installation successful!
Response: The current time is [current date and time].
Perfect for getting started with basic conversational AI:
import { Agent } from '@arcaelas/agent';
import OpenAI from 'openai';
// Create a simple chatbot
const chatbot = new Agent({
name: "Simple_Chatbot",
description: "Friendly assistant for basic questions and conversations",
providers: [
async (ctx) => {
const openai = new OpenAI({
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY
});
return await openai.chat.completions.create({
model: "gpt-3.5-turbo",
messages: ctx.messages.map(m => ({
role: m.role,
content: m.content
}))
});
}
]
});
// Use the chatbot
const [conversation, success] = await chatbot.call("Tell me a joke about programming");
console.log("Bot:", conversation[conversation.length - 1].content);Production-ready setup with automatic failover and tools:
import { Agent, Tool, TimeTool } from '@arcaelas/agent';
import OpenAI from 'openai';
import Anthropic from '@anthropic-ai/sdk';
// Create utility tools
const weather_tool = new Tool("get_weather", {
description: "Get current weather for any city",
parameters: {
city: "City name (e.g., 'London', 'New York')",
units: "Temperature units: 'celsius' or 'fahrenheit'"
},
func: async (agent, params) => {
// Mock weather API call
const temp = params.units === 'celsius' ? '22Β°C' : '72Β°F';
return `Weather in ${params.city}: Sunny, ${temp}`;
}
});
const time_tool = new TimeTool({ time_zone: "America/New_York" });
// Multi-provider agent with tools
const advanced_agent = new Agent({
name: "Advanced_Assistant",
description: "Intelligent assistant with weather and time capabilities",
tools: [weather_tool, time_tool],
providers: [
// Primary: OpenAI GPT-4
async (ctx) => {
const openai = new OpenAI({
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY
});
return await openai.chat.completions.create({
model: "gpt-4",
messages: ctx.messages.map(m => ({ role: m.role, content: m.content })),
tools: ctx.tools?.map(tool => ({
type: "function",
function: {
name: tool.name,
description: tool.description,
parameters: {
type: "object",
properties: tool.parameters
}
}
}))
});
},
// Backup: Anthropic Claude
async (ctx) => {
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY
});
return await anthropic.messages.create({
model: "claude-3-sonnet-20240229",
max_tokens: 4000,
messages: ctx.messages.map(m => ({
role: m.role === "system" ? "user" : m.role,
content: m.content
}))
});
}
]
});
// Test with tool usage
const [messages, success] = await advanced_agent.call(
"What's the weather like in Tokyo and what time is it in New York?"
);Scalable setup for organizational use with context inheritance:
import { Agent, Context, Metadata, Rule, Tool } from '@arcaelas/agent';
// Organization-wide base context
const company_context = new Context({
metadata: new Metadata()
.set("organization", "Acme Corp")
.set("compliance_level", "enterprise")
.set("data_retention", "7_years"),
rules: [
new Rule("Maintain professional communication"),
new Rule("Protect confidential information"),
new Rule("Log all interactions for audit purposes")
]
});
// Department-specific context
const sales_context = new Context({
context: company_context, // Inherits from company
metadata: new Metadata()
.set("department", "Sales")
.set("target_region", "North America"),
tools: [
new Tool("get_customer_info", {
description: "Retrieve customer information from CRM",
parameters: {
customer_id: "Customer ID or email address"
},
func: async (agent, params) => {
// Mock CRM integration
return `Customer ${params.customer_id}: Premium tier, active since 2023`;
}
}),
new Tool("create_quote", {
description: "Generate sales quote for products",
parameters: {
products: "Comma-separated list of product names",
customer_tier: "Customer tier: 'standard', 'premium', or 'enterprise'"
},
func: async (agent, params) => {
// Mock quote generation
const discount = params.customer_tier === 'enterprise' ? '15%' : '5%';
return `Quote generated for ${params.products} with ${discount} discount`;
}
})
]
});
// Specialized sales agent
const sales_agent = new Agent({
name: "Sales_Specialist",
description: "Expert sales representative with CRM access and pricing tools",
contexts: sales_context, // Inherits complete hierarchy
providers: [
async (ctx) => {
const openai = new OpenAI({
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY
});
// Build system message with context
const system_message = `You are a ${ctx.metadata.get("department")} representative for ${ctx.metadata.get("organization")}.
Rules:
${ctx.rules.map(rule => `- ${rule.description}`).join('\n')}
Available tools: ${ctx.tools?.map(t => t.name).join(', ')}`;
return await openai.chat.completions.create({
model: "gpt-4",
messages: [
{ role: "system", content: system_message },
...ctx.messages.map(m => ({ role: m.role, content: m.content }))
],
tools: ctx.tools?.map(tool => ({
type: "function",
function: {
name: tool.name,
description: tool.description,
parameters: {
type: "object",
properties: tool.parameters
}
}
}))
});
}
]
});
// Sales interaction example
const [conversation, success] = await sales_agent.call(
"I need a quote for our enterprise software package for customer john@company.com"
);
// The agent has access to:
// - Company policies and compliance rules
// - Sales department tools and metadata
// - CRM integration and quote generation
// - Professional communication guidelines@arcaelas/agent is built on four core principles that enable scalable, maintainable AI agent development:
The Agent is the central orchestrator that combines identity, behavior, tools, and intelligence providers into a cohesive conversational experience.
Reactive Context System provides hierarchical state management where child contexts automatically inherit parent properties while maintaining their own specialized behavior.
Extensible Tool System allows agents to execute custom functions, make HTTP requests, and interact with external services through a unified interface.
Multi-Provider Architecture ensures high availability through automatic failover across OpenAI, Anthropic, Groq, and custom AI endpoints.
π Agent Class - Main orchestrator for AI conversations
new Agent(options: AgentOptions)interface AgentOptions {
name: string; // Unique agent identifier
description: string; // Behavioral personality description
metadata?: Metadata | Metadata[]; // Initial metadata
tools?: Tool | Tool[]; // Available tools
rules?: Rule | Rule[]; // Behavioral rules
messages?: Message | Message[]; // Conversation history
contexts?: Context | Context[]; // Parent contexts for inheritance
providers?: ProviderFunction[]; // AI model provider functions
}readonly name: string- Agent identifierreadonly description: string- Agent behavior descriptionmetadata: Metadata- Reactive metadata with inheritancerules: Rule[]- Combined inherited and local rulestools: Tool[]- Deduplicated tools by name (latest wins)messages: Message[]- Full conversation historyproviders: ProviderFunction[]- Configured AI provider functions
async call(prompt: string): Promise<[Message[], boolean]>Processes user input with automatic tool execution and provider failover.
Returns: Tuple of [conversation_messages, success_status]
const agent = new Agent({
name: "Assistant",
description: "Helpful AI assistant",
providers: [
async (ctx) => {
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
return await openai.chat.completions.create({
model: "gpt-4",
messages: ctx.messages.map(m => ({ role: m.role, content: m.content }))
});
}
]
});π Context Class - Hierarchical state management
new Context(options: ContextOptions)interface ContextOptions {
context?: Context | Context[]; // Parent contexts
metadata?: Metadata | Metadata[]; // Metadata sources
rules?: Rule | Rule[]; // Behavioral rules
tools?: Tool | Tool[]; // Available tools
messages?: Message | Message[]; // Message history
}metadata: Metadata- Reactive metadata with inheritancerules: Rule[]- Combined rules from hierarchytools: Tool[]- Deduplicated tools (child overrides parent)messages: Message[]- Combined message history
const base_context = new Context({
metadata: new Metadata().set("company", "Acme Corp"),
rules: [new Rule("Maintain professional tone")]
});
const team_context = new Context({
context: base_context, // Inherits from base
metadata: new Metadata().set("team", "Engineering"),
tools: [new Tool("deploy", async (agent, env) => `Deployed to ${env}`)]
});π Metadata Class - Key-value state management with inheritance
new Metadata(...children: (Metadata | Metadata[])[])get(key: string, fallback?: string | null): string | null
has(key: string): boolean
set(key: string, value: string | null | undefined): this
delete(key: string): this
clear(): this
use(...nodes: (Metadata | Metadata[])[]): this
all(): Record<string, string>const parent_metadata = new Metadata()
.set("organization", "Acme Corp")
.set("tier", "enterprise");
const child_metadata = new Metadata(parent_metadata)
.set("department", "Sales")
.set("region", "North America");
console.log(child_metadata.get("organization")); // "Acme Corp" (inherited)
console.log(child_metadata.get("department")); // "Sales" (local)π οΈ Tool Class - Function execution system
// Simple tool
new Tool(name: string, handler: (agent: Agent, input: string) => any)
// Advanced tool
new Tool<T>(name: string, options: ToolOptions<T>)interface ToolOptions<T = Record<string, string>> {
description: string; // Tool functionality description
parameters?: T; // Parameter schema object
func: (agent: Agent, params: T) => string | Promise<string>; // Execution function
}readonly name: string- Unique tool identifierreadonly description: string- Functionality descriptionreadonly parameters: T | { input: string }- Parameter schemareadonly func: Function- Execution function
// Simple tool
const time_tool = new Tool("get_time", async (agent) => {
return new Date().toLocaleString();
});
// Advanced tool with parameters
const calculator = new Tool("calculate", {
description: "Perform mathematical calculations",
parameters: {
expression: "Mathematical expression to evaluate",
precision: "Number of decimal places (optional)"
},
func: async (agent, params) => {
const result = eval(params.expression);
const precision = parseInt(params.precision) || 2;
return result.toFixed(precision);
}
});π¨ Message Class - Type-safe conversation handling
new Message(options: MessageOptions)type MessageOptions =
| { role: "user"; content: string; }
| { role: "assistant"; content: string; }
| { role: "system"; content: string; }
| { role: "tool"; content: string; tool_call_id: string; };readonly role: MessageRole- Message rolereadonly content: string- Message contentreadonly tool_call_id?: string- Tool ID (for tool messages)readonly timestamp: Date- Creation timestampreadonly length: number- Content length
const user_msg = new Message({
role: "user",
content: "What's the weather like?"
});
const tool_msg = new Message({
role: "tool",
content: "Sunny, 22Β°C",
tool_call_id: "weather_123"
});
console.log(user_msg.timestamp); // Date object
console.log(user_msg.length); // 23π Rule Class - Behavioral constraints and guidelines
// Always active rule
new Rule(description: string)
// Conditional rule
new Rule(description: string, options: RuleOptions)interface RuleOptions {
when: (ctx: Agent) => boolean | Promise<boolean>; // Evaluation function
}readonly description: string- Rule descriptionreadonly when: Function- Evaluation function
// Always active rule
const professional_rule = new Rule("Maintain professional communication tone");
// Conditional rule
const business_hours_rule = new Rule(
"Outside business hours, inform customer of support availability",
{
when: (agent) => {
const hour = new Date().getHours();
return hour < 9 || hour > 17;
}
}
);
// Async conditional rule
const premium_rule = new Rule(
"Offer priority support features",
{
when: async (agent) => {
const tier = agent.metadata.get("customer_tier");
return tier === "premium" || tier === "enterprise";
}
}
);π RemoteTool Class - HTTP API integration
new RemoteTool(name: string, options: RemoteToolOptions)interface RemoteToolOptions {
description: string;
parameters?: Record<string, string>;
http: {
method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
url: string;
headers?: Record<string, string>;
};
}- Automatic JSON serialization of arguments
- Support for all HTTP methods
- Custom headers and authentication
- Returns response as plain text
import { RemoteTool } from '@arcaelas/agent';
const weather_api = new RemoteTool("get_weather", {
description: "Get current weather for a city",
parameters: {
city: "City name (e.g., 'London', 'Tokyo')",
units: "Temperature units: 'metric' or 'imperial'"
},
http: {
method: "GET",
url: "https://api.weather.com/v1/current",
headers: {
"Authorization": "Bearer your_api_key",
"Content-Type": "application/json"
}
}
});
// Usage in agent
const agent = new Agent({
name: "Weather_Assistant",
description: "Assistant with weather capabilities",
tools: [weather_api]
});β° TimeTool Class - Timezone-aware time utilities
new TimeTool(options?: TimeToolOptions)interface TimeToolOptions {
time_zone?: string; // IANA timezone (e.g., "America/New_York", "Europe/London")
}- Automatic system timezone detection
- IANA timezone support
- Consistent "en-US" formatting
- ISO date handling
import { TimeTool } from '@arcaelas/agent';
// System timezone
const local_time = new TimeTool();
// Specific timezones
const tokyo_time = new TimeTool({ time_zone: "Asia/Tokyo" });
const london_time = new TimeTool({ time_zone: "Europe/London" });
const ny_time = new TimeTool({ time_zone: "America/New_York" });
// Usage in agent
const global_agent = new Agent({
name: "Global_Assistant",
description: "Assistant with multi-timezone awareness",
tools: [local_time, tokyo_time, london_time, ny_time]
});
// Agent can now tell time in multiple zones
await global_agent.call("What time is it in Tokyo and London?");π§ Provider Function - AI model integration
type ProviderFunction = (
ctx: Context
) => ChatCompletionResponse | Promise<ChatCompletionResponse>;interface ChatCompletionResponse {
id: string;
object: "chat.completion";
created: number;
model: string;
choices: CompletionChoice[];
usage?: CompletionUsage;
}
interface CompletionChoice {
index: number;
message: ResponseMessage;
finish_reason: "stop" | "length" | "tool_calls" | "content_filter" | null;
}
interface ResponseMessage {
role: "assistant";
content: string | null;
tool_calls?: Array<{
id: string;
type: "function";
function: { name: string; arguments: string; };
}> | null;
}// OpenAI Provider
const openai_provider: ProviderFunction = async (ctx) => {
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
return await openai.chat.completions.create({
model: "gpt-4",
messages: ctx.messages.map(m => ({ role: m.role, content: m.content })),
tools: ctx.tools?.map(tool => ({
type: "function",
function: {
name: tool.name,
description: tool.description,
parameters: { type: "object", properties: tool.parameters }
}
}))
});
};
// Anthropic Provider
const claude_provider: ProviderFunction = async (ctx) => {
const anthropic = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const response = await anthropic.messages.create({
model: "claude-3-sonnet-20240229",
max_tokens: 4000,
messages: ctx.messages.map(m => ({
role: m.role === "system" ? "user" : m.role,
content: m.content
}))
});
// Convert to OpenAI format
return {
id: response.id,
object: "chat.completion",
created: Date.now(),
model: "claude-3-sonnet-20240229",
choices: [{
index: 0,
message: {
role: "assistant",
content: response.content[0].text
},
finish_reason: "stop"
}]
};
};
// Multi-provider agent
const resilient_agent = new Agent({
name: "Resilient_Assistant",
description: "High-availability assistant with automatic failover",
providers: [openai_provider, claude_provider]
});// Trim conversation history for production
function manage_conversation_memory(agent: Agent, max_messages: number = 100) {
if (agent.messages.length > max_messages) {
const system_msgs = agent.messages.filter(m => m.role === "system");
const recent_msgs = agent.messages.slice(-max_messages + system_msgs.length);
agent.messages = [...system_msgs, ...recent_msgs];
}
}
// Use in production environments
setInterval(() => manage_conversation_memory(production_agent), 300000);// Load balancing with health checks
const optimized_providers = [
async (ctx) => {
try {
const openai = new OpenAI({ timeout: 30000, apiKey: process.env.OPENAI_API_KEY });
return await openai.chat.completions.create({
model: "gpt-4-turbo",
messages: ctx.messages.map(m => ({ role: m.role, content: m.content }))
});
} catch (error) {
throw new Error(`OpenAI failed: ${error.message}`);
}
},
// Additional providers...
];const cached_tool = new Tool("expensive_computation", {
description: "Cached computation for better performance",
parameters: { data: "Input data for processing" },
func: async (agent, params) => {
const cache_key = `compute_${JSON.stringify(params.data)}`;
const cached_result = cache.get(cache_key);
if (cached_result) return cached_result;
const result = await heavy_computation(params.data);
cache.set(cache_key, result, 3600); // 1 hour TTL
return result;
}
});Provider Connection Errors
// Check API key validity
const test_provider = async (ctx) => {
try {
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const response = await openai.models.list();
console.log("β
API connection successful");
return response;
} catch (error) {
console.error("β API connection failed:", error.message);
throw error;
}
};Tool Execution Failures
// Debug tool execution
const debug_tool = new Tool("debug_example", {
description: "Tool with comprehensive error handling",
parameters: { input: "Test input" },
func: async (agent, params) => {
try {
console.log("Tool input:", params);
const result = await risky_operation(params.input);
console.log("Tool output:", result);
return result;
} catch (error) {
console.error("Tool error:", error);
return `Error: ${error.message}`;
}
}
});Context Inheritance Issues
// Verify context chain
function debug_context_chain(context: Context) {
console.log("Metadata:", context.metadata.all());
console.log("Rules:", context.rules.map(r => r.description));
console.log("Tools:", context.tools.map(t => t.name));
}# Verify Node.js version
node --version # Should be >= 16.0.0
# Check TypeScript installation
tsc --version # Should be >= 4.5.0
# Validate environment variables
echo $OPENAI_API_KEY | cut -c1-10 # Should show: sk-proj-...Step-by-step migration process
npm uninstall @arcaelas/agent@1.x
npm install @arcaelas/agent@latest// Before (v1.x)
const agent = new Agent({
name: "Assistant",
personality: "helpful and professional",
tools: {
calculator: calculatorFunction,
weather: weatherFunction
},
providers: [
{
base_url: "https://api.openai.com/v1",
model: "gpt-4",
api_key: process.env.OPENAI_API_KEY,
func: openaiFunction
}
]
});
// After (v2.x)
const agent = new Agent({
name: "Assistant",
description: "Helpful and professional assistant",
tools: [
new Tool("calculator", {
description: "Perform mathematical calculations",
parameters: { expression: "Math expression to evaluate" },
func: calculatorFunction
}),
new Tool("weather", {
description: "Get weather information",
parameters: { location: "City name or coordinates" },
func: weatherFunction
})
],
providers: [
async (ctx) => {
const openai = new OpenAI({
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY
});
return await openai.chat.completions.create({
model: "gpt-4",
messages: ctx.messages.map(m => ({ role: m.role, content: m.content }))
});
}
]
});// Before (v1.x)
const response = await agent.ask("Hello");
// After (v2.x)
const [messages, success] = await agent.call("Hello");
if (success) {
const response = messages[messages.length - 1].content;
}- Property Names:
personalityβdescription - Tool Format: Plain objects β
Toolclass instances - Provider Format: Config objects β Functions returning
ChatCompletionResponse - Response Format: String response β
[Message[], boolean]tuple - Import Changes: Some built-in tools moved to separate exports
We welcome contributions from the community! Here's how you can help improve @arcaelas/agent:
# Fork the repository on GitHub, then:
git clone https://github.com/your-username/agent.git
cd agent
# Install dependencies
npm install
# Create a feature branch
git checkout -b feature/your-feature-name
# Make your changes and test
npm run test
npm run build
npm run lint
# Commit and push
git commit -m "feat: add your feature description"
git push origin feature/your-feature-name
# Create a Pull Request on GitHub# Watch mode for development
npm run dev
# Run tests with coverage
npm run test:coverage
# Type checking
npm run type-check
# Linting and formatting
npm run lint
npm run format// Example test structure
import { Agent, Tool } from '../src';
describe('Agent Core Functionality', () => {
test('should create agent with tools', async () => {
const test_tool = new Tool("test", async (agent) => "test result");
const agent = new Agent({
name: "Test_Agent",
description: "Test agent",
tools: [test_tool]
});
expect(agent.tools).toHaveLength(1);
expect(agent.tools[0].name).toBe("test");
});
});- TypeScript: Strict mode enabled with comprehensive type safety
- Testing: Jest with >95% coverage requirement
- Linting: ESLint with Arcaelas configuration
- Formatting: Prettier with consistent style
- Documentation: JSDoc for all public APIs
- Clear Description: Explain what your PR does and why
- Tests: Include tests for new functionality
- Documentation: Update README and JSDoc as needed
- Breaking Changes: Clearly mark and document any breaking changes
- Performance: Consider performance implications of changes
Custom License with Commercial Flexibility
This project is licensed under a custom license designed for maximum flexibility. See LICENSE file for complete details.
| Use Case | Allowed | Requirements |
|---|---|---|
| Personal Projects | β Free | None |
| Educational Use | β Free | None |
| Open Source Projects | β Free | None |
| Commercial Applications | β Allowed | Attribution required |
| SaaS/Cloud Services | β Allowed | Attribution + notification |
| Enterprise Solutions | β Allowed | Contact for enterprise license |
- β No Redistribution: Cannot redistribute as competing library
- β No Trademark Use: Cannot use "Arcaelas" trademark without permission
- β No Warranty: Software provided "as-is" without warranties
For enterprise use, custom licensing, or removing attribution requirements: π§ Contact: licensing@arcaelas.com
| Platform | Purpose | Link |
|---|---|---|
| Discord | Real-time chat, questions, discussions | Join Community |
| GitHub Issues | Bug reports, feature requests | Open Issue |
| GitHub Discussions | Architecture discussions, ideas | Join Discussion |
| Documentation | Comprehensive guides and tutorials | docs.arcaelas.com |
| Stack Overflow | Technical Q&A | Tag: arcaelas-agent |
Professional support for production deployments and enterprise use cases.
| Tier | Response Time | Features | Price |
|---|---|---|---|
| Community | Best effort | Discord, GitHub Issues | Free |
| Professional | 24-48 hours | Email support, architecture review | Contact us |
| Enterprise | 4-8 hours | Phone support, custom development | Contact us |
| Mission Critical | 1-2 hours | Dedicated engineer, SLA guarantees | Contact us |
- π οΈ Custom Development: Tailored features for your specific needs
- ποΈ Architecture Review: Expert review of your agent implementation
- π Training: On-site or remote training for your development team
- π§ Integration Support: Help integrating with your existing systems
- π Priority Support: Direct access to our engineering team
Contact: enterprise@arcaelas.com
Help others and improve the ecosystem:
- Answer Questions: Help other developers on Discord or GitHub
- Share Examples: Submit real-world usage examples
- Write Tutorials: Create blog posts or tutorials
- Report Issues: Help identify and fix bugs
- Suggest Features: Propose new functionality
- β¨ New: Enhanced provider function typing with better error handling
- π§ Improved: Context inheritance performance optimization
- π Documentation: Complete README restructure with examples
- π Fixed: Tool parameter validation edge cases
- π Security: Enhanced input sanitization for tools
- β¨ New: TimeTool with comprehensive timezone support
- π§ Improved: RemoteTool error handling and retry logic
- π Documentation: Expanded API reference with examples
- π Fixed: Context metadata inheritance issues
- π New: Multi-provider failover system
- β‘ Performance: Optimized memory usage for long conversations
- π Security: Enhanced tool execution sandboxing
- π Monitoring: Better error reporting and logging
- π Plugin System: Extensible plugin architecture
- π Analytics: Built-in usage analytics and monitoring
- π― Smart Routing: Intelligent provider selection based on request type
- π‘οΈ Security: Advanced security features and audit logging
- π Multi-Modal: Support for images, audio, and video
- π§ Memory: Long-term memory and knowledge persistence
- π Streaming: Real-time streaming responses
- π± Mobile: React Native and mobile platform support
Start creating intelligent AI agents today with @arcaelas/agent
π Star us on GitHub | π¦ Follow @ArcaelasHQ | π§ hello@arcaelas.com
Built with β€οΈ by Arcaelas Insiders
Empowering developers to create the next generation of AI experiences