@moltium/core 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1545,6 +1545,22 @@ var import_express2 = __toESM(require("express"), 1);
1545
1545
  var import_express = require("express");
1546
1546
  function createRoutes(agent) {
1547
1547
  const router = (0, import_express.Router)();
1548
+ router.get("/", (_req, res) => {
1549
+ res.json({
1550
+ agent: agent.name,
1551
+ type: agent.config.type || "general",
1552
+ state: agent.getState(),
1553
+ endpoints: {
1554
+ "GET /": "This overview",
1555
+ "GET /health": "Health check",
1556
+ "GET /status": "Agent status and uptime",
1557
+ "POST /message": "Send a message to the agent (body: { message })",
1558
+ "POST /action": "Trigger a specific action (body: { action, parameters })",
1559
+ "GET /config": "View agent configuration (redacted)",
1560
+ "POST /shutdown": "Graceful shutdown"
1561
+ }
1562
+ });
1563
+ });
1548
1564
  router.get("/health", (_req, res) => {
1549
1565
  res.json({ status: "ok", timestamp: (/* @__PURE__ */ new Date()).toISOString() });
1550
1566
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/logger.ts","../src/agent/scheduler.ts","../src/actions/registry.ts","../src/actions/ActionHandler.ts","../src/actions/built-in/social.ts","../src/actions/built-in/index.ts","../src/llm/prompt.ts","../src/actions/interpreter.ts","../src/memory/Memory.ts","../src/memory/shortterm.ts","../src/llm/anthropic.ts","../src/llm/Provider.ts","../src/llm/openai.ts","../src/social/moltbook.ts","../src/social/SocialAdapter.ts","../src/social/twitter.ts","../src/agent/Agent.ts","../src/config/ConfigLoader.ts","../src/config/MarkdownParser.ts","../src/config/types.ts","../src/config/validator.ts","../src/memory/longterm.ts","../src/server/app.ts","../src/server/routes.ts","../src/server/middleware.ts"],"sourcesContent":["// ── Agent ──\nexport { Agent } from './agent/Agent.js';\nexport type { AgentState } from './agent/Agent.js';\nexport type { LifecycleHooks, LifecycleEvent } from './agent/lifecycle.js';\nexport { Scheduler } from './agent/scheduler.js';\nexport type { ScheduledJob } from './agent/scheduler.js';\n\n// ── Config ──\nexport { ConfigLoader } from './config/ConfigLoader.js';\nexport type { ConfigType } from './config/ConfigLoader.js';\nexport { MarkdownParser } from './config/MarkdownParser.js';\nexport { validateConfig } from './config/validator.js';\nexport type {\n AgentConfig,\n Action,\n ActionContext,\n ActionResult,\n Decision,\n Experience,\n MoltbookConfig,\n TwitterConfig,\n SocialPlatformConfig,\n SocialConfig,\n BehaviorTrigger,\n RedisConfig,\n PostgresConfig,\n Plugin,\n DeploymentConfig,\n DeploymentResult,\n DeploymentStatus,\n CustomDeploymentConfig,\n CustomDockerConfig,\n CustomSSHConfig,\n CustomCLIConfig,\n CustomAPIConfig,\n PostResult,\n ReplyResult,\n Mention,\n Profile,\n} from './config/types.js';\n\n// ── LLM ──\nexport { LLMProvider } from './llm/Provider.js';\nexport type { GenerateOptions, Message, StructuredSchema } from './llm/Provider.js';\nexport { AnthropicProvider } from './llm/anthropic.js';\nexport { OpenAIProvider } from './llm/openai.js';\nexport { buildSystemPrompt, buildDecisionPrompt, buildSkillPrompt } from './llm/prompt.js';\n\n// ── Memory ──\nexport { Memory } from './memory/Memory.js';\nexport { ShortTermMemory } from './memory/shortterm.js';\nexport { LongTermMemory } from './memory/longterm.js';\n\n// ── Social ──\nexport { SocialAdapter } from './social/SocialAdapter.js';\nexport { MoltbookAdapter } from './social/moltbook.js';\nexport { TwitterAdapter } from './social/twitter.js';\nexport type { FeedOptions, TimelineOptions, Post } from './social/types.js';\n\n// ── Actions ──\nexport { ActionRegistry } from './actions/registry.js';\nexport { ActionHandler } from './actions/ActionHandler.js';\nexport { createMarkdownAction } from './actions/interpreter.js';\nexport { builtInActions } from './actions/built-in/index.js';\n\n// ── Server ──\nexport { createApp, startServer } from './server/app.js';\nexport { createRoutes } from './server/routes.js';\n\n// ── Utilities ──\nexport { createLogger } from './logger.js';\n","import winston from 'winston';\n\nconst logLevel = process.env.LOG_LEVEL || 'info';\n\nexport function createLogger(label: string): winston.Logger {\n return winston.createLogger({\n level: logLevel,\n format: winston.format.combine(\n winston.format.timestamp(),\n winston.format.label({ label }),\n winston.format.printf(({ timestamp, level, label, message, ...meta }) => {\n const metaStr = Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';\n return `${timestamp} [${label}] ${level}: ${message}${metaStr}`;\n }),\n ),\n transports: [new winston.transports.Console()],\n });\n}\n","import { createLogger } from '../logger.js';\n\nconst logger = createLogger('Scheduler');\n\nexport interface ScheduledJob {\n name: string;\n intervalMs: number;\n handler: () => Promise<void>;\n lastRun?: number;\n}\n\nexport class Scheduler {\n private jobs: ScheduledJob[] = [];\n private timers: Map<string, ReturnType<typeof setInterval>> = new Map();\n private running = false;\n\n addJob(job: ScheduledJob): void {\n this.jobs.push(job);\n logger.debug(`Job registered: ${job.name} (every ${job.intervalMs}ms)`);\n }\n\n removeJob(name: string): void {\n this.jobs = this.jobs.filter((j) => j.name !== name);\n const timer = this.timers.get(name);\n if (timer) {\n clearInterval(timer);\n this.timers.delete(name);\n }\n }\n\n start(): void {\n if (this.running) return;\n this.running = true;\n\n for (const job of this.jobs) {\n const timer = setInterval(async () => {\n try {\n logger.debug(`Running job: ${job.name}`);\n await job.handler();\n job.lastRun = Date.now();\n } catch (error) {\n logger.error(`Job failed: ${job.name}`, {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }, job.intervalMs);\n\n this.timers.set(job.name, timer);\n }\n\n logger.info(`Scheduler started with ${this.jobs.length} jobs`);\n }\n\n stop(): void {\n this.running = false;\n for (const [name, timer] of this.timers) {\n clearInterval(timer);\n }\n this.timers.clear();\n logger.info('Scheduler stopped');\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getJobs(): ScheduledJob[] {\n return [...this.jobs];\n }\n}\n","\nimport type { Action } from '../config/types.js';\n\nexport class ActionRegistry {\n private actions = new Map<string, Action>();\n\n register(action: Action): void {\n if (this.actions.has(action.name)) {\n throw new Error(`Action \"${action.name}\" is already registered`);\n }\n this.actions.set(action.name, action);\n }\n\n unregister(name: string): void {\n this.actions.delete(name);\n }\n\n get(name: string): Action | undefined {\n return this.actions.get(name);\n }\n\n has(name: string): boolean {\n return this.actions.has(name);\n }\n\n list(): Action[] {\n return Array.from(this.actions.values());\n }\n\n listNames(): string[] {\n return Array.from(this.actions.keys());\n }\n}\n","import { ActionRegistry } from './registry.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('ActionHandler');\n\nexport class ActionExecutionError extends Error {\n constructor(\n message: string,\n public actionName: string,\n public recoverable: boolean = true,\n ) {\n super(message);\n this.name = 'ActionExecutionError';\n }\n}\n\nexport class ActionHandler {\n private registry: ActionRegistry;\n\n constructor(registry: ActionRegistry) {\n this.registry = registry;\n }\n\n async execute(actionName: string, context: ActionContext): Promise<ActionResult> {\n const action = this.registry.get(actionName);\n\n if (!action) {\n throw new ActionExecutionError(\n `Action \"${actionName}\" not found in registry`,\n actionName,\n false,\n );\n }\n\n logger.info(`Executing action: ${actionName}`);\n\n try {\n const result = await action.execute(context);\n logger.info(`Action completed: ${actionName}`, { success: result.success });\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Action failed: ${actionName}`, { error: message });\n throw new ActionExecutionError(\n `Action \"${actionName}\" failed: ${message}`,\n actionName,\n );\n }\n }\n\n getAvailableActions(): Array<{ name: string; description: string }> {\n return this.registry.list().map((action) => ({\n name: action.name,\n description: action.description,\n }));\n }\n}\n","import type { Action, ActionContext, ActionResult } from '../../config/types.js';\n\nexport const postSocialUpdateAction: Action = {\n name: 'post_social_update',\n description: 'Post a status update to configured social platforms',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { content, platforms } = context.parameters as {\n content: string;\n platforms?: string[];\n };\n\n if (!content) {\n return { success: false, error: 'Missing required parameter: content' };\n }\n\n const results: Record<string, unknown> = {};\n const socialAdapters = context.agent?.socialAdapters || {};\n const targetPlatforms = platforms || Object.keys(socialAdapters);\n\n for (const platform of targetPlatforms) {\n const adapter = socialAdapters[platform];\n if (!adapter) continue;\n\n try {\n const result = await adapter.post(content);\n results[platform] = result;\n } catch (error) {\n results[platform] = {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return { success: true, data: results };\n },\n};\n\nexport const respondToMentionAction: Action = {\n name: 'respond_to_mention',\n description: 'Respond to a social platform mention',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { mentionId, content, platform } = context.parameters as {\n mentionId: string;\n content: string;\n platform: string;\n };\n\n if (!mentionId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: mentionId, content, platform' };\n }\n\n const adapter = context.agent?.socialAdapters?.[platform];\n if (!adapter) {\n return { success: false, error: `No adapter configured for platform: ${platform}` };\n }\n\n const result = await adapter.reply(mentionId, content);\n return { success: true, data: result };\n },\n};\n\nexport const dmUserAction: Action = {\n name: 'dm_user',\n description: 'Send a direct message to a user on a social platform',\n async execute(context: ActionContext): Promise<ActionResult> {\n // DM functionality depends on platform-specific APIs\n // This is a placeholder for the generic interface\n const { userId, content, platform } = context.parameters as {\n userId: string;\n content: string;\n platform: string;\n };\n\n if (!userId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: userId, content, platform' };\n }\n\n return {\n success: false,\n error: `DM not yet implemented for platform: ${platform}`,\n };\n },\n};\n\nexport const scheduleTaskAction: Action = {\n name: 'schedule_task',\n description: 'Schedule a task for later execution',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { taskName, delay, parameters } = context.parameters as {\n taskName: string;\n delay: number;\n parameters?: Record<string, unknown>;\n };\n\n if (!taskName || delay === undefined) {\n return { success: false, error: 'Missing required parameters: taskName, delay' };\n }\n\n // Store scheduled task in memory for the scheduler to pick up\n const scheduledTask = {\n taskName,\n executeAt: Date.now() + delay * 1000,\n parameters: parameters || {},\n };\n\n await context.memory.store(`scheduled:${taskName}:${Date.now()}`, scheduledTask);\n\n return { success: true, data: scheduledTask };\n },\n};\n","export {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nimport type { Action } from '../../config/types.js';\nimport {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nexport const builtInActions: Action[] = [\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n];\n","import type { AgentConfig, Action } from '../config/types.js';\n\nexport function buildSystemPrompt(config: AgentConfig): string {\n const parts: string[] = [];\n\n parts.push(`You are ${config.name}, an autonomous AI agent.`);\n\n if (config.type) {\n parts.push(`Your role: ${config.type}.`);\n }\n\n if (config.personality.bio) {\n parts.push(`\\nBackground:\\n${config.personality.bio}`);\n }\n\n if (config.personality.traits.length > 0) {\n parts.push(`\\nPersonality traits: ${config.personality.traits.join(', ')}`);\n }\n\n if (config.llm.systemPrompt) {\n parts.push(`\\n${config.llm.systemPrompt}`);\n }\n\n return parts.join('\\n');\n}\n\nexport function buildDecisionPrompt(\n context: Record<string, unknown>,\n availableActions: Array<{ name: string; description: string }>,\n): string {\n const actionList = availableActions\n .map((a) => `- ${a.name}: ${a.description}`)\n .join('\\n');\n\n return `Given the current context, decide what action to take next.\n\nAvailable actions:\n${actionList}\n\nCurrent context:\n${JSON.stringify(context, null, 2)}\n\nRespond with a JSON object:\n{\n \"action\": \"<action_name>\",\n \"reasoning\": \"<brief explanation>\",\n \"parameters\": { <any parameters for the action> }\n}`;\n}\n\nexport function buildSkillPrompt(skillName: string, skillDescription: string, parameters: Record<string, unknown>): string {\n return `Execute the following skill: ${skillName}\n\nInstructions:\n${skillDescription}\n\nParameters:\n${JSON.stringify(parameters, null, 2)}\n\nExecute these instructions step by step and return the result as a JSON object:\n{\n \"success\": true/false,\n \"data\": { <result data> },\n \"reasoning\": \"<what you did and why>\"\n}`;\n}\n","import type { LLMProvider } from '../llm/Provider.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { buildSkillPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('MarkdownInterpreter');\n\nexport class LLMInterpretationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'LLMInterpretationError';\n }\n}\n\n/**\n * Creates an Action from a markdown skill description.\n * The skill's behavior is interpreted by the LLM at runtime.\n */\nexport function createMarkdownAction(\n name: string,\n description: string,\n llmProvider: LLMProvider,\n): Action {\n return {\n name,\n description,\n execute: async (context: ActionContext): Promise<ActionResult> => {\n logger.info(`Interpreting markdown skill: ${name}`);\n\n const prompt = buildSkillPrompt(name, description, context.parameters);\n\n try {\n const response = await llmProvider.generateText(prompt, {\n temperature: 0.7,\n maxTokens: 2048,\n });\n\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new LLMInterpretationError(\n `LLM did not return valid JSON for skill \"${name}\"`,\n );\n }\n\n const result = JSON.parse(jsonMatch[0]);\n return {\n success: result.success ?? true,\n data: result.data || result,\n };\n } catch (error) {\n if (error instanceof LLMInterpretationError) throw error;\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Markdown skill interpretation failed: ${name}`, { error: message });\n throw new LLMInterpretationError(\n `Failed to interpret skill \"${name}\": ${message}`,\n );\n }\n },\n };\n}\n","import type { Experience } from '../config/types.js';\n\nexport abstract class Memory {\n // Short-term (current session)\n abstract remember(key: string, value: unknown, ttl?: number): Promise<void>;\n abstract recall(key: string): Promise<unknown>;\n abstract forget(key: string): Promise<void>;\n\n // Long-term (persistent)\n abstract store(key: string, value: unknown): Promise<void>;\n abstract retrieve(key: string): Promise<unknown>;\n abstract delete(key: string): Promise<void>;\n\n // Semantic memory\n abstract addExperience(experience: Experience): Promise<void>;\n abstract queryExperiences(query: string, limit?: number): Promise<Experience[]>;\n\n // Lifecycle\n abstract clear(): Promise<void>;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\n\ninterface CacheEntry {\n value: unknown;\n expiresAt?: number;\n}\n\nexport class ShortTermMemory extends Memory {\n private cache = new Map<string, CacheEntry>();\n private store_ = new Map<string, unknown>();\n private experiences: Experience[] = [];\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n this.cache.set(key, {\n value,\n expiresAt: ttl ? Date.now() + ttl * 1000 : undefined,\n });\n }\n\n async recall(key: string): Promise<unknown> {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n this.cache.delete(key);\n return undefined;\n }\n\n return entry.value;\n }\n\n async forget(key: string): Promise<void> {\n this.cache.delete(key);\n }\n\n async store(key: string, value: unknown): Promise<void> {\n this.store_.set(key, value);\n }\n\n async retrieve(key: string): Promise<unknown> {\n return this.store_.get(key);\n }\n\n async delete(key: string): Promise<void> {\n this.store_.delete(key);\n }\n\n async addExperience(experience: Experience): Promise<void> {\n this.experiences.push(experience);\n }\n\n async queryExperiences(query: string, limit: number = 10): Promise<Experience[]> {\n // Simple keyword matching — will be replaced with vector search in longterm\n const queryLower = query.toLowerCase();\n return this.experiences\n .filter(\n (exp) =>\n exp.type.toLowerCase().includes(queryLower) ||\n exp.action.toLowerCase().includes(queryLower),\n )\n .slice(-limit);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n this.store_.clear();\n this.experiences = [];\n }\n}\n","import Anthropic from '@anthropic-ai/sdk';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class AnthropicProvider extends LLMProvider {\n name = 'anthropic';\n private client: Anthropic;\n private model: string;\n\n constructor(apiKey: string, model: string = 'claude-sonnet-4-20250514') {\n super();\n this.client = new Anthropic({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop_sequences: options.stopSequences } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return textBlock ? textBlock.text : '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const systemMessages = messages.filter((m) => m.role === 'system');\n const chatMessages = messages\n .filter((m) => m.role !== 'system')\n .map((m) => ({ role: m.role as 'user' | 'assistant', content: m.content }));\n\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: chatMessages,\n ...(systemMessages.length > 0 ? { system: systemMessages.map((m) => m.content).join('\\n') } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return { role: 'assistant', content: textBlock ? textBlock.text : '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const stream = this.client.messages.stream({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const event of stream) {\n if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {\n yield event.delta.text;\n }\n }\n }\n}\n","export interface GenerateOptions {\n temperature?: number;\n maxTokens?: number;\n stopSequences?: string[];\n systemPrompt?: string;\n}\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant';\n content: string;\n}\n\nexport interface StructuredSchema {\n type: string;\n properties?: Record<string, unknown>;\n required?: string[];\n}\n\nexport abstract class LLMProvider {\n abstract name: string;\n\n abstract generateText(prompt: string, options?: GenerateOptions): Promise<string>;\n\n abstract generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T>;\n\n abstract chat(messages: Message[], options?: GenerateOptions): Promise<Message>;\n\n abstract streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string>;\n}\n","import OpenAI from 'openai';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class OpenAIProvider extends LLMProvider {\n name = 'openai';\n private client: OpenAI;\n private model: string;\n\n constructor(apiKey: string, model: string = 'gpt-4o') {\n super();\n this.client = new OpenAI({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop: options.stopSequences } : {}),\n });\n\n return response.choices[0]?.message?.content || '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const openaiMessages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages: openaiMessages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n return { role: 'assistant', content: response.choices[0]?.message?.content || '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const stream = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n stream: true,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content;\n if (delta) yield delta;\n }\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { MoltbookConfig } from '../config/types.js';\n\nexport class MoltbookAdapter extends SocialAdapter {\n platform = 'moltbook';\n private client: AxiosInstance;\n private config: MoltbookConfig;\n\n constructor(config: MoltbookConfig) {\n super();\n this.config = config;\n this.client = axios.create({\n baseURL: config.baseUrl || 'https://api.moltbook.com',\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n }\n\n async connect(): Promise<void> {\n // Verify API key is valid\n await this.client.get('/me');\n }\n\n async disconnect(): Promise<void> {\n // No persistent connection to close\n }\n\n async post(content: string): Promise<PostResult> {\n const response = await this.client.post('/posts', { content });\n return {\n id: response.data.id,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async reply(postId: string, content: string): Promise<ReplyResult> {\n const response = await this.client.post(`/posts/${postId}/replies`, { content });\n return {\n id: response.data.id,\n parentId: postId,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async like(postId: string): Promise<void> {\n await this.client.post(`/posts/${postId}/like`);\n }\n\n async follow(userId: string): Promise<void> {\n await this.client.post(`/users/${userId}/follow`);\n }\n\n async getMentions(): Promise<Mention[]> {\n const response = await this.client.get('/mentions');\n return response.data.mentions.map((m: any) => ({\n id: m.id,\n authorId: m.author_id,\n authorName: m.author_name,\n content: m.content,\n timestamp: new Date(m.created_at),\n platform: 'moltbook',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const params: Record<string, unknown> = {};\n if (options?.limit) params.limit = options.limit;\n if (options?.cursor) params.cursor = options.cursor;\n if (options?.since) params.since = options.since.toISOString();\n\n const response = await this.client.get('/feed', { params });\n return response.data.posts.map((p: any) => ({\n id: p.id,\n authorId: p.author_id,\n authorName: p.author_name,\n content: p.content,\n timestamp: new Date(p.created_at),\n platform: 'moltbook',\n likes: p.likes_count,\n replies: p.replies_count,\n reposts: p.reposts_count,\n mentions: p.mentions || [],\n url: p.url,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const response = await this.client.get(`/users/${userId}`);\n return {\n id: response.data.id,\n name: response.data.name,\n bio: response.data.bio,\n followers: response.data.followers_count,\n following: response.data.following_count,\n platform: 'moltbook',\n };\n }\n}\n","import type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\n\nexport abstract class SocialAdapter {\n abstract platform: string;\n\n abstract post(content: string): Promise<PostResult>;\n abstract reply(id: string, content: string): Promise<ReplyResult>;\n abstract like(id: string): Promise<void>;\n abstract follow(userId: string): Promise<void>;\n abstract getMentions(): Promise<Mention[]>;\n abstract getFeed(options?: FeedOptions): Promise<Post[]>;\n abstract getProfile(userId: string): Promise<Profile>;\n\n abstract connect(): Promise<void>;\n abstract disconnect(): Promise<void>;\n}\n","import { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { TwitterConfig } from '../config/types.js';\n\nexport class TwitterAdapter extends SocialAdapter {\n platform = 'twitter';\n private config: TwitterConfig;\n private client: any; // twitter-api-v2 client\n\n constructor(config: TwitterConfig) {\n super();\n this.config = config;\n }\n\n async connect(): Promise<void> {\n // Dynamic import to keep twitter-api-v2 optional\n const { TwitterApi } = await import('twitter-api-v2');\n this.client = new TwitterApi({\n appKey: this.config.credentials.apiKey,\n appSecret: this.config.credentials.apiSecret,\n accessToken: this.config.credentials.accessToken,\n accessSecret: this.config.credentials.accessSecret,\n });\n\n // Verify credentials\n await this.client.v2.me();\n }\n\n async disconnect(): Promise<void> {\n this.client = null;\n }\n\n async post(content: string): Promise<PostResult> {\n const tweet = await this.client.v2.tweet(content);\n return {\n id: tweet.data.id,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async reply(tweetId: string, content: string): Promise<ReplyResult> {\n const tweet = await this.client.v2.reply(content, tweetId);\n return {\n id: tweet.data.id,\n parentId: tweetId,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async like(tweetId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.like(me.data.id, tweetId);\n }\n\n async follow(userId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.follow(me.data.id, userId);\n }\n\n async getMentions(): Promise<Mention[]> {\n const me = await this.client.v2.me();\n const mentions = await this.client.v2.userMentionTimeline(me.data.id, {\n max_results: 20,\n expansions: ['author_id'],\n 'tweet.fields': ['created_at'],\n 'user.fields': ['name', 'username'],\n });\n\n const users = new Map<string, string>();\n if (mentions.includes?.users) {\n for (const user of mentions.includes.users) {\n users.set(user.id, user.username);\n }\n }\n\n return (mentions.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: tweet.author_id,\n authorName: users.get(tweet.author_id) || 'unknown',\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const me = await this.client.v2.me();\n const timeline = await this.client.v2.userTimeline(me.data.id, {\n max_results: options?.limit || 20,\n 'tweet.fields': ['created_at', 'public_metrics'],\n });\n\n return (timeline.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: me.data.id,\n authorName: me.data.username,\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n likes: tweet.public_metrics?.like_count,\n replies: tweet.public_metrics?.reply_count,\n reposts: tweet.public_metrics?.retweet_count,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const user = await this.client.v2.user(userId, {\n 'user.fields': ['description', 'public_metrics'],\n });\n\n return {\n id: user.data.id,\n name: user.data.name,\n bio: user.data.description,\n followers: user.data.public_metrics?.followers_count,\n following: user.data.public_metrics?.following_count,\n platform: 'twitter',\n };\n }\n}\n","import type { AgentConfig, Decision, Experience, ActionResult, Action } from '../config/types.js';\nimport type { LifecycleHooks } from './lifecycle.js';\nimport { Scheduler } from './scheduler.js';\nimport { ActionRegistry } from '../actions/registry.js';\nimport { ActionHandler } from '../actions/ActionHandler.js';\nimport { builtInActions } from '../actions/built-in/index.js';\nimport { createMarkdownAction } from '../actions/interpreter.js';\nimport { ShortTermMemory } from '../memory/shortterm.js';\nimport type { Memory } from '../memory/Memory.js';\nimport type { LLMProvider } from '../llm/Provider.js';\nimport { AnthropicProvider } from '../llm/anthropic.js';\nimport { OpenAIProvider } from '../llm/openai.js';\nimport { SocialAdapter } from '../social/SocialAdapter.js';\nimport { MoltbookAdapter } from '../social/moltbook.js';\nimport { TwitterAdapter } from '../social/twitter.js';\nimport { buildSystemPrompt, buildDecisionPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Agent');\n\nexport type AgentState = 'idle' | 'initializing' | 'running' | 'stopping' | 'stopped' | 'error';\n\nexport class Agent {\n readonly config: AgentConfig;\n\n private state: AgentState = 'idle';\n private llm!: LLMProvider;\n private memory_: Memory;\n private scheduler: Scheduler;\n private actionRegistry: ActionRegistry;\n private actionHandler: ActionHandler;\n private hooks: LifecycleHooks = {};\n private tickTimer?: ReturnType<typeof setInterval>;\n private systemPrompt: string;\n\n socialAdapters: Record<string, SocialAdapter> = {};\n\n constructor(config: AgentConfig, hooks?: LifecycleHooks) {\n this.config = config;\n this.hooks = hooks || {};\n this.memory_ = new ShortTermMemory();\n this.scheduler = new Scheduler();\n this.actionRegistry = new ActionRegistry();\n this.actionHandler = new ActionHandler(this.actionRegistry);\n this.systemPrompt = buildSystemPrompt(config);\n }\n\n get name(): string {\n return this.config.name;\n }\n\n getState(): AgentState {\n return this.state;\n }\n\n getMemory(): Memory {\n return this.memory_;\n }\n\n getLLM(): LLMProvider {\n return this.llm;\n }\n\n getActionRegistry(): ActionRegistry {\n return this.actionRegistry;\n }\n\n // ── Configuration Methods ──\n\n setSystemPrompt(prompt: string): void {\n this.systemPrompt = prompt;\n }\n\n appendSystemPrompt(additional: string): void {\n this.systemPrompt += '\\n\\n' + additional;\n }\n\n getSystemPrompt(): string {\n return this.systemPrompt;\n }\n\n setHooks(hooks: LifecycleHooks): void {\n this.hooks = hooks;\n }\n\n mergeHooks(hooks: Partial<LifecycleHooks>): void {\n this.hooks = { ...this.hooks, ...hooks };\n }\n\n setMemory(memory: Memory): void {\n this.memory_ = memory;\n }\n\n async preloadMemory(entries: Record<string, unknown>): Promise<void> {\n for (const [key, value] of Object.entries(entries)) {\n await this.memory_.remember(key, value);\n }\n }\n\n registerAction(action: Action): void {\n this.actionRegistry.register(action);\n }\n\n // ── Lifecycle ──\n\n async init(): Promise<void> {\n this.state = 'initializing';\n logger.info(`Initializing agent: ${this.config.name}`);\n\n this.initLLM();\n this.registerActions();\n await this.initSocialAdapters();\n\n if (this.hooks.onInit) {\n await this.hooks.onInit(this);\n }\n\n logger.info(`Agent initialized: ${this.config.name}`);\n }\n\n async start(): Promise<void> {\n if (this.state !== 'initializing' && this.state !== 'idle') {\n throw new Error(`Cannot start agent in state: ${this.state}`);\n }\n\n if (this.state === 'idle') {\n await this.init();\n }\n\n this.state = 'running';\n logger.info(`Agent started: ${this.config.name}`);\n\n if (this.hooks.onStart) {\n await this.hooks.onStart(this);\n }\n\n this.scheduler.start();\n\n if (this.config.behaviors.autonomous) {\n this.startAutonomousLoop();\n }\n }\n\n async stop(): Promise<void> {\n this.state = 'stopping';\n logger.info(`Stopping agent: ${this.config.name}`);\n\n if (this.tickTimer) {\n clearInterval(this.tickTimer);\n this.tickTimer = undefined;\n }\n\n this.scheduler.stop();\n\n for (const adapter of Object.values(this.socialAdapters)) {\n await adapter.disconnect();\n }\n\n if (this.hooks.onShutdown) {\n await this.hooks.onShutdown(this);\n }\n\n this.state = 'stopped';\n logger.info(`Agent stopped: ${this.config.name}`);\n }\n\n // ── Decision Loop ──\n\n async think(): Promise<Decision> {\n const context = await this.gatherContext();\n const availableActions = this.actionHandler.getAvailableActions();\n\n const prompt = buildDecisionPrompt(context, availableActions);\n\n const decision = await this.llm.generateStructured<Decision>(\n prompt,\n {\n type: 'object',\n properties: {\n action: { type: 'string' },\n reasoning: { type: 'string' },\n parameters: { type: 'object' },\n },\n required: ['action', 'reasoning', 'parameters'],\n },\n { systemPrompt: this.systemPrompt, temperature: this.config.llm.temperature },\n );\n\n logger.debug(`Decision: ${decision.action} — ${decision.reasoning}`);\n return decision;\n }\n\n async act(actionName: string, parameters: Record<string, unknown> = {}): Promise<ActionResult> {\n const context = {\n agent: this,\n memory: this.memory_,\n llm: this.llm,\n parameters,\n };\n\n return this.actionHandler.execute(actionName, context);\n }\n\n async learn(experience: Experience): Promise<void> {\n await this.memory_.addExperience(experience);\n }\n\n async tick(): Promise<void> {\n if (this.state !== 'running') return;\n\n try {\n if (this.hooks.onTick) {\n await this.hooks.onTick(this);\n }\n\n if (this.isSleeping()) return;\n\n const decision = await this.think();\n const result = await this.act(decision.action, decision.parameters);\n\n await this.learn({\n type: 'action',\n action: decision.action,\n result,\n timestamp: new Date(),\n context: { reasoning: decision.reasoning },\n });\n\n if (this.config.webhooks?.onAction) {\n await this.fireWebhook('onAction', decision, result);\n }\n } catch (error) {\n logger.error(`Tick error: ${error instanceof Error ? error.message : error}`);\n if (this.hooks.onError && error instanceof Error) {\n await this.hooks.onError(error, this);\n }\n }\n }\n\n // ── Markdown skill registration ──\n\n registerMarkdownSkills(skills: Array<{ name: string; description: string }>): void {\n for (const skill of skills) {\n const action = createMarkdownAction(skill.name, skill.description, this.llm);\n this.actionRegistry.register(action);\n }\n }\n\n // ── Internal ──\n\n private initLLM(): void {\n const { provider, apiKey, model } = this.config.llm;\n\n switch (provider) {\n case 'anthropic':\n this.llm = new AnthropicProvider(apiKey, model);\n break;\n case 'openai':\n this.llm = new OpenAIProvider(apiKey, model);\n break;\n default:\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n }\n\n private registerActions(): void {\n // Register built-in actions that the config references\n for (const action of builtInActions) {\n if (this.config.actions.includes(action.name)) {\n this.actionRegistry.register(action);\n }\n }\n\n // Register custom actions (code-based)\n if (this.config.customActions) {\n for (const action of this.config.customActions) {\n this.actionRegistry.register(action);\n }\n }\n }\n\n private async initSocialAdapters(): Promise<void> {\n const { social } = this.config;\n\n if (social.moltbook?.enabled) {\n const adapter = new MoltbookAdapter(social.moltbook);\n try {\n await adapter.connect();\n this.socialAdapters['moltbook'] = adapter;\n logger.info('Moltbook adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Moltbook adapter: ${error}`);\n }\n }\n\n if (social.twitter?.enabled) {\n const adapter = new TwitterAdapter(social.twitter);\n try {\n await adapter.connect();\n this.socialAdapters['twitter'] = adapter;\n logger.info('Twitter adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Twitter adapter: ${error}`);\n }\n }\n }\n\n private startAutonomousLoop(): void {\n const actionsPerHour = typeof this.config.behaviors.actionsPerHour === 'function'\n ? this.config.behaviors.actionsPerHour({})\n : this.config.behaviors.actionsPerHour || 5;\n\n const intervalMs = Math.floor(3600000 / actionsPerHour);\n\n this.tickTimer = setInterval(() => this.tick(), intervalMs);\n logger.info(`Autonomous loop started: ~${actionsPerHour} actions/hour (every ${intervalMs}ms)`);\n }\n\n private isSleeping(): boolean {\n const schedule = this.config.behaviors.sleepSchedule;\n if (!schedule) return false;\n\n const now = new Date();\n const hour = now.getHours();\n\n if (schedule.start > schedule.end) {\n // Wraps midnight (e.g., 22-6)\n return hour >= schedule.start || hour < schedule.end;\n }\n return hour >= schedule.start && hour < schedule.end;\n }\n\n private async gatherContext(): Promise<Record<string, unknown>> {\n return {\n agentName: this.config.name,\n agentType: this.config.type,\n currentTime: new Date().toISOString(),\n state: this.state,\n personality: this.config.personality.traits,\n };\n }\n\n private async fireWebhook(event: string, ...args: unknown[]): Promise<void> {\n try {\n const hook = this.config.webhooks?.[event as keyof typeof this.config.webhooks];\n if (typeof hook === 'function') {\n await (hook as Function)(...args);\n } else if (typeof hook === 'string') {\n const { default: axios } = await import('axios');\n await axios.post(hook, { event, data: args });\n }\n } catch (error) {\n logger.error(`Webhook ${event} failed: ${error}`);\n }\n }\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { MarkdownParser } from './MarkdownParser.js';\nimport { validateConfig } from './validator.js';\nimport type { AgentConfig } from './types.js';\n\nexport type ConfigType = 'code' | 'markdown';\n\nexport class ConfigurationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ConfigurationError';\n }\n}\n\nexport class ConfigLoader {\n private markdownParser = new MarkdownParser();\n\n async load(directory: string): Promise<{ config: AgentConfig; type: ConfigType }> {\n const codeConfigPath = resolve(directory, 'agent.config.ts');\n const mdConfigPath = resolve(directory, 'agent.md');\n\n if (existsSync(codeConfigPath)) {\n return { config: await this.loadCode(codeConfigPath), type: 'code' };\n }\n\n if (existsSync(mdConfigPath)) {\n return { config: await this.loadMarkdown(mdConfigPath), type: 'markdown' };\n }\n\n throw new ConfigurationError(\n `No agent configuration found in ${directory}. Expected agent.config.ts or agent.md`,\n );\n }\n\n async loadCode(filePath: string): Promise<AgentConfig> {\n try {\n // Use jiti to load TypeScript files at runtime without pre-compilation\n const { createJiti } = await import('jiti');\n const jiti = createJiti(pathToFileURL(filePath).href, {\n interopDefault: true,\n moduleCache: false,\n });\n\n const module = await jiti.import(filePath) as any;\n const config = module.default || module;\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load code config from ${filePath}: ${error}`);\n }\n }\n\n async loadMarkdown(filePath: string): Promise<AgentConfig> {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const partialConfig = this.markdownParser.parse(content);\n\n // Markdown configs need LLM settings from env or frontmatter\n const config = {\n ...partialConfig,\n llm: partialConfig.llm || {\n provider: (process.env.LLM_PROVIDER as 'anthropic' | 'openai') || 'anthropic',\n model: process.env.LLM_MODEL || 'claude-sonnet-4-20250514',\n apiKey: process.env.ANTHROPIC_API_KEY || process.env.OPENAI_API_KEY || '',\n },\n };\n\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load markdown config from ${filePath}: ${error}`);\n }\n }\n}\n","import matter from 'gray-matter';\nimport type { AgentConfig } from './types.js';\n\ninterface ParsedSection {\n title: string;\n level: number;\n content: string;\n children: ParsedSection[];\n}\n\nexport class MarkdownParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MarkdownParseError';\n }\n}\n\nexport class MarkdownParser {\n parse(markdown: string): Partial<AgentConfig> {\n const { data: frontmatter, content } = matter(markdown);\n const sections = this.parseSections(content);\n\n const identity = this.findSection(sections, 'Identity');\n const bio = this.findSection(sections, 'Bio');\n const social = this.findSection(sections, 'Social Platforms');\n const behaviors = this.findSection(sections, 'Behaviors');\n const memory = this.findSection(sections, 'Memory');\n const skills = this.findSection(sections, 'Skills');\n const scheduling = this.findSection(sections, 'Scheduling');\n\n const identityData = this.parseIdentity(identity);\n const bioText = bio ? bio.content.trim() : (identityData?.personality?.bio || '');\n\n const config: Partial<AgentConfig> = {\n ...identityData,\n personality: {\n traits: identityData?.personality?.traits || [],\n bio: bioText,\n },\n ...(social ? { social: this.parseSocial(social) } : {}),\n ...(behaviors ? { behaviors: this.parseBehaviors(behaviors) } : {}),\n ...(memory ? { memory: this.parseMemory(memory) } : {}),\n actions: [],\n ...frontmatter,\n };\n\n if (skills) {\n config.actions = skills.children.map((s) => this.toSnakeCase(s.title));\n }\n\n return config;\n }\n\n parseSkills(markdown: string): Array<{ name: string; description: string }> {\n const { content } = matter(markdown);\n const sections = this.parseSections(content);\n const skills = this.findSection(sections, 'Skills');\n\n if (!skills) return [];\n\n return skills.children.map((child) => ({\n name: this.toSnakeCase(child.title),\n description: child.content.trim(),\n }));\n }\n\n private parseSections(content: string): ParsedSection[] {\n const lines = content.split('\\n');\n const root: ParsedSection[] = [];\n const stack: Array<{ level: number; section: ParsedSection }> = [];\n\n for (const line of lines) {\n const match = line.match(/^(#{1,6})\\s+(.+)/);\n if (match) {\n const level = match[1].length;\n const title = match[2].trim();\n const section: ParsedSection = { title, level, content: '', children: [] };\n\n while (stack.length > 0 && stack[stack.length - 1].level >= level) {\n stack.pop();\n }\n\n if (stack.length === 0) {\n root.push(section);\n } else {\n stack[stack.length - 1].section.children.push(section);\n }\n\n stack.push({ level, section });\n } else if (stack.length > 0) {\n stack[stack.length - 1].section.content += line + '\\n';\n }\n }\n\n return root;\n }\n\n private findSection(sections: ParsedSection[], title: string): ParsedSection | undefined {\n for (const section of sections) {\n if (section.title.toLowerCase() === title.toLowerCase()) return section;\n const found = this.findSection(section.children, title);\n if (found) return found;\n }\n return undefined;\n }\n\n private parseIdentity(section?: ParsedSection): Partial<AgentConfig> | undefined {\n if (!section) return undefined;\n const fields = this.parseKeyValueLines(section.content);\n return {\n name: fields['name'] || 'Unnamed Agent',\n type: fields['type'],\n personality: {\n traits: (fields['personality'] || '').split(',').map((t: string) => t.trim()).filter(Boolean),\n bio: '',\n },\n };\n }\n\n private parseSocial(section: ParsedSection): Record<string, any> {\n const social: Record<string, any> = {};\n\n for (const child of section.children) {\n const platform = child.title.toLowerCase();\n const fields = this.parseKeyValueLines(child.content);\n social[platform] = {\n enabled: fields['enabled'] === 'true',\n ...fields,\n };\n }\n\n return social;\n }\n\n private parseBehaviors(section: ParsedSection): AgentConfig['behaviors'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n autonomous: fields['autonomous'] === 'true',\n decisionMaking: (fields['decision_making'] || 'llm-driven') as AgentConfig['behaviors']['decisionMaking'],\n actionsPerHour: fields['actions_per_hour'] ? parseInt(fields['actions_per_hour'], 10) : undefined,\n sleepSchedule: fields['sleep_schedule'] ? this.parseSleepSchedule(fields['sleep_schedule']) : undefined,\n };\n }\n\n private parseMemory(section: ParsedSection): AgentConfig['memory'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n type: (fields['type'] || 'memory') as AgentConfig['memory']['type'],\n retention: fields['retention'],\n };\n }\n\n private parseSleepSchedule(value: string): { start: number; end: number; timezone?: string } {\n const match = value.match(/(\\d{1,2}):?\\d{0,2}\\s*-\\s*(\\d{1,2}):?\\d{0,2}\\s*(.*)?/);\n if (!match) return { start: 22, end: 6 };\n return {\n start: parseInt(match[1], 10),\n end: parseInt(match[2], 10),\n timezone: match[3]?.trim() || undefined,\n };\n }\n\n private parseKeyValueLines(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split('\\n')) {\n const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\\s*(.+)/);\n if (match) {\n result[match[1].trim()] = match[2].trim();\n }\n }\n return result;\n }\n\n private toSnakeCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n }\n}\n","import { z } from 'zod';\n\n// ── Social Platform Configs ──\n\nexport interface MoltbookConfig {\n enabled: boolean;\n apiKey: string;\n baseUrl?: string;\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n engagementRate?: 'low' | 'medium' | 'high';\n autoReply?: boolean;\n replyFilter?: (post: any) => boolean;\n}\n\nexport interface TwitterConfig {\n enabled: boolean;\n credentials: {\n apiKey: string;\n apiSecret: string;\n accessToken: string;\n accessSecret: string;\n bearerToken?: string;\n };\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n replyToMentions?: boolean;\n autoRetweet?: boolean;\n maxTweetsPerDay?: number;\n contentStrategy?: {\n threadTopics?: string[];\n hashtagStrategy?: string;\n mentionBehavior?: string;\n };\n}\n\nexport interface SocialPlatformConfig {\n enabled: boolean;\n [key: string]: unknown;\n}\n\nexport type SocialConfig = {\n moltbook?: MoltbookConfig;\n twitter?: TwitterConfig;\n} & Record<string, SocialPlatformConfig | MoltbookConfig | TwitterConfig | undefined>;\n\n// ── Behavior Configs ──\n\nexport interface BehaviorTrigger {\n condition: (context: any) => boolean;\n action: string;\n params?: Record<string, unknown>;\n}\n\n// ── Memory Configs ──\n\nexport interface RedisConfig {\n url: string;\n keyPrefix?: string;\n ttl?: number;\n}\n\nexport interface PostgresConfig {\n url: string;\n schema?: string;\n tableName?: string;\n}\n\n// ── Plugin Interface ──\n\nexport interface Plugin {\n name: string;\n version: string;\n init?: (agent: any) => Promise<void>;\n destroy?: () => Promise<void>;\n}\n\n// ── Main Agent Config ──\n\nexport interface AgentConfig {\n name: string;\n type?: string;\n\n personality: {\n traits: string[];\n bio: string;\n [key: string]: unknown;\n };\n\n llm: {\n provider: 'anthropic' | 'openai';\n model: string;\n apiKey: string;\n temperature?: number;\n maxTokens?: number;\n systemPrompt?: string;\n };\n\n social: SocialConfig;\n\n behaviors: {\n autonomous: boolean;\n decisionMaking: 'llm-driven' | 'rule-based' | 'hybrid';\n actionsPerHour?: number | ((context: any) => number);\n sleepSchedule?: { start: number; end: number; timezone?: string };\n triggers?: BehaviorTrigger[];\n };\n\n memory: {\n type: 'memory' | 'redis' | 'postgres' | 'hybrid';\n retention?: string;\n redis?: RedisConfig;\n postgres?: PostgresConfig;\n };\n\n actions: string[];\n customActions?: Action[];\n\n webhooks?: {\n onAction?: string | ((action: any, result: any) => Promise<void>);\n onError?: string;\n };\n\n plugins?: Plugin[];\n}\n\n// ── Action Types ──\n\nexport interface ActionContext {\n agent: any;\n memory: any;\n llm: any;\n parameters: Record<string, unknown>;\n}\n\nexport interface ActionResult {\n success: boolean;\n data?: unknown;\n error?: string;\n}\n\nexport interface Action {\n name: string;\n description: string;\n parameters?: Record<string, unknown>;\n execute: (context: ActionContext) => Promise<ActionResult>;\n}\n\n// ── Decision / Experience Types ──\n\nexport interface Decision {\n action: string;\n reasoning: string;\n parameters: Record<string, unknown>;\n}\n\nexport interface Experience {\n type: string;\n action: string;\n result: ActionResult;\n timestamp: Date;\n context?: Record<string, unknown>;\n}\n\n// ── Deployment Types ──\n\nexport interface DeploymentConfig {\n platform: 'railway' | 'render' | 'aws' | 'digitalocean' | 'custom';\n region?: string;\n instanceType?: string;\n autoScale?: boolean;\n customConfig?: CustomDeploymentConfig;\n}\n\nexport interface DeploymentResult {\n success: boolean;\n url?: string;\n deploymentId?: string;\n logs?: string[];\n error?: string;\n}\n\nexport interface DeploymentStatus {\n state: 'running' | 'stopped' | 'deploying' | 'failed' | 'unknown';\n url?: string;\n uptime?: number;\n lastDeployed?: Date;\n}\n\nexport interface CustomDeploymentConfig {\n deploymentMethod: 'docker' | 'ssh' | 'cli' | 'api';\n buildCommand: string;\n startCommand: string;\n environmentVariables?: Record<string, string>;\n healthCheckUrl?: string;\n port?: number;\n docker?: CustomDockerConfig;\n ssh?: CustomSSHConfig;\n cli?: CustomCLIConfig;\n api?: CustomAPIConfig;\n}\n\nexport interface CustomDockerConfig {\n registry: string;\n imageName: string;\n tag?: string;\n dockerfile?: string;\n buildArgs?: Record<string, string>;\n registryAuth?: {\n username: string;\n password: string;\n };\n hostUrl: string;\n containerPort: number;\n hostPort: number;\n}\n\nexport interface CustomSSHConfig {\n host: string;\n port: number;\n username: string;\n authMethod: 'password' | 'privateKey';\n password?: string;\n privateKeyPath?: string;\n deploymentPath: string;\n preDeployCommands?: string[];\n postDeployCommands?: string[];\n}\n\nexport interface CustomCLIConfig {\n cliName: string;\n installCommand?: string;\n loginCommand?: string;\n deployCommand: string;\n statusCommand?: string;\n logsCommand?: string;\n credentials?: Record<string, string>;\n}\n\nexport interface CustomAPIConfig {\n baseUrl: string;\n authType: 'bearer' | 'apiKey' | 'basic' | 'custom';\n authToken?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n endpoints: {\n deploy: string;\n status?: string;\n logs?: string;\n rollback?: string;\n };\n requestMethod?: 'POST' | 'PUT';\n payloadTemplate?: Record<string, unknown>;\n}\n\n// ── Social Types ──\n\nexport interface PostResult {\n id: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface ReplyResult {\n id: string;\n parentId: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface Mention {\n id: string;\n authorId: string;\n authorName: string;\n content: string;\n timestamp: Date;\n platform: string;\n}\n\nexport interface Profile {\n id: string;\n name: string;\n bio?: string;\n followers?: number;\n following?: number;\n platform: string;\n}\n\n// ── Zod Schemas for Runtime Validation (markdown configs) ──\n\nexport const AgentConfigSchema = z.object({\n name: z.string().min(1),\n type: z.string().optional(),\n personality: z.object({\n traits: z.array(z.string()),\n bio: z.string(),\n }).passthrough(),\n llm: z.object({\n provider: z.enum(['anthropic', 'openai']),\n model: z.string(),\n apiKey: z.string(),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().positive().optional(),\n systemPrompt: z.string().optional(),\n }),\n social: z.record(z.unknown()).optional(),\n behaviors: z.object({\n autonomous: z.boolean(),\n decisionMaking: z.enum(['llm-driven', 'rule-based', 'hybrid']),\n actionsPerHour: z.number().optional(),\n sleepSchedule: z.object({\n start: z.number(),\n end: z.number(),\n timezone: z.string().optional(),\n }).optional(),\n }),\n memory: z.object({\n type: z.enum(['memory', 'redis', 'postgres', 'hybrid']),\n retention: z.string().optional(),\n }).passthrough(),\n actions: z.array(z.string()),\n}).passthrough();\n","import { AgentConfig, AgentConfigSchema } from './types.js';\n\nexport class ConfigValidationError extends Error {\n constructor(\n message: string,\n public issues: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = 'ConfigValidationError';\n }\n}\n\nexport function validateConfig(config: unknown): AgentConfig {\n const result = AgentConfigSchema.safeParse(config);\n\n if (!result.success) {\n const issues = result.error.issues.map((issue) => ({\n path: issue.path.join('.'),\n message: issue.message,\n }));\n\n throw new ConfigValidationError(\n `Invalid agent configuration:\\n${issues.map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n issues,\n );\n }\n\n return result.data as AgentConfig;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\nimport type { RedisConfig, PostgresConfig } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('LongTermMemory');\n\nexport class LongTermMemory extends Memory {\n private redisConfig?: RedisConfig;\n private postgresConfig?: PostgresConfig;\n private redis: any = null;\n private pg: any = null;\n private initialized = false;\n\n constructor(options: { redis?: RedisConfig; postgres?: PostgresConfig } = {}) {\n super();\n this.redisConfig = options.redis;\n this.postgresConfig = options.postgres;\n }\n\n async init(): Promise<void> {\n if (this.initialized) return;\n\n if (this.redisConfig) {\n await this.initRedis();\n }\n\n if (this.postgresConfig) {\n await this.initPostgres();\n }\n\n this.initialized = true;\n }\n\n // ── Redis: Short-term cache operations ──\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n await this.ensureRedis();\n const serialized = JSON.stringify(value);\n const prefixedKey = this.redisKey(key);\n\n if (ttl) {\n await this.redis.setex(prefixedKey, ttl, serialized);\n } else {\n const defaultTtl = this.redisConfig?.ttl || 86400; // 24h default\n await this.redis.setex(prefixedKey, defaultTtl, serialized);\n }\n }\n\n async recall(key: string): Promise<unknown> {\n await this.ensureRedis();\n const data = await this.redis.get(this.redisKey(key));\n if (data === null) return undefined;\n try {\n return JSON.parse(data);\n } catch {\n return data;\n }\n }\n\n async forget(key: string): Promise<void> {\n await this.ensureRedis();\n await this.redis.del(this.redisKey(key));\n }\n\n // ── Postgres: Persistent storage operations ──\n\n async store(key: string, value: unknown): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(\n `INSERT INTO ${table} (key, value, updated_at)\n VALUES ($1, $2, NOW())\n ON CONFLICT (key) DO UPDATE SET value = $2, updated_at = NOW()`,\n [key, JSON.stringify(value)],\n );\n }\n\n async retrieve(key: string): Promise<unknown> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const result = await this.pg.query(\n `SELECT value FROM ${table} WHERE key = $1`,\n [key],\n );\n if (result.rows.length === 0) return undefined;\n try {\n return JSON.parse(result.rows[0].value);\n } catch {\n return result.rows[0].value;\n }\n }\n\n async delete(key: string): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(`DELETE FROM ${table} WHERE key = $1`, [key]);\n }\n\n // ── Postgres: Experience/semantic storage ──\n\n async addExperience(experience: Experience): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n await this.pg.query(\n `INSERT INTO ${table} (type, action, result, context, timestamp)\n VALUES ($1, $2, $3, $4, $5)`,\n [\n experience.type,\n experience.action,\n JSON.stringify(experience.result),\n JSON.stringify(experience.context || {}),\n experience.timestamp,\n ],\n );\n }\n\n async queryExperiences(query: string, limit = 20): Promise<Experience[]> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n\n // Text search on action and context fields\n const result = await this.pg.query(\n `SELECT type, action, result, context, timestamp FROM ${table}\n WHERE action ILIKE $1 OR context::text ILIKE $1\n ORDER BY timestamp DESC\n LIMIT $2`,\n [`%${query}%`, limit],\n );\n\n return result.rows.map((row: any) => ({\n type: row.type,\n action: row.action,\n result: typeof row.result === 'string' ? JSON.parse(row.result) : row.result,\n context: typeof row.context === 'string' ? JSON.parse(row.context) : row.context,\n timestamp: new Date(row.timestamp),\n }));\n }\n\n async clear(): Promise<void> {\n if (this.redis) {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n const keys = await this.redis.keys(`${prefix}*`);\n if (keys.length > 0) {\n await this.redis.del(...keys);\n }\n }\n\n if (this.pg) {\n await this.pg.query(`DELETE FROM ${this.pgTable()}`);\n await this.pg.query(`DELETE FROM ${this.pgExperienceTable()}`);\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.redis) {\n await this.redis.quit();\n this.redis = null;\n }\n if (this.pg) {\n await this.pg.end();\n this.pg = null;\n }\n this.initialized = false;\n }\n\n // ── Schema setup (call once to create tables) ──\n\n async ensureSchema(): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const expTable = this.pgExperienceTable();\n const schema = this.postgresConfig?.schema || 'public';\n\n await this.pg.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${table} (\n key TEXT PRIMARY KEY,\n value JSONB NOT NULL,\n updated_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${expTable} (\n id SERIAL PRIMARY KEY,\n type TEXT NOT NULL,\n action TEXT NOT NULL,\n result JSONB NOT NULL,\n context JSONB DEFAULT '{}',\n timestamp TIMESTAMPTZ NOT NULL,\n created_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_action\n ON ${expTable} (action)\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_timestamp\n ON ${expTable} (timestamp DESC)\n `);\n }\n\n // ── Internal helpers ──\n\n private async initRedis(): Promise<void> {\n if (!this.redisConfig) throw new Error('Redis config not provided');\n\n try {\n const { default: Redis } = await import('ioredis');\n this.redis = new Redis(this.redisConfig.url);\n logger.info('Redis connection established');\n } catch (error) {\n logger.error(`Failed to connect to Redis: ${error}`);\n throw error;\n }\n }\n\n private async initPostgres(): Promise<void> {\n if (!this.postgresConfig) throw new Error('Postgres config not provided');\n\n try {\n const pg = await import('pg');\n const Pool = pg.default?.Pool || pg.Pool;\n this.pg = new Pool({\n connectionString: this.postgresConfig.url,\n });\n // Test the connection\n await this.pg.query('SELECT 1');\n logger.info('Postgres connection established');\n } catch (error) {\n logger.error(`Failed to connect to Postgres: ${error}`);\n throw error;\n }\n }\n\n private async ensureRedis(): Promise<void> {\n if (!this.redis) {\n if (!this.redisConfig) {\n throw new Error('Redis not configured. Provide redis config in memory settings.');\n }\n await this.initRedis();\n }\n }\n\n private async ensurePostgres(): Promise<void> {\n if (!this.pg) {\n if (!this.postgresConfig) {\n throw new Error('Postgres not configured. Provide postgres config in memory settings.');\n }\n await this.initPostgres();\n }\n }\n\n private redisKey(key: string): string {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n return `${prefix}${key}`;\n }\n\n private pgTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}`;\n }\n\n private pgExperienceTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}_experiences`;\n }\n\n private sanitizeName(): string {\n return (this.postgresConfig?.tableName || 'moltium_memory').replace(/[^a-z0-9_]/g, '_');\n }\n}\n","import express from 'express';\nimport { createRoutes } from './routes.js';\nimport { requestLogger, errorHandler, authMiddleware } from './middleware.js';\nimport type { Agent } from '../agent/Agent.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport interface ServerOptions {\n port?: number;\n host?: string;\n}\n\nexport function createApp(agent: Agent) {\n const app = express();\n\n app.use(express.json());\n app.use(requestLogger);\n app.use(authMiddleware);\n app.use(createRoutes(agent));\n app.use(errorHandler);\n\n return app;\n}\n\nexport async function startServer(agent: Agent, options: ServerOptions = {}): Promise<void> {\n const port = options.port || parseInt(process.env.PORT || '3000', 10);\n const host = options.host || '0.0.0.0';\n\n const app = createApp(agent);\n\n await agent.start();\n\n app.listen(port, host, () => {\n logger.info(`Agent \"${agent.name}\" running at http://${host}:${port}`);\n });\n\n // Graceful shutdown\n const shutdown = async () => {\n logger.info('Received shutdown signal');\n await agent.stop();\n process.exit(0);\n };\n\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n","import { Router, type Request, type Response } from 'express';\nimport type { Agent } from '../agent/Agent.js';\n\nexport function createRoutes(agent: Agent): Router {\n const router = Router();\n\n router.get('/health', (_req: Request, res: Response) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n });\n\n router.get('/status', (_req: Request, res: Response) => {\n res.json({\n name: agent.name,\n state: agent.getState(),\n type: agent.config.type || 'general',\n uptime: process.uptime(),\n timestamp: new Date().toISOString(),\n });\n });\n\n router.post('/message', async (req: Request, res: Response) => {\n try {\n const { message } = req.body;\n if (!message) {\n res.status(400).json({ error: 'Missing message field' });\n return;\n }\n\n const response = await agent.getLLM().generateText(message, {\n systemPrompt: `You are ${agent.name}. ${agent.config.personality.bio}`,\n temperature: agent.config.llm.temperature,\n });\n\n res.json({ response });\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.post('/action', async (req: Request, res: Response) => {\n try {\n const { action, parameters } = req.body;\n if (!action) {\n res.status(400).json({ error: 'Missing action field' });\n return;\n }\n\n const result = await agent.act(action, parameters || {});\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.get('/config', (_req: Request, res: Response) => {\n // Return config without sensitive fields\n const safeConfig = {\n name: agent.config.name,\n type: agent.config.type,\n personality: agent.config.personality,\n behaviors: {\n autonomous: agent.config.behaviors.autonomous,\n decisionMaking: agent.config.behaviors.decisionMaking,\n actionsPerHour: typeof agent.config.behaviors.actionsPerHour === 'function'\n ? '(dynamic)'\n : agent.config.behaviors.actionsPerHour,\n sleepSchedule: agent.config.behaviors.sleepSchedule,\n },\n memory: { type: agent.config.memory.type },\n actions: agent.config.actions,\n };\n\n res.json(safeConfig);\n });\n\n router.post('/shutdown', async (_req: Request, res: Response) => {\n res.json({ message: 'Shutting down...' });\n await agent.stop();\n process.exit(0);\n });\n\n return router;\n}\n","import type { Request, Response, NextFunction } from 'express';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport function requestLogger(req: Request, _res: Response, next: NextFunction): void {\n logger.debug(`${req.method} ${req.path}`);\n next();\n}\n\nexport function errorHandler(err: Error, _req: Request, res: Response, _next: NextFunction): void {\n logger.error(`Server error: ${err.message}`);\n res.status(500).json({ error: err.message });\n}\n\nexport function authMiddleware(req: Request, res: Response, next: NextFunction): void {\n const authToken = process.env.AGENT_AUTH_TOKEN;\n\n // If no auth token is configured, skip authentication\n if (!authToken) {\n next();\n return;\n }\n\n const provided = req.headers.authorization?.replace('Bearer ', '');\n if (provided !== authToken) {\n res.status(401).json({ error: 'Unauthorized' });\n return;\n }\n\n next();\n}\n"],"mappings":"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","names":["winston","label","logger","logger","Anthropic","OpenAI","axios","logger","axios","matter","module","logger","import_express","logger","logger","express"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/logger.ts","../src/agent/scheduler.ts","../src/actions/registry.ts","../src/actions/ActionHandler.ts","../src/actions/built-in/social.ts","../src/actions/built-in/index.ts","../src/llm/prompt.ts","../src/actions/interpreter.ts","../src/memory/Memory.ts","../src/memory/shortterm.ts","../src/llm/anthropic.ts","../src/llm/Provider.ts","../src/llm/openai.ts","../src/social/moltbook.ts","../src/social/SocialAdapter.ts","../src/social/twitter.ts","../src/agent/Agent.ts","../src/config/ConfigLoader.ts","../src/config/MarkdownParser.ts","../src/config/types.ts","../src/config/validator.ts","../src/memory/longterm.ts","../src/server/app.ts","../src/server/routes.ts","../src/server/middleware.ts"],"sourcesContent":["// ── Agent ──\nexport { Agent } from './agent/Agent.js';\nexport type { AgentState } from './agent/Agent.js';\nexport type { LifecycleHooks, LifecycleEvent } from './agent/lifecycle.js';\nexport { Scheduler } from './agent/scheduler.js';\nexport type { ScheduledJob } from './agent/scheduler.js';\n\n// ── Config ──\nexport { ConfigLoader } from './config/ConfigLoader.js';\nexport type { ConfigType } from './config/ConfigLoader.js';\nexport { MarkdownParser } from './config/MarkdownParser.js';\nexport { validateConfig } from './config/validator.js';\nexport type {\n AgentConfig,\n Action,\n ActionContext,\n ActionResult,\n Decision,\n Experience,\n MoltbookConfig,\n TwitterConfig,\n SocialPlatformConfig,\n SocialConfig,\n BehaviorTrigger,\n RedisConfig,\n PostgresConfig,\n Plugin,\n DeploymentConfig,\n DeploymentResult,\n DeploymentStatus,\n CustomDeploymentConfig,\n CustomDockerConfig,\n CustomSSHConfig,\n CustomCLIConfig,\n CustomAPIConfig,\n PostResult,\n ReplyResult,\n Mention,\n Profile,\n} from './config/types.js';\n\n// ── LLM ──\nexport { LLMProvider } from './llm/Provider.js';\nexport type { GenerateOptions, Message, StructuredSchema } from './llm/Provider.js';\nexport { AnthropicProvider } from './llm/anthropic.js';\nexport { OpenAIProvider } from './llm/openai.js';\nexport { buildSystemPrompt, buildDecisionPrompt, buildSkillPrompt } from './llm/prompt.js';\n\n// ── Memory ──\nexport { Memory } from './memory/Memory.js';\nexport { ShortTermMemory } from './memory/shortterm.js';\nexport { LongTermMemory } from './memory/longterm.js';\n\n// ── Social ──\nexport { SocialAdapter } from './social/SocialAdapter.js';\nexport { MoltbookAdapter } from './social/moltbook.js';\nexport { TwitterAdapter } from './social/twitter.js';\nexport type { FeedOptions, TimelineOptions, Post } from './social/types.js';\n\n// ── Actions ──\nexport { ActionRegistry } from './actions/registry.js';\nexport { ActionHandler } from './actions/ActionHandler.js';\nexport { createMarkdownAction } from './actions/interpreter.js';\nexport { builtInActions } from './actions/built-in/index.js';\n\n// ── Server ──\nexport { createApp, startServer } from './server/app.js';\nexport { createRoutes } from './server/routes.js';\n\n// ── Utilities ──\nexport { createLogger } from './logger.js';\n","import winston from 'winston';\n\nconst logLevel = process.env.LOG_LEVEL || 'info';\n\nexport function createLogger(label: string): winston.Logger {\n return winston.createLogger({\n level: logLevel,\n format: winston.format.combine(\n winston.format.timestamp(),\n winston.format.label({ label }),\n winston.format.printf(({ timestamp, level, label, message, ...meta }) => {\n const metaStr = Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';\n return `${timestamp} [${label}] ${level}: ${message}${metaStr}`;\n }),\n ),\n transports: [new winston.transports.Console()],\n });\n}\n","import { createLogger } from '../logger.js';\n\nconst logger = createLogger('Scheduler');\n\nexport interface ScheduledJob {\n name: string;\n intervalMs: number;\n handler: () => Promise<void>;\n lastRun?: number;\n}\n\nexport class Scheduler {\n private jobs: ScheduledJob[] = [];\n private timers: Map<string, ReturnType<typeof setInterval>> = new Map();\n private running = false;\n\n addJob(job: ScheduledJob): void {\n this.jobs.push(job);\n logger.debug(`Job registered: ${job.name} (every ${job.intervalMs}ms)`);\n }\n\n removeJob(name: string): void {\n this.jobs = this.jobs.filter((j) => j.name !== name);\n const timer = this.timers.get(name);\n if (timer) {\n clearInterval(timer);\n this.timers.delete(name);\n }\n }\n\n start(): void {\n if (this.running) return;\n this.running = true;\n\n for (const job of this.jobs) {\n const timer = setInterval(async () => {\n try {\n logger.debug(`Running job: ${job.name}`);\n await job.handler();\n job.lastRun = Date.now();\n } catch (error) {\n logger.error(`Job failed: ${job.name}`, {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }, job.intervalMs);\n\n this.timers.set(job.name, timer);\n }\n\n logger.info(`Scheduler started with ${this.jobs.length} jobs`);\n }\n\n stop(): void {\n this.running = false;\n for (const [name, timer] of this.timers) {\n clearInterval(timer);\n }\n this.timers.clear();\n logger.info('Scheduler stopped');\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getJobs(): ScheduledJob[] {\n return [...this.jobs];\n }\n}\n","\nimport type { Action } from '../config/types.js';\n\nexport class ActionRegistry {\n private actions = new Map<string, Action>();\n\n register(action: Action): void {\n if (this.actions.has(action.name)) {\n throw new Error(`Action \"${action.name}\" is already registered`);\n }\n this.actions.set(action.name, action);\n }\n\n unregister(name: string): void {\n this.actions.delete(name);\n }\n\n get(name: string): Action | undefined {\n return this.actions.get(name);\n }\n\n has(name: string): boolean {\n return this.actions.has(name);\n }\n\n list(): Action[] {\n return Array.from(this.actions.values());\n }\n\n listNames(): string[] {\n return Array.from(this.actions.keys());\n }\n}\n","import { ActionRegistry } from './registry.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('ActionHandler');\n\nexport class ActionExecutionError extends Error {\n constructor(\n message: string,\n public actionName: string,\n public recoverable: boolean = true,\n ) {\n super(message);\n this.name = 'ActionExecutionError';\n }\n}\n\nexport class ActionHandler {\n private registry: ActionRegistry;\n\n constructor(registry: ActionRegistry) {\n this.registry = registry;\n }\n\n async execute(actionName: string, context: ActionContext): Promise<ActionResult> {\n const action = this.registry.get(actionName);\n\n if (!action) {\n throw new ActionExecutionError(\n `Action \"${actionName}\" not found in registry`,\n actionName,\n false,\n );\n }\n\n logger.info(`Executing action: ${actionName}`);\n\n try {\n const result = await action.execute(context);\n logger.info(`Action completed: ${actionName}`, { success: result.success });\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Action failed: ${actionName}`, { error: message });\n throw new ActionExecutionError(\n `Action \"${actionName}\" failed: ${message}`,\n actionName,\n );\n }\n }\n\n getAvailableActions(): Array<{ name: string; description: string }> {\n return this.registry.list().map((action) => ({\n name: action.name,\n description: action.description,\n }));\n }\n}\n","import type { Action, ActionContext, ActionResult } from '../../config/types.js';\n\nexport const postSocialUpdateAction: Action = {\n name: 'post_social_update',\n description: 'Post a status update to configured social platforms',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { content, platforms } = context.parameters as {\n content: string;\n platforms?: string[];\n };\n\n if (!content) {\n return { success: false, error: 'Missing required parameter: content' };\n }\n\n const results: Record<string, unknown> = {};\n const socialAdapters = context.agent?.socialAdapters || {};\n const targetPlatforms = platforms || Object.keys(socialAdapters);\n\n for (const platform of targetPlatforms) {\n const adapter = socialAdapters[platform];\n if (!adapter) continue;\n\n try {\n const result = await adapter.post(content);\n results[platform] = result;\n } catch (error) {\n results[platform] = {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return { success: true, data: results };\n },\n};\n\nexport const respondToMentionAction: Action = {\n name: 'respond_to_mention',\n description: 'Respond to a social platform mention',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { mentionId, content, platform } = context.parameters as {\n mentionId: string;\n content: string;\n platform: string;\n };\n\n if (!mentionId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: mentionId, content, platform' };\n }\n\n const adapter = context.agent?.socialAdapters?.[platform];\n if (!adapter) {\n return { success: false, error: `No adapter configured for platform: ${platform}` };\n }\n\n const result = await adapter.reply(mentionId, content);\n return { success: true, data: result };\n },\n};\n\nexport const dmUserAction: Action = {\n name: 'dm_user',\n description: 'Send a direct message to a user on a social platform',\n async execute(context: ActionContext): Promise<ActionResult> {\n // DM functionality depends on platform-specific APIs\n // This is a placeholder for the generic interface\n const { userId, content, platform } = context.parameters as {\n userId: string;\n content: string;\n platform: string;\n };\n\n if (!userId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: userId, content, platform' };\n }\n\n return {\n success: false,\n error: `DM not yet implemented for platform: ${platform}`,\n };\n },\n};\n\nexport const scheduleTaskAction: Action = {\n name: 'schedule_task',\n description: 'Schedule a task for later execution',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { taskName, delay, parameters } = context.parameters as {\n taskName: string;\n delay: number;\n parameters?: Record<string, unknown>;\n };\n\n if (!taskName || delay === undefined) {\n return { success: false, error: 'Missing required parameters: taskName, delay' };\n }\n\n // Store scheduled task in memory for the scheduler to pick up\n const scheduledTask = {\n taskName,\n executeAt: Date.now() + delay * 1000,\n parameters: parameters || {},\n };\n\n await context.memory.store(`scheduled:${taskName}:${Date.now()}`, scheduledTask);\n\n return { success: true, data: scheduledTask };\n },\n};\n","export {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nimport type { Action } from '../../config/types.js';\nimport {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nexport const builtInActions: Action[] = [\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n];\n","import type { AgentConfig, Action } from '../config/types.js';\n\nexport function buildSystemPrompt(config: AgentConfig): string {\n const parts: string[] = [];\n\n parts.push(`You are ${config.name}, an autonomous AI agent.`);\n\n if (config.type) {\n parts.push(`Your role: ${config.type}.`);\n }\n\n if (config.personality.bio) {\n parts.push(`\\nBackground:\\n${config.personality.bio}`);\n }\n\n if (config.personality.traits.length > 0) {\n parts.push(`\\nPersonality traits: ${config.personality.traits.join(', ')}`);\n }\n\n if (config.llm.systemPrompt) {\n parts.push(`\\n${config.llm.systemPrompt}`);\n }\n\n return parts.join('\\n');\n}\n\nexport function buildDecisionPrompt(\n context: Record<string, unknown>,\n availableActions: Array<{ name: string; description: string }>,\n): string {\n const actionList = availableActions\n .map((a) => `- ${a.name}: ${a.description}`)\n .join('\\n');\n\n return `Given the current context, decide what action to take next.\n\nAvailable actions:\n${actionList}\n\nCurrent context:\n${JSON.stringify(context, null, 2)}\n\nRespond with a JSON object:\n{\n \"action\": \"<action_name>\",\n \"reasoning\": \"<brief explanation>\",\n \"parameters\": { <any parameters for the action> }\n}`;\n}\n\nexport function buildSkillPrompt(skillName: string, skillDescription: string, parameters: Record<string, unknown>): string {\n return `Execute the following skill: ${skillName}\n\nInstructions:\n${skillDescription}\n\nParameters:\n${JSON.stringify(parameters, null, 2)}\n\nExecute these instructions step by step and return the result as a JSON object:\n{\n \"success\": true/false,\n \"data\": { <result data> },\n \"reasoning\": \"<what you did and why>\"\n}`;\n}\n","import type { LLMProvider } from '../llm/Provider.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { buildSkillPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('MarkdownInterpreter');\n\nexport class LLMInterpretationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'LLMInterpretationError';\n }\n}\n\n/**\n * Creates an Action from a markdown skill description.\n * The skill's behavior is interpreted by the LLM at runtime.\n */\nexport function createMarkdownAction(\n name: string,\n description: string,\n llmProvider: LLMProvider,\n): Action {\n return {\n name,\n description,\n execute: async (context: ActionContext): Promise<ActionResult> => {\n logger.info(`Interpreting markdown skill: ${name}`);\n\n const prompt = buildSkillPrompt(name, description, context.parameters);\n\n try {\n const response = await llmProvider.generateText(prompt, {\n temperature: 0.7,\n maxTokens: 2048,\n });\n\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new LLMInterpretationError(\n `LLM did not return valid JSON for skill \"${name}\"`,\n );\n }\n\n const result = JSON.parse(jsonMatch[0]);\n return {\n success: result.success ?? true,\n data: result.data || result,\n };\n } catch (error) {\n if (error instanceof LLMInterpretationError) throw error;\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Markdown skill interpretation failed: ${name}`, { error: message });\n throw new LLMInterpretationError(\n `Failed to interpret skill \"${name}\": ${message}`,\n );\n }\n },\n };\n}\n","import type { Experience } from '../config/types.js';\n\nexport abstract class Memory {\n // Short-term (current session)\n abstract remember(key: string, value: unknown, ttl?: number): Promise<void>;\n abstract recall(key: string): Promise<unknown>;\n abstract forget(key: string): Promise<void>;\n\n // Long-term (persistent)\n abstract store(key: string, value: unknown): Promise<void>;\n abstract retrieve(key: string): Promise<unknown>;\n abstract delete(key: string): Promise<void>;\n\n // Semantic memory\n abstract addExperience(experience: Experience): Promise<void>;\n abstract queryExperiences(query: string, limit?: number): Promise<Experience[]>;\n\n // Lifecycle\n abstract clear(): Promise<void>;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\n\ninterface CacheEntry {\n value: unknown;\n expiresAt?: number;\n}\n\nexport class ShortTermMemory extends Memory {\n private cache = new Map<string, CacheEntry>();\n private store_ = new Map<string, unknown>();\n private experiences: Experience[] = [];\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n this.cache.set(key, {\n value,\n expiresAt: ttl ? Date.now() + ttl * 1000 : undefined,\n });\n }\n\n async recall(key: string): Promise<unknown> {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n this.cache.delete(key);\n return undefined;\n }\n\n return entry.value;\n }\n\n async forget(key: string): Promise<void> {\n this.cache.delete(key);\n }\n\n async store(key: string, value: unknown): Promise<void> {\n this.store_.set(key, value);\n }\n\n async retrieve(key: string): Promise<unknown> {\n return this.store_.get(key);\n }\n\n async delete(key: string): Promise<void> {\n this.store_.delete(key);\n }\n\n async addExperience(experience: Experience): Promise<void> {\n this.experiences.push(experience);\n }\n\n async queryExperiences(query: string, limit: number = 10): Promise<Experience[]> {\n // Simple keyword matching — will be replaced with vector search in longterm\n const queryLower = query.toLowerCase();\n return this.experiences\n .filter(\n (exp) =>\n exp.type.toLowerCase().includes(queryLower) ||\n exp.action.toLowerCase().includes(queryLower),\n )\n .slice(-limit);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n this.store_.clear();\n this.experiences = [];\n }\n}\n","import Anthropic from '@anthropic-ai/sdk';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class AnthropicProvider extends LLMProvider {\n name = 'anthropic';\n private client: Anthropic;\n private model: string;\n\n constructor(apiKey: string, model: string = 'claude-sonnet-4-20250514') {\n super();\n this.client = new Anthropic({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop_sequences: options.stopSequences } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return textBlock ? textBlock.text : '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const systemMessages = messages.filter((m) => m.role === 'system');\n const chatMessages = messages\n .filter((m) => m.role !== 'system')\n .map((m) => ({ role: m.role as 'user' | 'assistant', content: m.content }));\n\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: chatMessages,\n ...(systemMessages.length > 0 ? { system: systemMessages.map((m) => m.content).join('\\n') } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return { role: 'assistant', content: textBlock ? textBlock.text : '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const stream = this.client.messages.stream({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const event of stream) {\n if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {\n yield event.delta.text;\n }\n }\n }\n}\n","export interface GenerateOptions {\n temperature?: number;\n maxTokens?: number;\n stopSequences?: string[];\n systemPrompt?: string;\n}\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant';\n content: string;\n}\n\nexport interface StructuredSchema {\n type: string;\n properties?: Record<string, unknown>;\n required?: string[];\n}\n\nexport abstract class LLMProvider {\n abstract name: string;\n\n abstract generateText(prompt: string, options?: GenerateOptions): Promise<string>;\n\n abstract generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T>;\n\n abstract chat(messages: Message[], options?: GenerateOptions): Promise<Message>;\n\n abstract streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string>;\n}\n","import OpenAI from 'openai';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class OpenAIProvider extends LLMProvider {\n name = 'openai';\n private client: OpenAI;\n private model: string;\n\n constructor(apiKey: string, model: string = 'gpt-4o') {\n super();\n this.client = new OpenAI({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop: options.stopSequences } : {}),\n });\n\n return response.choices[0]?.message?.content || '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const openaiMessages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages: openaiMessages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n return { role: 'assistant', content: response.choices[0]?.message?.content || '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const stream = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n stream: true,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content;\n if (delta) yield delta;\n }\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { MoltbookConfig } from '../config/types.js';\n\nexport class MoltbookAdapter extends SocialAdapter {\n platform = 'moltbook';\n private client: AxiosInstance;\n private config: MoltbookConfig;\n\n constructor(config: MoltbookConfig) {\n super();\n this.config = config;\n this.client = axios.create({\n baseURL: config.baseUrl || 'https://api.moltbook.com',\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n }\n\n async connect(): Promise<void> {\n // Verify API key is valid\n await this.client.get('/me');\n }\n\n async disconnect(): Promise<void> {\n // No persistent connection to close\n }\n\n async post(content: string): Promise<PostResult> {\n const response = await this.client.post('/posts', { content });\n return {\n id: response.data.id,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async reply(postId: string, content: string): Promise<ReplyResult> {\n const response = await this.client.post(`/posts/${postId}/replies`, { content });\n return {\n id: response.data.id,\n parentId: postId,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async like(postId: string): Promise<void> {\n await this.client.post(`/posts/${postId}/like`);\n }\n\n async follow(userId: string): Promise<void> {\n await this.client.post(`/users/${userId}/follow`);\n }\n\n async getMentions(): Promise<Mention[]> {\n const response = await this.client.get('/mentions');\n return response.data.mentions.map((m: any) => ({\n id: m.id,\n authorId: m.author_id,\n authorName: m.author_name,\n content: m.content,\n timestamp: new Date(m.created_at),\n platform: 'moltbook',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const params: Record<string, unknown> = {};\n if (options?.limit) params.limit = options.limit;\n if (options?.cursor) params.cursor = options.cursor;\n if (options?.since) params.since = options.since.toISOString();\n\n const response = await this.client.get('/feed', { params });\n return response.data.posts.map((p: any) => ({\n id: p.id,\n authorId: p.author_id,\n authorName: p.author_name,\n content: p.content,\n timestamp: new Date(p.created_at),\n platform: 'moltbook',\n likes: p.likes_count,\n replies: p.replies_count,\n reposts: p.reposts_count,\n mentions: p.mentions || [],\n url: p.url,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const response = await this.client.get(`/users/${userId}`);\n return {\n id: response.data.id,\n name: response.data.name,\n bio: response.data.bio,\n followers: response.data.followers_count,\n following: response.data.following_count,\n platform: 'moltbook',\n };\n }\n}\n","import type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\n\nexport abstract class SocialAdapter {\n abstract platform: string;\n\n abstract post(content: string): Promise<PostResult>;\n abstract reply(id: string, content: string): Promise<ReplyResult>;\n abstract like(id: string): Promise<void>;\n abstract follow(userId: string): Promise<void>;\n abstract getMentions(): Promise<Mention[]>;\n abstract getFeed(options?: FeedOptions): Promise<Post[]>;\n abstract getProfile(userId: string): Promise<Profile>;\n\n abstract connect(): Promise<void>;\n abstract disconnect(): Promise<void>;\n}\n","import { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { TwitterConfig } from '../config/types.js';\n\nexport class TwitterAdapter extends SocialAdapter {\n platform = 'twitter';\n private config: TwitterConfig;\n private client: any; // twitter-api-v2 client\n\n constructor(config: TwitterConfig) {\n super();\n this.config = config;\n }\n\n async connect(): Promise<void> {\n // Dynamic import to keep twitter-api-v2 optional\n const { TwitterApi } = await import('twitter-api-v2');\n this.client = new TwitterApi({\n appKey: this.config.credentials.apiKey,\n appSecret: this.config.credentials.apiSecret,\n accessToken: this.config.credentials.accessToken,\n accessSecret: this.config.credentials.accessSecret,\n });\n\n // Verify credentials\n await this.client.v2.me();\n }\n\n async disconnect(): Promise<void> {\n this.client = null;\n }\n\n async post(content: string): Promise<PostResult> {\n const tweet = await this.client.v2.tweet(content);\n return {\n id: tweet.data.id,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async reply(tweetId: string, content: string): Promise<ReplyResult> {\n const tweet = await this.client.v2.reply(content, tweetId);\n return {\n id: tweet.data.id,\n parentId: tweetId,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async like(tweetId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.like(me.data.id, tweetId);\n }\n\n async follow(userId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.follow(me.data.id, userId);\n }\n\n async getMentions(): Promise<Mention[]> {\n const me = await this.client.v2.me();\n const mentions = await this.client.v2.userMentionTimeline(me.data.id, {\n max_results: 20,\n expansions: ['author_id'],\n 'tweet.fields': ['created_at'],\n 'user.fields': ['name', 'username'],\n });\n\n const users = new Map<string, string>();\n if (mentions.includes?.users) {\n for (const user of mentions.includes.users) {\n users.set(user.id, user.username);\n }\n }\n\n return (mentions.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: tweet.author_id,\n authorName: users.get(tweet.author_id) || 'unknown',\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const me = await this.client.v2.me();\n const timeline = await this.client.v2.userTimeline(me.data.id, {\n max_results: options?.limit || 20,\n 'tweet.fields': ['created_at', 'public_metrics'],\n });\n\n return (timeline.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: me.data.id,\n authorName: me.data.username,\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n likes: tweet.public_metrics?.like_count,\n replies: tweet.public_metrics?.reply_count,\n reposts: tweet.public_metrics?.retweet_count,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const user = await this.client.v2.user(userId, {\n 'user.fields': ['description', 'public_metrics'],\n });\n\n return {\n id: user.data.id,\n name: user.data.name,\n bio: user.data.description,\n followers: user.data.public_metrics?.followers_count,\n following: user.data.public_metrics?.following_count,\n platform: 'twitter',\n };\n }\n}\n","import type { AgentConfig, Decision, Experience, ActionResult, Action } from '../config/types.js';\nimport type { LifecycleHooks } from './lifecycle.js';\nimport { Scheduler } from './scheduler.js';\nimport { ActionRegistry } from '../actions/registry.js';\nimport { ActionHandler } from '../actions/ActionHandler.js';\nimport { builtInActions } from '../actions/built-in/index.js';\nimport { createMarkdownAction } from '../actions/interpreter.js';\nimport { ShortTermMemory } from '../memory/shortterm.js';\nimport type { Memory } from '../memory/Memory.js';\nimport type { LLMProvider } from '../llm/Provider.js';\nimport { AnthropicProvider } from '../llm/anthropic.js';\nimport { OpenAIProvider } from '../llm/openai.js';\nimport { SocialAdapter } from '../social/SocialAdapter.js';\nimport { MoltbookAdapter } from '../social/moltbook.js';\nimport { TwitterAdapter } from '../social/twitter.js';\nimport { buildSystemPrompt, buildDecisionPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Agent');\n\nexport type AgentState = 'idle' | 'initializing' | 'running' | 'stopping' | 'stopped' | 'error';\n\nexport class Agent {\n readonly config: AgentConfig;\n\n private state: AgentState = 'idle';\n private llm!: LLMProvider;\n private memory_: Memory;\n private scheduler: Scheduler;\n private actionRegistry: ActionRegistry;\n private actionHandler: ActionHandler;\n private hooks: LifecycleHooks = {};\n private tickTimer?: ReturnType<typeof setInterval>;\n private systemPrompt: string;\n\n socialAdapters: Record<string, SocialAdapter> = {};\n\n constructor(config: AgentConfig, hooks?: LifecycleHooks) {\n this.config = config;\n this.hooks = hooks || {};\n this.memory_ = new ShortTermMemory();\n this.scheduler = new Scheduler();\n this.actionRegistry = new ActionRegistry();\n this.actionHandler = new ActionHandler(this.actionRegistry);\n this.systemPrompt = buildSystemPrompt(config);\n }\n\n get name(): string {\n return this.config.name;\n }\n\n getState(): AgentState {\n return this.state;\n }\n\n getMemory(): Memory {\n return this.memory_;\n }\n\n getLLM(): LLMProvider {\n return this.llm;\n }\n\n getActionRegistry(): ActionRegistry {\n return this.actionRegistry;\n }\n\n // ── Configuration Methods ──\n\n setSystemPrompt(prompt: string): void {\n this.systemPrompt = prompt;\n }\n\n appendSystemPrompt(additional: string): void {\n this.systemPrompt += '\\n\\n' + additional;\n }\n\n getSystemPrompt(): string {\n return this.systemPrompt;\n }\n\n setHooks(hooks: LifecycleHooks): void {\n this.hooks = hooks;\n }\n\n mergeHooks(hooks: Partial<LifecycleHooks>): void {\n this.hooks = { ...this.hooks, ...hooks };\n }\n\n setMemory(memory: Memory): void {\n this.memory_ = memory;\n }\n\n async preloadMemory(entries: Record<string, unknown>): Promise<void> {\n for (const [key, value] of Object.entries(entries)) {\n await this.memory_.remember(key, value);\n }\n }\n\n registerAction(action: Action): void {\n this.actionRegistry.register(action);\n }\n\n // ── Lifecycle ──\n\n async init(): Promise<void> {\n this.state = 'initializing';\n logger.info(`Initializing agent: ${this.config.name}`);\n\n this.initLLM();\n this.registerActions();\n await this.initSocialAdapters();\n\n if (this.hooks.onInit) {\n await this.hooks.onInit(this);\n }\n\n logger.info(`Agent initialized: ${this.config.name}`);\n }\n\n async start(): Promise<void> {\n if (this.state !== 'initializing' && this.state !== 'idle') {\n throw new Error(`Cannot start agent in state: ${this.state}`);\n }\n\n if (this.state === 'idle') {\n await this.init();\n }\n\n this.state = 'running';\n logger.info(`Agent started: ${this.config.name}`);\n\n if (this.hooks.onStart) {\n await this.hooks.onStart(this);\n }\n\n this.scheduler.start();\n\n if (this.config.behaviors.autonomous) {\n this.startAutonomousLoop();\n }\n }\n\n async stop(): Promise<void> {\n this.state = 'stopping';\n logger.info(`Stopping agent: ${this.config.name}`);\n\n if (this.tickTimer) {\n clearInterval(this.tickTimer);\n this.tickTimer = undefined;\n }\n\n this.scheduler.stop();\n\n for (const adapter of Object.values(this.socialAdapters)) {\n await adapter.disconnect();\n }\n\n if (this.hooks.onShutdown) {\n await this.hooks.onShutdown(this);\n }\n\n this.state = 'stopped';\n logger.info(`Agent stopped: ${this.config.name}`);\n }\n\n // ── Decision Loop ──\n\n async think(): Promise<Decision> {\n const context = await this.gatherContext();\n const availableActions = this.actionHandler.getAvailableActions();\n\n const prompt = buildDecisionPrompt(context, availableActions);\n\n const decision = await this.llm.generateStructured<Decision>(\n prompt,\n {\n type: 'object',\n properties: {\n action: { type: 'string' },\n reasoning: { type: 'string' },\n parameters: { type: 'object' },\n },\n required: ['action', 'reasoning', 'parameters'],\n },\n { systemPrompt: this.systemPrompt, temperature: this.config.llm.temperature },\n );\n\n logger.debug(`Decision: ${decision.action} — ${decision.reasoning}`);\n return decision;\n }\n\n async act(actionName: string, parameters: Record<string, unknown> = {}): Promise<ActionResult> {\n const context = {\n agent: this,\n memory: this.memory_,\n llm: this.llm,\n parameters,\n };\n\n return this.actionHandler.execute(actionName, context);\n }\n\n async learn(experience: Experience): Promise<void> {\n await this.memory_.addExperience(experience);\n }\n\n async tick(): Promise<void> {\n if (this.state !== 'running') return;\n\n try {\n if (this.hooks.onTick) {\n await this.hooks.onTick(this);\n }\n\n if (this.isSleeping()) return;\n\n const decision = await this.think();\n const result = await this.act(decision.action, decision.parameters);\n\n await this.learn({\n type: 'action',\n action: decision.action,\n result,\n timestamp: new Date(),\n context: { reasoning: decision.reasoning },\n });\n\n if (this.config.webhooks?.onAction) {\n await this.fireWebhook('onAction', decision, result);\n }\n } catch (error) {\n logger.error(`Tick error: ${error instanceof Error ? error.message : error}`);\n if (this.hooks.onError && error instanceof Error) {\n await this.hooks.onError(error, this);\n }\n }\n }\n\n // ── Markdown skill registration ──\n\n registerMarkdownSkills(skills: Array<{ name: string; description: string }>): void {\n for (const skill of skills) {\n const action = createMarkdownAction(skill.name, skill.description, this.llm);\n this.actionRegistry.register(action);\n }\n }\n\n // ── Internal ──\n\n private initLLM(): void {\n const { provider, apiKey, model } = this.config.llm;\n\n switch (provider) {\n case 'anthropic':\n this.llm = new AnthropicProvider(apiKey, model);\n break;\n case 'openai':\n this.llm = new OpenAIProvider(apiKey, model);\n break;\n default:\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n }\n\n private registerActions(): void {\n // Register built-in actions that the config references\n for (const action of builtInActions) {\n if (this.config.actions.includes(action.name)) {\n this.actionRegistry.register(action);\n }\n }\n\n // Register custom actions (code-based)\n if (this.config.customActions) {\n for (const action of this.config.customActions) {\n this.actionRegistry.register(action);\n }\n }\n }\n\n private async initSocialAdapters(): Promise<void> {\n const { social } = this.config;\n\n if (social.moltbook?.enabled) {\n const adapter = new MoltbookAdapter(social.moltbook);\n try {\n await adapter.connect();\n this.socialAdapters['moltbook'] = adapter;\n logger.info('Moltbook adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Moltbook adapter: ${error}`);\n }\n }\n\n if (social.twitter?.enabled) {\n const adapter = new TwitterAdapter(social.twitter);\n try {\n await adapter.connect();\n this.socialAdapters['twitter'] = adapter;\n logger.info('Twitter adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Twitter adapter: ${error}`);\n }\n }\n }\n\n private startAutonomousLoop(): void {\n const actionsPerHour = typeof this.config.behaviors.actionsPerHour === 'function'\n ? this.config.behaviors.actionsPerHour({})\n : this.config.behaviors.actionsPerHour || 5;\n\n const intervalMs = Math.floor(3600000 / actionsPerHour);\n\n this.tickTimer = setInterval(() => this.tick(), intervalMs);\n logger.info(`Autonomous loop started: ~${actionsPerHour} actions/hour (every ${intervalMs}ms)`);\n }\n\n private isSleeping(): boolean {\n const schedule = this.config.behaviors.sleepSchedule;\n if (!schedule) return false;\n\n const now = new Date();\n const hour = now.getHours();\n\n if (schedule.start > schedule.end) {\n // Wraps midnight (e.g., 22-6)\n return hour >= schedule.start || hour < schedule.end;\n }\n return hour >= schedule.start && hour < schedule.end;\n }\n\n private async gatherContext(): Promise<Record<string, unknown>> {\n return {\n agentName: this.config.name,\n agentType: this.config.type,\n currentTime: new Date().toISOString(),\n state: this.state,\n personality: this.config.personality.traits,\n };\n }\n\n private async fireWebhook(event: string, ...args: unknown[]): Promise<void> {\n try {\n const hook = this.config.webhooks?.[event as keyof typeof this.config.webhooks];\n if (typeof hook === 'function') {\n await (hook as Function)(...args);\n } else if (typeof hook === 'string') {\n const { default: axios } = await import('axios');\n await axios.post(hook, { event, data: args });\n }\n } catch (error) {\n logger.error(`Webhook ${event} failed: ${error}`);\n }\n }\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { MarkdownParser } from './MarkdownParser.js';\nimport { validateConfig } from './validator.js';\nimport type { AgentConfig } from './types.js';\n\nexport type ConfigType = 'code' | 'markdown';\n\nexport class ConfigurationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ConfigurationError';\n }\n}\n\nexport class ConfigLoader {\n private markdownParser = new MarkdownParser();\n\n async load(directory: string): Promise<{ config: AgentConfig; type: ConfigType }> {\n const codeConfigPath = resolve(directory, 'agent.config.ts');\n const mdConfigPath = resolve(directory, 'agent.md');\n\n if (existsSync(codeConfigPath)) {\n return { config: await this.loadCode(codeConfigPath), type: 'code' };\n }\n\n if (existsSync(mdConfigPath)) {\n return { config: await this.loadMarkdown(mdConfigPath), type: 'markdown' };\n }\n\n throw new ConfigurationError(\n `No agent configuration found in ${directory}. Expected agent.config.ts or agent.md`,\n );\n }\n\n async loadCode(filePath: string): Promise<AgentConfig> {\n try {\n // Use jiti to load TypeScript files at runtime without pre-compilation\n const { createJiti } = await import('jiti');\n const jiti = createJiti(pathToFileURL(filePath).href, {\n interopDefault: true,\n moduleCache: false,\n });\n\n const module = await jiti.import(filePath) as any;\n const config = module.default || module;\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load code config from ${filePath}: ${error}`);\n }\n }\n\n async loadMarkdown(filePath: string): Promise<AgentConfig> {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const partialConfig = this.markdownParser.parse(content);\n\n // Markdown configs need LLM settings from env or frontmatter\n const config = {\n ...partialConfig,\n llm: partialConfig.llm || {\n provider: (process.env.LLM_PROVIDER as 'anthropic' | 'openai') || 'anthropic',\n model: process.env.LLM_MODEL || 'claude-sonnet-4-20250514',\n apiKey: process.env.ANTHROPIC_API_KEY || process.env.OPENAI_API_KEY || '',\n },\n };\n\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load markdown config from ${filePath}: ${error}`);\n }\n }\n}\n","import matter from 'gray-matter';\nimport type { AgentConfig } from './types.js';\n\ninterface ParsedSection {\n title: string;\n level: number;\n content: string;\n children: ParsedSection[];\n}\n\nexport class MarkdownParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MarkdownParseError';\n }\n}\n\nexport class MarkdownParser {\n parse(markdown: string): Partial<AgentConfig> {\n const { data: frontmatter, content } = matter(markdown);\n const sections = this.parseSections(content);\n\n const identity = this.findSection(sections, 'Identity');\n const bio = this.findSection(sections, 'Bio');\n const social = this.findSection(sections, 'Social Platforms');\n const behaviors = this.findSection(sections, 'Behaviors');\n const memory = this.findSection(sections, 'Memory');\n const skills = this.findSection(sections, 'Skills');\n const scheduling = this.findSection(sections, 'Scheduling');\n\n const identityData = this.parseIdentity(identity);\n const bioText = bio ? bio.content.trim() : (identityData?.personality?.bio || '');\n\n const config: Partial<AgentConfig> = {\n ...identityData,\n personality: {\n traits: identityData?.personality?.traits || [],\n bio: bioText,\n },\n ...(social ? { social: this.parseSocial(social) } : {}),\n ...(behaviors ? { behaviors: this.parseBehaviors(behaviors) } : {}),\n ...(memory ? { memory: this.parseMemory(memory) } : {}),\n actions: [],\n ...frontmatter,\n };\n\n if (skills) {\n config.actions = skills.children.map((s) => this.toSnakeCase(s.title));\n }\n\n return config;\n }\n\n parseSkills(markdown: string): Array<{ name: string; description: string }> {\n const { content } = matter(markdown);\n const sections = this.parseSections(content);\n const skills = this.findSection(sections, 'Skills');\n\n if (!skills) return [];\n\n return skills.children.map((child) => ({\n name: this.toSnakeCase(child.title),\n description: child.content.trim(),\n }));\n }\n\n private parseSections(content: string): ParsedSection[] {\n const lines = content.split('\\n');\n const root: ParsedSection[] = [];\n const stack: Array<{ level: number; section: ParsedSection }> = [];\n\n for (const line of lines) {\n const match = line.match(/^(#{1,6})\\s+(.+)/);\n if (match) {\n const level = match[1].length;\n const title = match[2].trim();\n const section: ParsedSection = { title, level, content: '', children: [] };\n\n while (stack.length > 0 && stack[stack.length - 1].level >= level) {\n stack.pop();\n }\n\n if (stack.length === 0) {\n root.push(section);\n } else {\n stack[stack.length - 1].section.children.push(section);\n }\n\n stack.push({ level, section });\n } else if (stack.length > 0) {\n stack[stack.length - 1].section.content += line + '\\n';\n }\n }\n\n return root;\n }\n\n private findSection(sections: ParsedSection[], title: string): ParsedSection | undefined {\n for (const section of sections) {\n if (section.title.toLowerCase() === title.toLowerCase()) return section;\n const found = this.findSection(section.children, title);\n if (found) return found;\n }\n return undefined;\n }\n\n private parseIdentity(section?: ParsedSection): Partial<AgentConfig> | undefined {\n if (!section) return undefined;\n const fields = this.parseKeyValueLines(section.content);\n return {\n name: fields['name'] || 'Unnamed Agent',\n type: fields['type'],\n personality: {\n traits: (fields['personality'] || '').split(',').map((t: string) => t.trim()).filter(Boolean),\n bio: '',\n },\n };\n }\n\n private parseSocial(section: ParsedSection): Record<string, any> {\n const social: Record<string, any> = {};\n\n for (const child of section.children) {\n const platform = child.title.toLowerCase();\n const fields = this.parseKeyValueLines(child.content);\n social[platform] = {\n enabled: fields['enabled'] === 'true',\n ...fields,\n };\n }\n\n return social;\n }\n\n private parseBehaviors(section: ParsedSection): AgentConfig['behaviors'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n autonomous: fields['autonomous'] === 'true',\n decisionMaking: (fields['decision_making'] || 'llm-driven') as AgentConfig['behaviors']['decisionMaking'],\n actionsPerHour: fields['actions_per_hour'] ? parseInt(fields['actions_per_hour'], 10) : undefined,\n sleepSchedule: fields['sleep_schedule'] ? this.parseSleepSchedule(fields['sleep_schedule']) : undefined,\n };\n }\n\n private parseMemory(section: ParsedSection): AgentConfig['memory'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n type: (fields['type'] || 'memory') as AgentConfig['memory']['type'],\n retention: fields['retention'],\n };\n }\n\n private parseSleepSchedule(value: string): { start: number; end: number; timezone?: string } {\n const match = value.match(/(\\d{1,2}):?\\d{0,2}\\s*-\\s*(\\d{1,2}):?\\d{0,2}\\s*(.*)?/);\n if (!match) return { start: 22, end: 6 };\n return {\n start: parseInt(match[1], 10),\n end: parseInt(match[2], 10),\n timezone: match[3]?.trim() || undefined,\n };\n }\n\n private parseKeyValueLines(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split('\\n')) {\n const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\\s*(.+)/);\n if (match) {\n result[match[1].trim()] = match[2].trim();\n }\n }\n return result;\n }\n\n private toSnakeCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n }\n}\n","import { z } from 'zod';\n\n// ── Social Platform Configs ──\n\nexport interface MoltbookConfig {\n enabled: boolean;\n apiKey: string;\n baseUrl?: string;\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n engagementRate?: 'low' | 'medium' | 'high';\n autoReply?: boolean;\n replyFilter?: (post: any) => boolean;\n}\n\nexport interface TwitterConfig {\n enabled: boolean;\n credentials: {\n apiKey: string;\n apiSecret: string;\n accessToken: string;\n accessSecret: string;\n bearerToken?: string;\n };\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n replyToMentions?: boolean;\n autoRetweet?: boolean;\n maxTweetsPerDay?: number;\n contentStrategy?: {\n threadTopics?: string[];\n hashtagStrategy?: string;\n mentionBehavior?: string;\n };\n}\n\nexport interface SocialPlatformConfig {\n enabled: boolean;\n [key: string]: unknown;\n}\n\nexport type SocialConfig = {\n moltbook?: MoltbookConfig;\n twitter?: TwitterConfig;\n} & Record<string, SocialPlatformConfig | MoltbookConfig | TwitterConfig | undefined>;\n\n// ── Behavior Configs ──\n\nexport interface BehaviorTrigger {\n condition: (context: any) => boolean;\n action: string;\n params?: Record<string, unknown>;\n}\n\n// ── Memory Configs ──\n\nexport interface RedisConfig {\n url: string;\n keyPrefix?: string;\n ttl?: number;\n}\n\nexport interface PostgresConfig {\n url: string;\n schema?: string;\n tableName?: string;\n}\n\n// ── Plugin Interface ──\n\nexport interface Plugin {\n name: string;\n version: string;\n init?: (agent: any) => Promise<void>;\n destroy?: () => Promise<void>;\n}\n\n// ── Main Agent Config ──\n\nexport interface AgentConfig {\n name: string;\n type?: string;\n\n personality: {\n traits: string[];\n bio: string;\n [key: string]: unknown;\n };\n\n llm: {\n provider: 'anthropic' | 'openai';\n model: string;\n apiKey: string;\n temperature?: number;\n maxTokens?: number;\n systemPrompt?: string;\n };\n\n social: SocialConfig;\n\n behaviors: {\n autonomous: boolean;\n decisionMaking: 'llm-driven' | 'rule-based' | 'hybrid';\n actionsPerHour?: number | ((context: any) => number);\n sleepSchedule?: { start: number; end: number; timezone?: string };\n triggers?: BehaviorTrigger[];\n };\n\n memory: {\n type: 'memory' | 'redis' | 'postgres' | 'hybrid';\n retention?: string;\n redis?: RedisConfig;\n postgres?: PostgresConfig;\n };\n\n actions: string[];\n customActions?: Action[];\n\n webhooks?: {\n onAction?: string | ((action: any, result: any) => Promise<void>);\n onError?: string;\n };\n\n plugins?: Plugin[];\n}\n\n// ── Action Types ──\n\nexport interface ActionContext {\n agent: any;\n memory: any;\n llm: any;\n parameters: Record<string, unknown>;\n}\n\nexport interface ActionResult {\n success: boolean;\n data?: unknown;\n error?: string;\n}\n\nexport interface Action {\n name: string;\n description: string;\n parameters?: Record<string, unknown>;\n execute: (context: ActionContext) => Promise<ActionResult>;\n}\n\n// ── Decision / Experience Types ──\n\nexport interface Decision {\n action: string;\n reasoning: string;\n parameters: Record<string, unknown>;\n}\n\nexport interface Experience {\n type: string;\n action: string;\n result: ActionResult;\n timestamp: Date;\n context?: Record<string, unknown>;\n}\n\n// ── Deployment Types ──\n\nexport interface DeploymentConfig {\n platform: 'railway' | 'render' | 'aws' | 'digitalocean' | 'custom';\n region?: string;\n instanceType?: string;\n autoScale?: boolean;\n customConfig?: CustomDeploymentConfig;\n}\n\nexport interface DeploymentResult {\n success: boolean;\n url?: string;\n deploymentId?: string;\n logs?: string[];\n error?: string;\n}\n\nexport interface DeploymentStatus {\n state: 'running' | 'stopped' | 'deploying' | 'failed' | 'unknown';\n url?: string;\n uptime?: number;\n lastDeployed?: Date;\n}\n\nexport interface CustomDeploymentConfig {\n deploymentMethod: 'docker' | 'ssh' | 'cli' | 'api';\n buildCommand: string;\n startCommand: string;\n environmentVariables?: Record<string, string>;\n healthCheckUrl?: string;\n port?: number;\n docker?: CustomDockerConfig;\n ssh?: CustomSSHConfig;\n cli?: CustomCLIConfig;\n api?: CustomAPIConfig;\n}\n\nexport interface CustomDockerConfig {\n registry: string;\n imageName: string;\n tag?: string;\n dockerfile?: string;\n buildArgs?: Record<string, string>;\n registryAuth?: {\n username: string;\n password: string;\n };\n hostUrl: string;\n containerPort: number;\n hostPort: number;\n}\n\nexport interface CustomSSHConfig {\n host: string;\n port: number;\n username: string;\n authMethod: 'password' | 'privateKey';\n password?: string;\n privateKeyPath?: string;\n deploymentPath: string;\n preDeployCommands?: string[];\n postDeployCommands?: string[];\n}\n\nexport interface CustomCLIConfig {\n cliName: string;\n installCommand?: string;\n loginCommand?: string;\n deployCommand: string;\n statusCommand?: string;\n logsCommand?: string;\n credentials?: Record<string, string>;\n}\n\nexport interface CustomAPIConfig {\n baseUrl: string;\n authType: 'bearer' | 'apiKey' | 'basic' | 'custom';\n authToken?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n endpoints: {\n deploy: string;\n status?: string;\n logs?: string;\n rollback?: string;\n };\n requestMethod?: 'POST' | 'PUT';\n payloadTemplate?: Record<string, unknown>;\n}\n\n// ── Social Types ──\n\nexport interface PostResult {\n id: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface ReplyResult {\n id: string;\n parentId: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface Mention {\n id: string;\n authorId: string;\n authorName: string;\n content: string;\n timestamp: Date;\n platform: string;\n}\n\nexport interface Profile {\n id: string;\n name: string;\n bio?: string;\n followers?: number;\n following?: number;\n platform: string;\n}\n\n// ── Zod Schemas for Runtime Validation (markdown configs) ──\n\nexport const AgentConfigSchema = z.object({\n name: z.string().min(1),\n type: z.string().optional(),\n personality: z.object({\n traits: z.array(z.string()),\n bio: z.string(),\n }).passthrough(),\n llm: z.object({\n provider: z.enum(['anthropic', 'openai']),\n model: z.string(),\n apiKey: z.string(),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().positive().optional(),\n systemPrompt: z.string().optional(),\n }),\n social: z.record(z.unknown()).optional(),\n behaviors: z.object({\n autonomous: z.boolean(),\n decisionMaking: z.enum(['llm-driven', 'rule-based', 'hybrid']),\n actionsPerHour: z.number().optional(),\n sleepSchedule: z.object({\n start: z.number(),\n end: z.number(),\n timezone: z.string().optional(),\n }).optional(),\n }),\n memory: z.object({\n type: z.enum(['memory', 'redis', 'postgres', 'hybrid']),\n retention: z.string().optional(),\n }).passthrough(),\n actions: z.array(z.string()),\n}).passthrough();\n","import { AgentConfig, AgentConfigSchema } from './types.js';\n\nexport class ConfigValidationError extends Error {\n constructor(\n message: string,\n public issues: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = 'ConfigValidationError';\n }\n}\n\nexport function validateConfig(config: unknown): AgentConfig {\n const result = AgentConfigSchema.safeParse(config);\n\n if (!result.success) {\n const issues = result.error.issues.map((issue) => ({\n path: issue.path.join('.'),\n message: issue.message,\n }));\n\n throw new ConfigValidationError(\n `Invalid agent configuration:\\n${issues.map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n issues,\n );\n }\n\n return result.data as AgentConfig;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\nimport type { RedisConfig, PostgresConfig } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('LongTermMemory');\n\nexport class LongTermMemory extends Memory {\n private redisConfig?: RedisConfig;\n private postgresConfig?: PostgresConfig;\n private redis: any = null;\n private pg: any = null;\n private initialized = false;\n\n constructor(options: { redis?: RedisConfig; postgres?: PostgresConfig } = {}) {\n super();\n this.redisConfig = options.redis;\n this.postgresConfig = options.postgres;\n }\n\n async init(): Promise<void> {\n if (this.initialized) return;\n\n if (this.redisConfig) {\n await this.initRedis();\n }\n\n if (this.postgresConfig) {\n await this.initPostgres();\n }\n\n this.initialized = true;\n }\n\n // ── Redis: Short-term cache operations ──\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n await this.ensureRedis();\n const serialized = JSON.stringify(value);\n const prefixedKey = this.redisKey(key);\n\n if (ttl) {\n await this.redis.setex(prefixedKey, ttl, serialized);\n } else {\n const defaultTtl = this.redisConfig?.ttl || 86400; // 24h default\n await this.redis.setex(prefixedKey, defaultTtl, serialized);\n }\n }\n\n async recall(key: string): Promise<unknown> {\n await this.ensureRedis();\n const data = await this.redis.get(this.redisKey(key));\n if (data === null) return undefined;\n try {\n return JSON.parse(data);\n } catch {\n return data;\n }\n }\n\n async forget(key: string): Promise<void> {\n await this.ensureRedis();\n await this.redis.del(this.redisKey(key));\n }\n\n // ── Postgres: Persistent storage operations ──\n\n async store(key: string, value: unknown): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(\n `INSERT INTO ${table} (key, value, updated_at)\n VALUES ($1, $2, NOW())\n ON CONFLICT (key) DO UPDATE SET value = $2, updated_at = NOW()`,\n [key, JSON.stringify(value)],\n );\n }\n\n async retrieve(key: string): Promise<unknown> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const result = await this.pg.query(\n `SELECT value FROM ${table} WHERE key = $1`,\n [key],\n );\n if (result.rows.length === 0) return undefined;\n try {\n return JSON.parse(result.rows[0].value);\n } catch {\n return result.rows[0].value;\n }\n }\n\n async delete(key: string): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(`DELETE FROM ${table} WHERE key = $1`, [key]);\n }\n\n // ── Postgres: Experience/semantic storage ──\n\n async addExperience(experience: Experience): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n await this.pg.query(\n `INSERT INTO ${table} (type, action, result, context, timestamp)\n VALUES ($1, $2, $3, $4, $5)`,\n [\n experience.type,\n experience.action,\n JSON.stringify(experience.result),\n JSON.stringify(experience.context || {}),\n experience.timestamp,\n ],\n );\n }\n\n async queryExperiences(query: string, limit = 20): Promise<Experience[]> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n\n // Text search on action and context fields\n const result = await this.pg.query(\n `SELECT type, action, result, context, timestamp FROM ${table}\n WHERE action ILIKE $1 OR context::text ILIKE $1\n ORDER BY timestamp DESC\n LIMIT $2`,\n [`%${query}%`, limit],\n );\n\n return result.rows.map((row: any) => ({\n type: row.type,\n action: row.action,\n result: typeof row.result === 'string' ? JSON.parse(row.result) : row.result,\n context: typeof row.context === 'string' ? JSON.parse(row.context) : row.context,\n timestamp: new Date(row.timestamp),\n }));\n }\n\n async clear(): Promise<void> {\n if (this.redis) {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n const keys = await this.redis.keys(`${prefix}*`);\n if (keys.length > 0) {\n await this.redis.del(...keys);\n }\n }\n\n if (this.pg) {\n await this.pg.query(`DELETE FROM ${this.pgTable()}`);\n await this.pg.query(`DELETE FROM ${this.pgExperienceTable()}`);\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.redis) {\n await this.redis.quit();\n this.redis = null;\n }\n if (this.pg) {\n await this.pg.end();\n this.pg = null;\n }\n this.initialized = false;\n }\n\n // ── Schema setup (call once to create tables) ──\n\n async ensureSchema(): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const expTable = this.pgExperienceTable();\n const schema = this.postgresConfig?.schema || 'public';\n\n await this.pg.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${table} (\n key TEXT PRIMARY KEY,\n value JSONB NOT NULL,\n updated_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${expTable} (\n id SERIAL PRIMARY KEY,\n type TEXT NOT NULL,\n action TEXT NOT NULL,\n result JSONB NOT NULL,\n context JSONB DEFAULT '{}',\n timestamp TIMESTAMPTZ NOT NULL,\n created_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_action\n ON ${expTable} (action)\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_timestamp\n ON ${expTable} (timestamp DESC)\n `);\n }\n\n // ── Internal helpers ──\n\n private async initRedis(): Promise<void> {\n if (!this.redisConfig) throw new Error('Redis config not provided');\n\n try {\n const { default: Redis } = await import('ioredis');\n this.redis = new Redis(this.redisConfig.url);\n logger.info('Redis connection established');\n } catch (error) {\n logger.error(`Failed to connect to Redis: ${error}`);\n throw error;\n }\n }\n\n private async initPostgres(): Promise<void> {\n if (!this.postgresConfig) throw new Error('Postgres config not provided');\n\n try {\n const pg = await import('pg');\n const Pool = pg.default?.Pool || pg.Pool;\n this.pg = new Pool({\n connectionString: this.postgresConfig.url,\n });\n // Test the connection\n await this.pg.query('SELECT 1');\n logger.info('Postgres connection established');\n } catch (error) {\n logger.error(`Failed to connect to Postgres: ${error}`);\n throw error;\n }\n }\n\n private async ensureRedis(): Promise<void> {\n if (!this.redis) {\n if (!this.redisConfig) {\n throw new Error('Redis not configured. Provide redis config in memory settings.');\n }\n await this.initRedis();\n }\n }\n\n private async ensurePostgres(): Promise<void> {\n if (!this.pg) {\n if (!this.postgresConfig) {\n throw new Error('Postgres not configured. Provide postgres config in memory settings.');\n }\n await this.initPostgres();\n }\n }\n\n private redisKey(key: string): string {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n return `${prefix}${key}`;\n }\n\n private pgTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}`;\n }\n\n private pgExperienceTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}_experiences`;\n }\n\n private sanitizeName(): string {\n return (this.postgresConfig?.tableName || 'moltium_memory').replace(/[^a-z0-9_]/g, '_');\n }\n}\n","import express from 'express';\nimport { createRoutes } from './routes.js';\nimport { requestLogger, errorHandler, authMiddleware } from './middleware.js';\nimport type { Agent } from '../agent/Agent.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport interface ServerOptions {\n port?: number;\n host?: string;\n}\n\nexport function createApp(agent: Agent) {\n const app = express();\n\n app.use(express.json());\n app.use(requestLogger);\n app.use(authMiddleware);\n app.use(createRoutes(agent));\n app.use(errorHandler);\n\n return app;\n}\n\nexport async function startServer(agent: Agent, options: ServerOptions = {}): Promise<void> {\n const port = options.port || parseInt(process.env.PORT || '3000', 10);\n const host = options.host || '0.0.0.0';\n\n const app = createApp(agent);\n\n await agent.start();\n\n app.listen(port, host, () => {\n logger.info(`Agent \"${agent.name}\" running at http://${host}:${port}`);\n });\n\n // Graceful shutdown\n const shutdown = async () => {\n logger.info('Received shutdown signal');\n await agent.stop();\n process.exit(0);\n };\n\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n","import { Router, type Request, type Response } from 'express';\nimport type { Agent } from '../agent/Agent.js';\n\nexport function createRoutes(agent: Agent): Router {\n const router = Router();\n\n router.get('/', (_req: Request, res: Response) => {\n res.json({\n agent: agent.name,\n type: agent.config.type || 'general',\n state: agent.getState(),\n endpoints: {\n 'GET /': 'This overview',\n 'GET /health': 'Health check',\n 'GET /status': 'Agent status and uptime',\n 'POST /message': 'Send a message to the agent (body: { message })',\n 'POST /action': 'Trigger a specific action (body: { action, parameters })',\n 'GET /config': 'View agent configuration (redacted)',\n 'POST /shutdown': 'Graceful shutdown',\n },\n });\n });\n\n router.get('/health', (_req: Request, res: Response) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n });\n\n router.get('/status', (_req: Request, res: Response) => {\n res.json({\n name: agent.name,\n state: agent.getState(),\n type: agent.config.type || 'general',\n uptime: process.uptime(),\n timestamp: new Date().toISOString(),\n });\n });\n\n router.post('/message', async (req: Request, res: Response) => {\n try {\n const { message } = req.body;\n if (!message) {\n res.status(400).json({ error: 'Missing message field' });\n return;\n }\n\n const response = await agent.getLLM().generateText(message, {\n systemPrompt: `You are ${agent.name}. ${agent.config.personality.bio}`,\n temperature: agent.config.llm.temperature,\n });\n\n res.json({ response });\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.post('/action', async (req: Request, res: Response) => {\n try {\n const { action, parameters } = req.body;\n if (!action) {\n res.status(400).json({ error: 'Missing action field' });\n return;\n }\n\n const result = await agent.act(action, parameters || {});\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.get('/config', (_req: Request, res: Response) => {\n // Return config without sensitive fields\n const safeConfig = {\n name: agent.config.name,\n type: agent.config.type,\n personality: agent.config.personality,\n behaviors: {\n autonomous: agent.config.behaviors.autonomous,\n decisionMaking: agent.config.behaviors.decisionMaking,\n actionsPerHour: typeof agent.config.behaviors.actionsPerHour === 'function'\n ? '(dynamic)'\n : agent.config.behaviors.actionsPerHour,\n sleepSchedule: agent.config.behaviors.sleepSchedule,\n },\n memory: { type: agent.config.memory.type },\n actions: agent.config.actions,\n };\n\n res.json(safeConfig);\n });\n\n router.post('/shutdown', async (_req: Request, res: Response) => {\n res.json({ message: 'Shutting down...' });\n await agent.stop();\n process.exit(0);\n });\n\n return router;\n}\n","import type { Request, Response, NextFunction } from 'express';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport function requestLogger(req: Request, _res: Response, next: NextFunction): void {\n logger.debug(`${req.method} ${req.path}`);\n next();\n}\n\nexport function errorHandler(err: Error, _req: Request, res: Response, _next: NextFunction): void {\n logger.error(`Server error: ${err.message}`);\n res.status(500).json({ error: err.message });\n}\n\nexport function authMiddleware(req: Request, res: Response, next: NextFunction): void {\n const authToken = process.env.AGENT_AUTH_TOKEN;\n\n // If no auth token is configured, skip authentication\n if (!authToken) {\n next();\n return;\n }\n\n const provided = req.headers.authorization?.replace('Bearer ', '');\n if (provided !== authToken) {\n res.status(401).json({ error: 'Unauthorized' });\n return;\n }\n\n next();\n}\n"],"mappings":"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","names":["winston","label","logger","logger","Anthropic","OpenAI","axios","logger","axios","matter","module","logger","import_express","logger","logger","express"]}
package/dist/index.mjs CHANGED
@@ -1485,6 +1485,22 @@ import express from "express";
1485
1485
  import { Router } from "express";
1486
1486
  function createRoutes(agent) {
1487
1487
  const router = Router();
1488
+ router.get("/", (_req, res) => {
1489
+ res.json({
1490
+ agent: agent.name,
1491
+ type: agent.config.type || "general",
1492
+ state: agent.getState(),
1493
+ endpoints: {
1494
+ "GET /": "This overview",
1495
+ "GET /health": "Health check",
1496
+ "GET /status": "Agent status and uptime",
1497
+ "POST /message": "Send a message to the agent (body: { message })",
1498
+ "POST /action": "Trigger a specific action (body: { action, parameters })",
1499
+ "GET /config": "View agent configuration (redacted)",
1500
+ "POST /shutdown": "Graceful shutdown"
1501
+ }
1502
+ });
1503
+ });
1488
1504
  router.get("/health", (_req, res) => {
1489
1505
  res.json({ status: "ok", timestamp: (/* @__PURE__ */ new Date()).toISOString() });
1490
1506
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger.ts","../src/agent/scheduler.ts","../src/actions/registry.ts","../src/actions/ActionHandler.ts","../src/actions/built-in/social.ts","../src/actions/built-in/index.ts","../src/llm/prompt.ts","../src/actions/interpreter.ts","../src/memory/Memory.ts","../src/memory/shortterm.ts","../src/llm/anthropic.ts","../src/llm/Provider.ts","../src/llm/openai.ts","../src/social/moltbook.ts","../src/social/SocialAdapter.ts","../src/social/twitter.ts","../src/agent/Agent.ts","../src/config/ConfigLoader.ts","../src/config/MarkdownParser.ts","../src/config/types.ts","../src/config/validator.ts","../src/memory/longterm.ts","../src/server/app.ts","../src/server/routes.ts","../src/server/middleware.ts"],"sourcesContent":["import winston from 'winston';\n\nconst logLevel = process.env.LOG_LEVEL || 'info';\n\nexport function createLogger(label: string): winston.Logger {\n return winston.createLogger({\n level: logLevel,\n format: winston.format.combine(\n winston.format.timestamp(),\n winston.format.label({ label }),\n winston.format.printf(({ timestamp, level, label, message, ...meta }) => {\n const metaStr = Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';\n return `${timestamp} [${label}] ${level}: ${message}${metaStr}`;\n }),\n ),\n transports: [new winston.transports.Console()],\n });\n}\n","import { createLogger } from '../logger.js';\n\nconst logger = createLogger('Scheduler');\n\nexport interface ScheduledJob {\n name: string;\n intervalMs: number;\n handler: () => Promise<void>;\n lastRun?: number;\n}\n\nexport class Scheduler {\n private jobs: ScheduledJob[] = [];\n private timers: Map<string, ReturnType<typeof setInterval>> = new Map();\n private running = false;\n\n addJob(job: ScheduledJob): void {\n this.jobs.push(job);\n logger.debug(`Job registered: ${job.name} (every ${job.intervalMs}ms)`);\n }\n\n removeJob(name: string): void {\n this.jobs = this.jobs.filter((j) => j.name !== name);\n const timer = this.timers.get(name);\n if (timer) {\n clearInterval(timer);\n this.timers.delete(name);\n }\n }\n\n start(): void {\n if (this.running) return;\n this.running = true;\n\n for (const job of this.jobs) {\n const timer = setInterval(async () => {\n try {\n logger.debug(`Running job: ${job.name}`);\n await job.handler();\n job.lastRun = Date.now();\n } catch (error) {\n logger.error(`Job failed: ${job.name}`, {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }, job.intervalMs);\n\n this.timers.set(job.name, timer);\n }\n\n logger.info(`Scheduler started with ${this.jobs.length} jobs`);\n }\n\n stop(): void {\n this.running = false;\n for (const [name, timer] of this.timers) {\n clearInterval(timer);\n }\n this.timers.clear();\n logger.info('Scheduler stopped');\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getJobs(): ScheduledJob[] {\n return [...this.jobs];\n }\n}\n","\nimport type { Action } from '../config/types.js';\n\nexport class ActionRegistry {\n private actions = new Map<string, Action>();\n\n register(action: Action): void {\n if (this.actions.has(action.name)) {\n throw new Error(`Action \"${action.name}\" is already registered`);\n }\n this.actions.set(action.name, action);\n }\n\n unregister(name: string): void {\n this.actions.delete(name);\n }\n\n get(name: string): Action | undefined {\n return this.actions.get(name);\n }\n\n has(name: string): boolean {\n return this.actions.has(name);\n }\n\n list(): Action[] {\n return Array.from(this.actions.values());\n }\n\n listNames(): string[] {\n return Array.from(this.actions.keys());\n }\n}\n","import { ActionRegistry } from './registry.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('ActionHandler');\n\nexport class ActionExecutionError extends Error {\n constructor(\n message: string,\n public actionName: string,\n public recoverable: boolean = true,\n ) {\n super(message);\n this.name = 'ActionExecutionError';\n }\n}\n\nexport class ActionHandler {\n private registry: ActionRegistry;\n\n constructor(registry: ActionRegistry) {\n this.registry = registry;\n }\n\n async execute(actionName: string, context: ActionContext): Promise<ActionResult> {\n const action = this.registry.get(actionName);\n\n if (!action) {\n throw new ActionExecutionError(\n `Action \"${actionName}\" not found in registry`,\n actionName,\n false,\n );\n }\n\n logger.info(`Executing action: ${actionName}`);\n\n try {\n const result = await action.execute(context);\n logger.info(`Action completed: ${actionName}`, { success: result.success });\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Action failed: ${actionName}`, { error: message });\n throw new ActionExecutionError(\n `Action \"${actionName}\" failed: ${message}`,\n actionName,\n );\n }\n }\n\n getAvailableActions(): Array<{ name: string; description: string }> {\n return this.registry.list().map((action) => ({\n name: action.name,\n description: action.description,\n }));\n }\n}\n","import type { Action, ActionContext, ActionResult } from '../../config/types.js';\n\nexport const postSocialUpdateAction: Action = {\n name: 'post_social_update',\n description: 'Post a status update to configured social platforms',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { content, platforms } = context.parameters as {\n content: string;\n platforms?: string[];\n };\n\n if (!content) {\n return { success: false, error: 'Missing required parameter: content' };\n }\n\n const results: Record<string, unknown> = {};\n const socialAdapters = context.agent?.socialAdapters || {};\n const targetPlatforms = platforms || Object.keys(socialAdapters);\n\n for (const platform of targetPlatforms) {\n const adapter = socialAdapters[platform];\n if (!adapter) continue;\n\n try {\n const result = await adapter.post(content);\n results[platform] = result;\n } catch (error) {\n results[platform] = {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return { success: true, data: results };\n },\n};\n\nexport const respondToMentionAction: Action = {\n name: 'respond_to_mention',\n description: 'Respond to a social platform mention',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { mentionId, content, platform } = context.parameters as {\n mentionId: string;\n content: string;\n platform: string;\n };\n\n if (!mentionId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: mentionId, content, platform' };\n }\n\n const adapter = context.agent?.socialAdapters?.[platform];\n if (!adapter) {\n return { success: false, error: `No adapter configured for platform: ${platform}` };\n }\n\n const result = await adapter.reply(mentionId, content);\n return { success: true, data: result };\n },\n};\n\nexport const dmUserAction: Action = {\n name: 'dm_user',\n description: 'Send a direct message to a user on a social platform',\n async execute(context: ActionContext): Promise<ActionResult> {\n // DM functionality depends on platform-specific APIs\n // This is a placeholder for the generic interface\n const { userId, content, platform } = context.parameters as {\n userId: string;\n content: string;\n platform: string;\n };\n\n if (!userId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: userId, content, platform' };\n }\n\n return {\n success: false,\n error: `DM not yet implemented for platform: ${platform}`,\n };\n },\n};\n\nexport const scheduleTaskAction: Action = {\n name: 'schedule_task',\n description: 'Schedule a task for later execution',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { taskName, delay, parameters } = context.parameters as {\n taskName: string;\n delay: number;\n parameters?: Record<string, unknown>;\n };\n\n if (!taskName || delay === undefined) {\n return { success: false, error: 'Missing required parameters: taskName, delay' };\n }\n\n // Store scheduled task in memory for the scheduler to pick up\n const scheduledTask = {\n taskName,\n executeAt: Date.now() + delay * 1000,\n parameters: parameters || {},\n };\n\n await context.memory.store(`scheduled:${taskName}:${Date.now()}`, scheduledTask);\n\n return { success: true, data: scheduledTask };\n },\n};\n","export {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nimport type { Action } from '../../config/types.js';\nimport {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nexport const builtInActions: Action[] = [\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n];\n","import type { AgentConfig, Action } from '../config/types.js';\n\nexport function buildSystemPrompt(config: AgentConfig): string {\n const parts: string[] = [];\n\n parts.push(`You are ${config.name}, an autonomous AI agent.`);\n\n if (config.type) {\n parts.push(`Your role: ${config.type}.`);\n }\n\n if (config.personality.bio) {\n parts.push(`\\nBackground:\\n${config.personality.bio}`);\n }\n\n if (config.personality.traits.length > 0) {\n parts.push(`\\nPersonality traits: ${config.personality.traits.join(', ')}`);\n }\n\n if (config.llm.systemPrompt) {\n parts.push(`\\n${config.llm.systemPrompt}`);\n }\n\n return parts.join('\\n');\n}\n\nexport function buildDecisionPrompt(\n context: Record<string, unknown>,\n availableActions: Array<{ name: string; description: string }>,\n): string {\n const actionList = availableActions\n .map((a) => `- ${a.name}: ${a.description}`)\n .join('\\n');\n\n return `Given the current context, decide what action to take next.\n\nAvailable actions:\n${actionList}\n\nCurrent context:\n${JSON.stringify(context, null, 2)}\n\nRespond with a JSON object:\n{\n \"action\": \"<action_name>\",\n \"reasoning\": \"<brief explanation>\",\n \"parameters\": { <any parameters for the action> }\n}`;\n}\n\nexport function buildSkillPrompt(skillName: string, skillDescription: string, parameters: Record<string, unknown>): string {\n return `Execute the following skill: ${skillName}\n\nInstructions:\n${skillDescription}\n\nParameters:\n${JSON.stringify(parameters, null, 2)}\n\nExecute these instructions step by step and return the result as a JSON object:\n{\n \"success\": true/false,\n \"data\": { <result data> },\n \"reasoning\": \"<what you did and why>\"\n}`;\n}\n","import type { LLMProvider } from '../llm/Provider.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { buildSkillPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('MarkdownInterpreter');\n\nexport class LLMInterpretationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'LLMInterpretationError';\n }\n}\n\n/**\n * Creates an Action from a markdown skill description.\n * The skill's behavior is interpreted by the LLM at runtime.\n */\nexport function createMarkdownAction(\n name: string,\n description: string,\n llmProvider: LLMProvider,\n): Action {\n return {\n name,\n description,\n execute: async (context: ActionContext): Promise<ActionResult> => {\n logger.info(`Interpreting markdown skill: ${name}`);\n\n const prompt = buildSkillPrompt(name, description, context.parameters);\n\n try {\n const response = await llmProvider.generateText(prompt, {\n temperature: 0.7,\n maxTokens: 2048,\n });\n\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new LLMInterpretationError(\n `LLM did not return valid JSON for skill \"${name}\"`,\n );\n }\n\n const result = JSON.parse(jsonMatch[0]);\n return {\n success: result.success ?? true,\n data: result.data || result,\n };\n } catch (error) {\n if (error instanceof LLMInterpretationError) throw error;\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Markdown skill interpretation failed: ${name}`, { error: message });\n throw new LLMInterpretationError(\n `Failed to interpret skill \"${name}\": ${message}`,\n );\n }\n },\n };\n}\n","import type { Experience } from '../config/types.js';\n\nexport abstract class Memory {\n // Short-term (current session)\n abstract remember(key: string, value: unknown, ttl?: number): Promise<void>;\n abstract recall(key: string): Promise<unknown>;\n abstract forget(key: string): Promise<void>;\n\n // Long-term (persistent)\n abstract store(key: string, value: unknown): Promise<void>;\n abstract retrieve(key: string): Promise<unknown>;\n abstract delete(key: string): Promise<void>;\n\n // Semantic memory\n abstract addExperience(experience: Experience): Promise<void>;\n abstract queryExperiences(query: string, limit?: number): Promise<Experience[]>;\n\n // Lifecycle\n abstract clear(): Promise<void>;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\n\ninterface CacheEntry {\n value: unknown;\n expiresAt?: number;\n}\n\nexport class ShortTermMemory extends Memory {\n private cache = new Map<string, CacheEntry>();\n private store_ = new Map<string, unknown>();\n private experiences: Experience[] = [];\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n this.cache.set(key, {\n value,\n expiresAt: ttl ? Date.now() + ttl * 1000 : undefined,\n });\n }\n\n async recall(key: string): Promise<unknown> {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n this.cache.delete(key);\n return undefined;\n }\n\n return entry.value;\n }\n\n async forget(key: string): Promise<void> {\n this.cache.delete(key);\n }\n\n async store(key: string, value: unknown): Promise<void> {\n this.store_.set(key, value);\n }\n\n async retrieve(key: string): Promise<unknown> {\n return this.store_.get(key);\n }\n\n async delete(key: string): Promise<void> {\n this.store_.delete(key);\n }\n\n async addExperience(experience: Experience): Promise<void> {\n this.experiences.push(experience);\n }\n\n async queryExperiences(query: string, limit: number = 10): Promise<Experience[]> {\n // Simple keyword matching — will be replaced with vector search in longterm\n const queryLower = query.toLowerCase();\n return this.experiences\n .filter(\n (exp) =>\n exp.type.toLowerCase().includes(queryLower) ||\n exp.action.toLowerCase().includes(queryLower),\n )\n .slice(-limit);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n this.store_.clear();\n this.experiences = [];\n }\n}\n","import Anthropic from '@anthropic-ai/sdk';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class AnthropicProvider extends LLMProvider {\n name = 'anthropic';\n private client: Anthropic;\n private model: string;\n\n constructor(apiKey: string, model: string = 'claude-sonnet-4-20250514') {\n super();\n this.client = new Anthropic({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop_sequences: options.stopSequences } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return textBlock ? textBlock.text : '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const systemMessages = messages.filter((m) => m.role === 'system');\n const chatMessages = messages\n .filter((m) => m.role !== 'system')\n .map((m) => ({ role: m.role as 'user' | 'assistant', content: m.content }));\n\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: chatMessages,\n ...(systemMessages.length > 0 ? { system: systemMessages.map((m) => m.content).join('\\n') } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return { role: 'assistant', content: textBlock ? textBlock.text : '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const stream = this.client.messages.stream({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const event of stream) {\n if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {\n yield event.delta.text;\n }\n }\n }\n}\n","export interface GenerateOptions {\n temperature?: number;\n maxTokens?: number;\n stopSequences?: string[];\n systemPrompt?: string;\n}\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant';\n content: string;\n}\n\nexport interface StructuredSchema {\n type: string;\n properties?: Record<string, unknown>;\n required?: string[];\n}\n\nexport abstract class LLMProvider {\n abstract name: string;\n\n abstract generateText(prompt: string, options?: GenerateOptions): Promise<string>;\n\n abstract generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T>;\n\n abstract chat(messages: Message[], options?: GenerateOptions): Promise<Message>;\n\n abstract streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string>;\n}\n","import OpenAI from 'openai';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class OpenAIProvider extends LLMProvider {\n name = 'openai';\n private client: OpenAI;\n private model: string;\n\n constructor(apiKey: string, model: string = 'gpt-4o') {\n super();\n this.client = new OpenAI({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop: options.stopSequences } : {}),\n });\n\n return response.choices[0]?.message?.content || '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const openaiMessages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages: openaiMessages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n return { role: 'assistant', content: response.choices[0]?.message?.content || '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const stream = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n stream: true,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content;\n if (delta) yield delta;\n }\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { MoltbookConfig } from '../config/types.js';\n\nexport class MoltbookAdapter extends SocialAdapter {\n platform = 'moltbook';\n private client: AxiosInstance;\n private config: MoltbookConfig;\n\n constructor(config: MoltbookConfig) {\n super();\n this.config = config;\n this.client = axios.create({\n baseURL: config.baseUrl || 'https://api.moltbook.com',\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n }\n\n async connect(): Promise<void> {\n // Verify API key is valid\n await this.client.get('/me');\n }\n\n async disconnect(): Promise<void> {\n // No persistent connection to close\n }\n\n async post(content: string): Promise<PostResult> {\n const response = await this.client.post('/posts', { content });\n return {\n id: response.data.id,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async reply(postId: string, content: string): Promise<ReplyResult> {\n const response = await this.client.post(`/posts/${postId}/replies`, { content });\n return {\n id: response.data.id,\n parentId: postId,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async like(postId: string): Promise<void> {\n await this.client.post(`/posts/${postId}/like`);\n }\n\n async follow(userId: string): Promise<void> {\n await this.client.post(`/users/${userId}/follow`);\n }\n\n async getMentions(): Promise<Mention[]> {\n const response = await this.client.get('/mentions');\n return response.data.mentions.map((m: any) => ({\n id: m.id,\n authorId: m.author_id,\n authorName: m.author_name,\n content: m.content,\n timestamp: new Date(m.created_at),\n platform: 'moltbook',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const params: Record<string, unknown> = {};\n if (options?.limit) params.limit = options.limit;\n if (options?.cursor) params.cursor = options.cursor;\n if (options?.since) params.since = options.since.toISOString();\n\n const response = await this.client.get('/feed', { params });\n return response.data.posts.map((p: any) => ({\n id: p.id,\n authorId: p.author_id,\n authorName: p.author_name,\n content: p.content,\n timestamp: new Date(p.created_at),\n platform: 'moltbook',\n likes: p.likes_count,\n replies: p.replies_count,\n reposts: p.reposts_count,\n mentions: p.mentions || [],\n url: p.url,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const response = await this.client.get(`/users/${userId}`);\n return {\n id: response.data.id,\n name: response.data.name,\n bio: response.data.bio,\n followers: response.data.followers_count,\n following: response.data.following_count,\n platform: 'moltbook',\n };\n }\n}\n","import type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\n\nexport abstract class SocialAdapter {\n abstract platform: string;\n\n abstract post(content: string): Promise<PostResult>;\n abstract reply(id: string, content: string): Promise<ReplyResult>;\n abstract like(id: string): Promise<void>;\n abstract follow(userId: string): Promise<void>;\n abstract getMentions(): Promise<Mention[]>;\n abstract getFeed(options?: FeedOptions): Promise<Post[]>;\n abstract getProfile(userId: string): Promise<Profile>;\n\n abstract connect(): Promise<void>;\n abstract disconnect(): Promise<void>;\n}\n","import { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { TwitterConfig } from '../config/types.js';\n\nexport class TwitterAdapter extends SocialAdapter {\n platform = 'twitter';\n private config: TwitterConfig;\n private client: any; // twitter-api-v2 client\n\n constructor(config: TwitterConfig) {\n super();\n this.config = config;\n }\n\n async connect(): Promise<void> {\n // Dynamic import to keep twitter-api-v2 optional\n const { TwitterApi } = await import('twitter-api-v2');\n this.client = new TwitterApi({\n appKey: this.config.credentials.apiKey,\n appSecret: this.config.credentials.apiSecret,\n accessToken: this.config.credentials.accessToken,\n accessSecret: this.config.credentials.accessSecret,\n });\n\n // Verify credentials\n await this.client.v2.me();\n }\n\n async disconnect(): Promise<void> {\n this.client = null;\n }\n\n async post(content: string): Promise<PostResult> {\n const tweet = await this.client.v2.tweet(content);\n return {\n id: tweet.data.id,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async reply(tweetId: string, content: string): Promise<ReplyResult> {\n const tweet = await this.client.v2.reply(content, tweetId);\n return {\n id: tweet.data.id,\n parentId: tweetId,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async like(tweetId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.like(me.data.id, tweetId);\n }\n\n async follow(userId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.follow(me.data.id, userId);\n }\n\n async getMentions(): Promise<Mention[]> {\n const me = await this.client.v2.me();\n const mentions = await this.client.v2.userMentionTimeline(me.data.id, {\n max_results: 20,\n expansions: ['author_id'],\n 'tweet.fields': ['created_at'],\n 'user.fields': ['name', 'username'],\n });\n\n const users = new Map<string, string>();\n if (mentions.includes?.users) {\n for (const user of mentions.includes.users) {\n users.set(user.id, user.username);\n }\n }\n\n return (mentions.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: tweet.author_id,\n authorName: users.get(tweet.author_id) || 'unknown',\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const me = await this.client.v2.me();\n const timeline = await this.client.v2.userTimeline(me.data.id, {\n max_results: options?.limit || 20,\n 'tweet.fields': ['created_at', 'public_metrics'],\n });\n\n return (timeline.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: me.data.id,\n authorName: me.data.username,\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n likes: tweet.public_metrics?.like_count,\n replies: tweet.public_metrics?.reply_count,\n reposts: tweet.public_metrics?.retweet_count,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const user = await this.client.v2.user(userId, {\n 'user.fields': ['description', 'public_metrics'],\n });\n\n return {\n id: user.data.id,\n name: user.data.name,\n bio: user.data.description,\n followers: user.data.public_metrics?.followers_count,\n following: user.data.public_metrics?.following_count,\n platform: 'twitter',\n };\n }\n}\n","import type { AgentConfig, Decision, Experience, ActionResult, Action } from '../config/types.js';\nimport type { LifecycleHooks } from './lifecycle.js';\nimport { Scheduler } from './scheduler.js';\nimport { ActionRegistry } from '../actions/registry.js';\nimport { ActionHandler } from '../actions/ActionHandler.js';\nimport { builtInActions } from '../actions/built-in/index.js';\nimport { createMarkdownAction } from '../actions/interpreter.js';\nimport { ShortTermMemory } from '../memory/shortterm.js';\nimport type { Memory } from '../memory/Memory.js';\nimport type { LLMProvider } from '../llm/Provider.js';\nimport { AnthropicProvider } from '../llm/anthropic.js';\nimport { OpenAIProvider } from '../llm/openai.js';\nimport { SocialAdapter } from '../social/SocialAdapter.js';\nimport { MoltbookAdapter } from '../social/moltbook.js';\nimport { TwitterAdapter } from '../social/twitter.js';\nimport { buildSystemPrompt, buildDecisionPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Agent');\n\nexport type AgentState = 'idle' | 'initializing' | 'running' | 'stopping' | 'stopped' | 'error';\n\nexport class Agent {\n readonly config: AgentConfig;\n\n private state: AgentState = 'idle';\n private llm!: LLMProvider;\n private memory_: Memory;\n private scheduler: Scheduler;\n private actionRegistry: ActionRegistry;\n private actionHandler: ActionHandler;\n private hooks: LifecycleHooks = {};\n private tickTimer?: ReturnType<typeof setInterval>;\n private systemPrompt: string;\n\n socialAdapters: Record<string, SocialAdapter> = {};\n\n constructor(config: AgentConfig, hooks?: LifecycleHooks) {\n this.config = config;\n this.hooks = hooks || {};\n this.memory_ = new ShortTermMemory();\n this.scheduler = new Scheduler();\n this.actionRegistry = new ActionRegistry();\n this.actionHandler = new ActionHandler(this.actionRegistry);\n this.systemPrompt = buildSystemPrompt(config);\n }\n\n get name(): string {\n return this.config.name;\n }\n\n getState(): AgentState {\n return this.state;\n }\n\n getMemory(): Memory {\n return this.memory_;\n }\n\n getLLM(): LLMProvider {\n return this.llm;\n }\n\n getActionRegistry(): ActionRegistry {\n return this.actionRegistry;\n }\n\n // ── Configuration Methods ──\n\n setSystemPrompt(prompt: string): void {\n this.systemPrompt = prompt;\n }\n\n appendSystemPrompt(additional: string): void {\n this.systemPrompt += '\\n\\n' + additional;\n }\n\n getSystemPrompt(): string {\n return this.systemPrompt;\n }\n\n setHooks(hooks: LifecycleHooks): void {\n this.hooks = hooks;\n }\n\n mergeHooks(hooks: Partial<LifecycleHooks>): void {\n this.hooks = { ...this.hooks, ...hooks };\n }\n\n setMemory(memory: Memory): void {\n this.memory_ = memory;\n }\n\n async preloadMemory(entries: Record<string, unknown>): Promise<void> {\n for (const [key, value] of Object.entries(entries)) {\n await this.memory_.remember(key, value);\n }\n }\n\n registerAction(action: Action): void {\n this.actionRegistry.register(action);\n }\n\n // ── Lifecycle ──\n\n async init(): Promise<void> {\n this.state = 'initializing';\n logger.info(`Initializing agent: ${this.config.name}`);\n\n this.initLLM();\n this.registerActions();\n await this.initSocialAdapters();\n\n if (this.hooks.onInit) {\n await this.hooks.onInit(this);\n }\n\n logger.info(`Agent initialized: ${this.config.name}`);\n }\n\n async start(): Promise<void> {\n if (this.state !== 'initializing' && this.state !== 'idle') {\n throw new Error(`Cannot start agent in state: ${this.state}`);\n }\n\n if (this.state === 'idle') {\n await this.init();\n }\n\n this.state = 'running';\n logger.info(`Agent started: ${this.config.name}`);\n\n if (this.hooks.onStart) {\n await this.hooks.onStart(this);\n }\n\n this.scheduler.start();\n\n if (this.config.behaviors.autonomous) {\n this.startAutonomousLoop();\n }\n }\n\n async stop(): Promise<void> {\n this.state = 'stopping';\n logger.info(`Stopping agent: ${this.config.name}`);\n\n if (this.tickTimer) {\n clearInterval(this.tickTimer);\n this.tickTimer = undefined;\n }\n\n this.scheduler.stop();\n\n for (const adapter of Object.values(this.socialAdapters)) {\n await adapter.disconnect();\n }\n\n if (this.hooks.onShutdown) {\n await this.hooks.onShutdown(this);\n }\n\n this.state = 'stopped';\n logger.info(`Agent stopped: ${this.config.name}`);\n }\n\n // ── Decision Loop ──\n\n async think(): Promise<Decision> {\n const context = await this.gatherContext();\n const availableActions = this.actionHandler.getAvailableActions();\n\n const prompt = buildDecisionPrompt(context, availableActions);\n\n const decision = await this.llm.generateStructured<Decision>(\n prompt,\n {\n type: 'object',\n properties: {\n action: { type: 'string' },\n reasoning: { type: 'string' },\n parameters: { type: 'object' },\n },\n required: ['action', 'reasoning', 'parameters'],\n },\n { systemPrompt: this.systemPrompt, temperature: this.config.llm.temperature },\n );\n\n logger.debug(`Decision: ${decision.action} — ${decision.reasoning}`);\n return decision;\n }\n\n async act(actionName: string, parameters: Record<string, unknown> = {}): Promise<ActionResult> {\n const context = {\n agent: this,\n memory: this.memory_,\n llm: this.llm,\n parameters,\n };\n\n return this.actionHandler.execute(actionName, context);\n }\n\n async learn(experience: Experience): Promise<void> {\n await this.memory_.addExperience(experience);\n }\n\n async tick(): Promise<void> {\n if (this.state !== 'running') return;\n\n try {\n if (this.hooks.onTick) {\n await this.hooks.onTick(this);\n }\n\n if (this.isSleeping()) return;\n\n const decision = await this.think();\n const result = await this.act(decision.action, decision.parameters);\n\n await this.learn({\n type: 'action',\n action: decision.action,\n result,\n timestamp: new Date(),\n context: { reasoning: decision.reasoning },\n });\n\n if (this.config.webhooks?.onAction) {\n await this.fireWebhook('onAction', decision, result);\n }\n } catch (error) {\n logger.error(`Tick error: ${error instanceof Error ? error.message : error}`);\n if (this.hooks.onError && error instanceof Error) {\n await this.hooks.onError(error, this);\n }\n }\n }\n\n // ── Markdown skill registration ──\n\n registerMarkdownSkills(skills: Array<{ name: string; description: string }>): void {\n for (const skill of skills) {\n const action = createMarkdownAction(skill.name, skill.description, this.llm);\n this.actionRegistry.register(action);\n }\n }\n\n // ── Internal ──\n\n private initLLM(): void {\n const { provider, apiKey, model } = this.config.llm;\n\n switch (provider) {\n case 'anthropic':\n this.llm = new AnthropicProvider(apiKey, model);\n break;\n case 'openai':\n this.llm = new OpenAIProvider(apiKey, model);\n break;\n default:\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n }\n\n private registerActions(): void {\n // Register built-in actions that the config references\n for (const action of builtInActions) {\n if (this.config.actions.includes(action.name)) {\n this.actionRegistry.register(action);\n }\n }\n\n // Register custom actions (code-based)\n if (this.config.customActions) {\n for (const action of this.config.customActions) {\n this.actionRegistry.register(action);\n }\n }\n }\n\n private async initSocialAdapters(): Promise<void> {\n const { social } = this.config;\n\n if (social.moltbook?.enabled) {\n const adapter = new MoltbookAdapter(social.moltbook);\n try {\n await adapter.connect();\n this.socialAdapters['moltbook'] = adapter;\n logger.info('Moltbook adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Moltbook adapter: ${error}`);\n }\n }\n\n if (social.twitter?.enabled) {\n const adapter = new TwitterAdapter(social.twitter);\n try {\n await adapter.connect();\n this.socialAdapters['twitter'] = adapter;\n logger.info('Twitter adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Twitter adapter: ${error}`);\n }\n }\n }\n\n private startAutonomousLoop(): void {\n const actionsPerHour = typeof this.config.behaviors.actionsPerHour === 'function'\n ? this.config.behaviors.actionsPerHour({})\n : this.config.behaviors.actionsPerHour || 5;\n\n const intervalMs = Math.floor(3600000 / actionsPerHour);\n\n this.tickTimer = setInterval(() => this.tick(), intervalMs);\n logger.info(`Autonomous loop started: ~${actionsPerHour} actions/hour (every ${intervalMs}ms)`);\n }\n\n private isSleeping(): boolean {\n const schedule = this.config.behaviors.sleepSchedule;\n if (!schedule) return false;\n\n const now = new Date();\n const hour = now.getHours();\n\n if (schedule.start > schedule.end) {\n // Wraps midnight (e.g., 22-6)\n return hour >= schedule.start || hour < schedule.end;\n }\n return hour >= schedule.start && hour < schedule.end;\n }\n\n private async gatherContext(): Promise<Record<string, unknown>> {\n return {\n agentName: this.config.name,\n agentType: this.config.type,\n currentTime: new Date().toISOString(),\n state: this.state,\n personality: this.config.personality.traits,\n };\n }\n\n private async fireWebhook(event: string, ...args: unknown[]): Promise<void> {\n try {\n const hook = this.config.webhooks?.[event as keyof typeof this.config.webhooks];\n if (typeof hook === 'function') {\n await (hook as Function)(...args);\n } else if (typeof hook === 'string') {\n const { default: axios } = await import('axios');\n await axios.post(hook, { event, data: args });\n }\n } catch (error) {\n logger.error(`Webhook ${event} failed: ${error}`);\n }\n }\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { MarkdownParser } from './MarkdownParser.js';\nimport { validateConfig } from './validator.js';\nimport type { AgentConfig } from './types.js';\n\nexport type ConfigType = 'code' | 'markdown';\n\nexport class ConfigurationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ConfigurationError';\n }\n}\n\nexport class ConfigLoader {\n private markdownParser = new MarkdownParser();\n\n async load(directory: string): Promise<{ config: AgentConfig; type: ConfigType }> {\n const codeConfigPath = resolve(directory, 'agent.config.ts');\n const mdConfigPath = resolve(directory, 'agent.md');\n\n if (existsSync(codeConfigPath)) {\n return { config: await this.loadCode(codeConfigPath), type: 'code' };\n }\n\n if (existsSync(mdConfigPath)) {\n return { config: await this.loadMarkdown(mdConfigPath), type: 'markdown' };\n }\n\n throw new ConfigurationError(\n `No agent configuration found in ${directory}. Expected agent.config.ts or agent.md`,\n );\n }\n\n async loadCode(filePath: string): Promise<AgentConfig> {\n try {\n // Use jiti to load TypeScript files at runtime without pre-compilation\n const { createJiti } = await import('jiti');\n const jiti = createJiti(pathToFileURL(filePath).href, {\n interopDefault: true,\n moduleCache: false,\n });\n\n const module = await jiti.import(filePath) as any;\n const config = module.default || module;\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load code config from ${filePath}: ${error}`);\n }\n }\n\n async loadMarkdown(filePath: string): Promise<AgentConfig> {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const partialConfig = this.markdownParser.parse(content);\n\n // Markdown configs need LLM settings from env or frontmatter\n const config = {\n ...partialConfig,\n llm: partialConfig.llm || {\n provider: (process.env.LLM_PROVIDER as 'anthropic' | 'openai') || 'anthropic',\n model: process.env.LLM_MODEL || 'claude-sonnet-4-20250514',\n apiKey: process.env.ANTHROPIC_API_KEY || process.env.OPENAI_API_KEY || '',\n },\n };\n\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load markdown config from ${filePath}: ${error}`);\n }\n }\n}\n","import matter from 'gray-matter';\nimport type { AgentConfig } from './types.js';\n\ninterface ParsedSection {\n title: string;\n level: number;\n content: string;\n children: ParsedSection[];\n}\n\nexport class MarkdownParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MarkdownParseError';\n }\n}\n\nexport class MarkdownParser {\n parse(markdown: string): Partial<AgentConfig> {\n const { data: frontmatter, content } = matter(markdown);\n const sections = this.parseSections(content);\n\n const identity = this.findSection(sections, 'Identity');\n const bio = this.findSection(sections, 'Bio');\n const social = this.findSection(sections, 'Social Platforms');\n const behaviors = this.findSection(sections, 'Behaviors');\n const memory = this.findSection(sections, 'Memory');\n const skills = this.findSection(sections, 'Skills');\n const scheduling = this.findSection(sections, 'Scheduling');\n\n const identityData = this.parseIdentity(identity);\n const bioText = bio ? bio.content.trim() : (identityData?.personality?.bio || '');\n\n const config: Partial<AgentConfig> = {\n ...identityData,\n personality: {\n traits: identityData?.personality?.traits || [],\n bio: bioText,\n },\n ...(social ? { social: this.parseSocial(social) } : {}),\n ...(behaviors ? { behaviors: this.parseBehaviors(behaviors) } : {}),\n ...(memory ? { memory: this.parseMemory(memory) } : {}),\n actions: [],\n ...frontmatter,\n };\n\n if (skills) {\n config.actions = skills.children.map((s) => this.toSnakeCase(s.title));\n }\n\n return config;\n }\n\n parseSkills(markdown: string): Array<{ name: string; description: string }> {\n const { content } = matter(markdown);\n const sections = this.parseSections(content);\n const skills = this.findSection(sections, 'Skills');\n\n if (!skills) return [];\n\n return skills.children.map((child) => ({\n name: this.toSnakeCase(child.title),\n description: child.content.trim(),\n }));\n }\n\n private parseSections(content: string): ParsedSection[] {\n const lines = content.split('\\n');\n const root: ParsedSection[] = [];\n const stack: Array<{ level: number; section: ParsedSection }> = [];\n\n for (const line of lines) {\n const match = line.match(/^(#{1,6})\\s+(.+)/);\n if (match) {\n const level = match[1].length;\n const title = match[2].trim();\n const section: ParsedSection = { title, level, content: '', children: [] };\n\n while (stack.length > 0 && stack[stack.length - 1].level >= level) {\n stack.pop();\n }\n\n if (stack.length === 0) {\n root.push(section);\n } else {\n stack[stack.length - 1].section.children.push(section);\n }\n\n stack.push({ level, section });\n } else if (stack.length > 0) {\n stack[stack.length - 1].section.content += line + '\\n';\n }\n }\n\n return root;\n }\n\n private findSection(sections: ParsedSection[], title: string): ParsedSection | undefined {\n for (const section of sections) {\n if (section.title.toLowerCase() === title.toLowerCase()) return section;\n const found = this.findSection(section.children, title);\n if (found) return found;\n }\n return undefined;\n }\n\n private parseIdentity(section?: ParsedSection): Partial<AgentConfig> | undefined {\n if (!section) return undefined;\n const fields = this.parseKeyValueLines(section.content);\n return {\n name: fields['name'] || 'Unnamed Agent',\n type: fields['type'],\n personality: {\n traits: (fields['personality'] || '').split(',').map((t: string) => t.trim()).filter(Boolean),\n bio: '',\n },\n };\n }\n\n private parseSocial(section: ParsedSection): Record<string, any> {\n const social: Record<string, any> = {};\n\n for (const child of section.children) {\n const platform = child.title.toLowerCase();\n const fields = this.parseKeyValueLines(child.content);\n social[platform] = {\n enabled: fields['enabled'] === 'true',\n ...fields,\n };\n }\n\n return social;\n }\n\n private parseBehaviors(section: ParsedSection): AgentConfig['behaviors'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n autonomous: fields['autonomous'] === 'true',\n decisionMaking: (fields['decision_making'] || 'llm-driven') as AgentConfig['behaviors']['decisionMaking'],\n actionsPerHour: fields['actions_per_hour'] ? parseInt(fields['actions_per_hour'], 10) : undefined,\n sleepSchedule: fields['sleep_schedule'] ? this.parseSleepSchedule(fields['sleep_schedule']) : undefined,\n };\n }\n\n private parseMemory(section: ParsedSection): AgentConfig['memory'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n type: (fields['type'] || 'memory') as AgentConfig['memory']['type'],\n retention: fields['retention'],\n };\n }\n\n private parseSleepSchedule(value: string): { start: number; end: number; timezone?: string } {\n const match = value.match(/(\\d{1,2}):?\\d{0,2}\\s*-\\s*(\\d{1,2}):?\\d{0,2}\\s*(.*)?/);\n if (!match) return { start: 22, end: 6 };\n return {\n start: parseInt(match[1], 10),\n end: parseInt(match[2], 10),\n timezone: match[3]?.trim() || undefined,\n };\n }\n\n private parseKeyValueLines(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split('\\n')) {\n const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\\s*(.+)/);\n if (match) {\n result[match[1].trim()] = match[2].trim();\n }\n }\n return result;\n }\n\n private toSnakeCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n }\n}\n","import { z } from 'zod';\n\n// ── Social Platform Configs ──\n\nexport interface MoltbookConfig {\n enabled: boolean;\n apiKey: string;\n baseUrl?: string;\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n engagementRate?: 'low' | 'medium' | 'high';\n autoReply?: boolean;\n replyFilter?: (post: any) => boolean;\n}\n\nexport interface TwitterConfig {\n enabled: boolean;\n credentials: {\n apiKey: string;\n apiSecret: string;\n accessToken: string;\n accessSecret: string;\n bearerToken?: string;\n };\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n replyToMentions?: boolean;\n autoRetweet?: boolean;\n maxTweetsPerDay?: number;\n contentStrategy?: {\n threadTopics?: string[];\n hashtagStrategy?: string;\n mentionBehavior?: string;\n };\n}\n\nexport interface SocialPlatformConfig {\n enabled: boolean;\n [key: string]: unknown;\n}\n\nexport type SocialConfig = {\n moltbook?: MoltbookConfig;\n twitter?: TwitterConfig;\n} & Record<string, SocialPlatformConfig | MoltbookConfig | TwitterConfig | undefined>;\n\n// ── Behavior Configs ──\n\nexport interface BehaviorTrigger {\n condition: (context: any) => boolean;\n action: string;\n params?: Record<string, unknown>;\n}\n\n// ── Memory Configs ──\n\nexport interface RedisConfig {\n url: string;\n keyPrefix?: string;\n ttl?: number;\n}\n\nexport interface PostgresConfig {\n url: string;\n schema?: string;\n tableName?: string;\n}\n\n// ── Plugin Interface ──\n\nexport interface Plugin {\n name: string;\n version: string;\n init?: (agent: any) => Promise<void>;\n destroy?: () => Promise<void>;\n}\n\n// ── Main Agent Config ──\n\nexport interface AgentConfig {\n name: string;\n type?: string;\n\n personality: {\n traits: string[];\n bio: string;\n [key: string]: unknown;\n };\n\n llm: {\n provider: 'anthropic' | 'openai';\n model: string;\n apiKey: string;\n temperature?: number;\n maxTokens?: number;\n systemPrompt?: string;\n };\n\n social: SocialConfig;\n\n behaviors: {\n autonomous: boolean;\n decisionMaking: 'llm-driven' | 'rule-based' | 'hybrid';\n actionsPerHour?: number | ((context: any) => number);\n sleepSchedule?: { start: number; end: number; timezone?: string };\n triggers?: BehaviorTrigger[];\n };\n\n memory: {\n type: 'memory' | 'redis' | 'postgres' | 'hybrid';\n retention?: string;\n redis?: RedisConfig;\n postgres?: PostgresConfig;\n };\n\n actions: string[];\n customActions?: Action[];\n\n webhooks?: {\n onAction?: string | ((action: any, result: any) => Promise<void>);\n onError?: string;\n };\n\n plugins?: Plugin[];\n}\n\n// ── Action Types ──\n\nexport interface ActionContext {\n agent: any;\n memory: any;\n llm: any;\n parameters: Record<string, unknown>;\n}\n\nexport interface ActionResult {\n success: boolean;\n data?: unknown;\n error?: string;\n}\n\nexport interface Action {\n name: string;\n description: string;\n parameters?: Record<string, unknown>;\n execute: (context: ActionContext) => Promise<ActionResult>;\n}\n\n// ── Decision / Experience Types ──\n\nexport interface Decision {\n action: string;\n reasoning: string;\n parameters: Record<string, unknown>;\n}\n\nexport interface Experience {\n type: string;\n action: string;\n result: ActionResult;\n timestamp: Date;\n context?: Record<string, unknown>;\n}\n\n// ── Deployment Types ──\n\nexport interface DeploymentConfig {\n platform: 'railway' | 'render' | 'aws' | 'digitalocean' | 'custom';\n region?: string;\n instanceType?: string;\n autoScale?: boolean;\n customConfig?: CustomDeploymentConfig;\n}\n\nexport interface DeploymentResult {\n success: boolean;\n url?: string;\n deploymentId?: string;\n logs?: string[];\n error?: string;\n}\n\nexport interface DeploymentStatus {\n state: 'running' | 'stopped' | 'deploying' | 'failed' | 'unknown';\n url?: string;\n uptime?: number;\n lastDeployed?: Date;\n}\n\nexport interface CustomDeploymentConfig {\n deploymentMethod: 'docker' | 'ssh' | 'cli' | 'api';\n buildCommand: string;\n startCommand: string;\n environmentVariables?: Record<string, string>;\n healthCheckUrl?: string;\n port?: number;\n docker?: CustomDockerConfig;\n ssh?: CustomSSHConfig;\n cli?: CustomCLIConfig;\n api?: CustomAPIConfig;\n}\n\nexport interface CustomDockerConfig {\n registry: string;\n imageName: string;\n tag?: string;\n dockerfile?: string;\n buildArgs?: Record<string, string>;\n registryAuth?: {\n username: string;\n password: string;\n };\n hostUrl: string;\n containerPort: number;\n hostPort: number;\n}\n\nexport interface CustomSSHConfig {\n host: string;\n port: number;\n username: string;\n authMethod: 'password' | 'privateKey';\n password?: string;\n privateKeyPath?: string;\n deploymentPath: string;\n preDeployCommands?: string[];\n postDeployCommands?: string[];\n}\n\nexport interface CustomCLIConfig {\n cliName: string;\n installCommand?: string;\n loginCommand?: string;\n deployCommand: string;\n statusCommand?: string;\n logsCommand?: string;\n credentials?: Record<string, string>;\n}\n\nexport interface CustomAPIConfig {\n baseUrl: string;\n authType: 'bearer' | 'apiKey' | 'basic' | 'custom';\n authToken?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n endpoints: {\n deploy: string;\n status?: string;\n logs?: string;\n rollback?: string;\n };\n requestMethod?: 'POST' | 'PUT';\n payloadTemplate?: Record<string, unknown>;\n}\n\n// ── Social Types ──\n\nexport interface PostResult {\n id: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface ReplyResult {\n id: string;\n parentId: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface Mention {\n id: string;\n authorId: string;\n authorName: string;\n content: string;\n timestamp: Date;\n platform: string;\n}\n\nexport interface Profile {\n id: string;\n name: string;\n bio?: string;\n followers?: number;\n following?: number;\n platform: string;\n}\n\n// ── Zod Schemas for Runtime Validation (markdown configs) ──\n\nexport const AgentConfigSchema = z.object({\n name: z.string().min(1),\n type: z.string().optional(),\n personality: z.object({\n traits: z.array(z.string()),\n bio: z.string(),\n }).passthrough(),\n llm: z.object({\n provider: z.enum(['anthropic', 'openai']),\n model: z.string(),\n apiKey: z.string(),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().positive().optional(),\n systemPrompt: z.string().optional(),\n }),\n social: z.record(z.unknown()).optional(),\n behaviors: z.object({\n autonomous: z.boolean(),\n decisionMaking: z.enum(['llm-driven', 'rule-based', 'hybrid']),\n actionsPerHour: z.number().optional(),\n sleepSchedule: z.object({\n start: z.number(),\n end: z.number(),\n timezone: z.string().optional(),\n }).optional(),\n }),\n memory: z.object({\n type: z.enum(['memory', 'redis', 'postgres', 'hybrid']),\n retention: z.string().optional(),\n }).passthrough(),\n actions: z.array(z.string()),\n}).passthrough();\n","import { AgentConfig, AgentConfigSchema } from './types.js';\n\nexport class ConfigValidationError extends Error {\n constructor(\n message: string,\n public issues: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = 'ConfigValidationError';\n }\n}\n\nexport function validateConfig(config: unknown): AgentConfig {\n const result = AgentConfigSchema.safeParse(config);\n\n if (!result.success) {\n const issues = result.error.issues.map((issue) => ({\n path: issue.path.join('.'),\n message: issue.message,\n }));\n\n throw new ConfigValidationError(\n `Invalid agent configuration:\\n${issues.map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n issues,\n );\n }\n\n return result.data as AgentConfig;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\nimport type { RedisConfig, PostgresConfig } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('LongTermMemory');\n\nexport class LongTermMemory extends Memory {\n private redisConfig?: RedisConfig;\n private postgresConfig?: PostgresConfig;\n private redis: any = null;\n private pg: any = null;\n private initialized = false;\n\n constructor(options: { redis?: RedisConfig; postgres?: PostgresConfig } = {}) {\n super();\n this.redisConfig = options.redis;\n this.postgresConfig = options.postgres;\n }\n\n async init(): Promise<void> {\n if (this.initialized) return;\n\n if (this.redisConfig) {\n await this.initRedis();\n }\n\n if (this.postgresConfig) {\n await this.initPostgres();\n }\n\n this.initialized = true;\n }\n\n // ── Redis: Short-term cache operations ──\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n await this.ensureRedis();\n const serialized = JSON.stringify(value);\n const prefixedKey = this.redisKey(key);\n\n if (ttl) {\n await this.redis.setex(prefixedKey, ttl, serialized);\n } else {\n const defaultTtl = this.redisConfig?.ttl || 86400; // 24h default\n await this.redis.setex(prefixedKey, defaultTtl, serialized);\n }\n }\n\n async recall(key: string): Promise<unknown> {\n await this.ensureRedis();\n const data = await this.redis.get(this.redisKey(key));\n if (data === null) return undefined;\n try {\n return JSON.parse(data);\n } catch {\n return data;\n }\n }\n\n async forget(key: string): Promise<void> {\n await this.ensureRedis();\n await this.redis.del(this.redisKey(key));\n }\n\n // ── Postgres: Persistent storage operations ──\n\n async store(key: string, value: unknown): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(\n `INSERT INTO ${table} (key, value, updated_at)\n VALUES ($1, $2, NOW())\n ON CONFLICT (key) DO UPDATE SET value = $2, updated_at = NOW()`,\n [key, JSON.stringify(value)],\n );\n }\n\n async retrieve(key: string): Promise<unknown> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const result = await this.pg.query(\n `SELECT value FROM ${table} WHERE key = $1`,\n [key],\n );\n if (result.rows.length === 0) return undefined;\n try {\n return JSON.parse(result.rows[0].value);\n } catch {\n return result.rows[0].value;\n }\n }\n\n async delete(key: string): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(`DELETE FROM ${table} WHERE key = $1`, [key]);\n }\n\n // ── Postgres: Experience/semantic storage ──\n\n async addExperience(experience: Experience): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n await this.pg.query(\n `INSERT INTO ${table} (type, action, result, context, timestamp)\n VALUES ($1, $2, $3, $4, $5)`,\n [\n experience.type,\n experience.action,\n JSON.stringify(experience.result),\n JSON.stringify(experience.context || {}),\n experience.timestamp,\n ],\n );\n }\n\n async queryExperiences(query: string, limit = 20): Promise<Experience[]> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n\n // Text search on action and context fields\n const result = await this.pg.query(\n `SELECT type, action, result, context, timestamp FROM ${table}\n WHERE action ILIKE $1 OR context::text ILIKE $1\n ORDER BY timestamp DESC\n LIMIT $2`,\n [`%${query}%`, limit],\n );\n\n return result.rows.map((row: any) => ({\n type: row.type,\n action: row.action,\n result: typeof row.result === 'string' ? JSON.parse(row.result) : row.result,\n context: typeof row.context === 'string' ? JSON.parse(row.context) : row.context,\n timestamp: new Date(row.timestamp),\n }));\n }\n\n async clear(): Promise<void> {\n if (this.redis) {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n const keys = await this.redis.keys(`${prefix}*`);\n if (keys.length > 0) {\n await this.redis.del(...keys);\n }\n }\n\n if (this.pg) {\n await this.pg.query(`DELETE FROM ${this.pgTable()}`);\n await this.pg.query(`DELETE FROM ${this.pgExperienceTable()}`);\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.redis) {\n await this.redis.quit();\n this.redis = null;\n }\n if (this.pg) {\n await this.pg.end();\n this.pg = null;\n }\n this.initialized = false;\n }\n\n // ── Schema setup (call once to create tables) ──\n\n async ensureSchema(): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const expTable = this.pgExperienceTable();\n const schema = this.postgresConfig?.schema || 'public';\n\n await this.pg.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${table} (\n key TEXT PRIMARY KEY,\n value JSONB NOT NULL,\n updated_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${expTable} (\n id SERIAL PRIMARY KEY,\n type TEXT NOT NULL,\n action TEXT NOT NULL,\n result JSONB NOT NULL,\n context JSONB DEFAULT '{}',\n timestamp TIMESTAMPTZ NOT NULL,\n created_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_action\n ON ${expTable} (action)\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_timestamp\n ON ${expTable} (timestamp DESC)\n `);\n }\n\n // ── Internal helpers ──\n\n private async initRedis(): Promise<void> {\n if (!this.redisConfig) throw new Error('Redis config not provided');\n\n try {\n const { default: Redis } = await import('ioredis');\n this.redis = new Redis(this.redisConfig.url);\n logger.info('Redis connection established');\n } catch (error) {\n logger.error(`Failed to connect to Redis: ${error}`);\n throw error;\n }\n }\n\n private async initPostgres(): Promise<void> {\n if (!this.postgresConfig) throw new Error('Postgres config not provided');\n\n try {\n const pg = await import('pg');\n const Pool = pg.default?.Pool || pg.Pool;\n this.pg = new Pool({\n connectionString: this.postgresConfig.url,\n });\n // Test the connection\n await this.pg.query('SELECT 1');\n logger.info('Postgres connection established');\n } catch (error) {\n logger.error(`Failed to connect to Postgres: ${error}`);\n throw error;\n }\n }\n\n private async ensureRedis(): Promise<void> {\n if (!this.redis) {\n if (!this.redisConfig) {\n throw new Error('Redis not configured. Provide redis config in memory settings.');\n }\n await this.initRedis();\n }\n }\n\n private async ensurePostgres(): Promise<void> {\n if (!this.pg) {\n if (!this.postgresConfig) {\n throw new Error('Postgres not configured. Provide postgres config in memory settings.');\n }\n await this.initPostgres();\n }\n }\n\n private redisKey(key: string): string {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n return `${prefix}${key}`;\n }\n\n private pgTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}`;\n }\n\n private pgExperienceTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}_experiences`;\n }\n\n private sanitizeName(): string {\n return (this.postgresConfig?.tableName || 'moltium_memory').replace(/[^a-z0-9_]/g, '_');\n }\n}\n","import express from 'express';\nimport { createRoutes } from './routes.js';\nimport { requestLogger, errorHandler, authMiddleware } from './middleware.js';\nimport type { Agent } from '../agent/Agent.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport interface ServerOptions {\n port?: number;\n host?: string;\n}\n\nexport function createApp(agent: Agent) {\n const app = express();\n\n app.use(express.json());\n app.use(requestLogger);\n app.use(authMiddleware);\n app.use(createRoutes(agent));\n app.use(errorHandler);\n\n return app;\n}\n\nexport async function startServer(agent: Agent, options: ServerOptions = {}): Promise<void> {\n const port = options.port || parseInt(process.env.PORT || '3000', 10);\n const host = options.host || '0.0.0.0';\n\n const app = createApp(agent);\n\n await agent.start();\n\n app.listen(port, host, () => {\n logger.info(`Agent \"${agent.name}\" running at http://${host}:${port}`);\n });\n\n // Graceful shutdown\n const shutdown = async () => {\n logger.info('Received shutdown signal');\n await agent.stop();\n process.exit(0);\n };\n\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n","import { Router, type Request, type Response } from 'express';\nimport type { Agent } from '../agent/Agent.js';\n\nexport function createRoutes(agent: Agent): Router {\n const router = Router();\n\n router.get('/health', (_req: Request, res: Response) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n });\n\n router.get('/status', (_req: Request, res: Response) => {\n res.json({\n name: agent.name,\n state: agent.getState(),\n type: agent.config.type || 'general',\n uptime: process.uptime(),\n timestamp: new Date().toISOString(),\n });\n });\n\n router.post('/message', async (req: Request, res: Response) => {\n try {\n const { message } = req.body;\n if (!message) {\n res.status(400).json({ error: 'Missing message field' });\n return;\n }\n\n const response = await agent.getLLM().generateText(message, {\n systemPrompt: `You are ${agent.name}. ${agent.config.personality.bio}`,\n temperature: agent.config.llm.temperature,\n });\n\n res.json({ response });\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.post('/action', async (req: Request, res: Response) => {\n try {\n const { action, parameters } = req.body;\n if (!action) {\n res.status(400).json({ error: 'Missing action field' });\n return;\n }\n\n const result = await agent.act(action, parameters || {});\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.get('/config', (_req: Request, res: Response) => {\n // Return config without sensitive fields\n const safeConfig = {\n name: agent.config.name,\n type: agent.config.type,\n personality: agent.config.personality,\n behaviors: {\n autonomous: agent.config.behaviors.autonomous,\n decisionMaking: agent.config.behaviors.decisionMaking,\n actionsPerHour: typeof agent.config.behaviors.actionsPerHour === 'function'\n ? '(dynamic)'\n : agent.config.behaviors.actionsPerHour,\n sleepSchedule: agent.config.behaviors.sleepSchedule,\n },\n memory: { type: agent.config.memory.type },\n actions: agent.config.actions,\n };\n\n res.json(safeConfig);\n });\n\n router.post('/shutdown', async (_req: Request, res: Response) => {\n res.json({ message: 'Shutting down...' });\n await agent.stop();\n process.exit(0);\n });\n\n return router;\n}\n","import type { Request, Response, NextFunction } from 'express';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport function requestLogger(req: Request, _res: Response, next: NextFunction): void {\n logger.debug(`${req.method} ${req.path}`);\n next();\n}\n\nexport function errorHandler(err: Error, _req: Request, res: Response, _next: NextFunction): void {\n logger.error(`Server error: ${err.message}`);\n res.status(500).json({ error: err.message });\n}\n\nexport function authMiddleware(req: Request, res: Response, next: NextFunction): void {\n const authToken = process.env.AGENT_AUTH_TOKEN;\n\n // If no auth token is configured, skip authentication\n if (!authToken) {\n next();\n return;\n }\n\n const provided = req.headers.authorization?.replace('Bearer ', '');\n if (provided !== authToken) {\n res.status(401).json({ error: 'Unauthorized' });\n return;\n }\n\n next();\n}\n"],"mappings":"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","names":["label","logger","logger","logger","axios","logger","logger","logger"]}
1
+ {"version":3,"sources":["../src/logger.ts","../src/agent/scheduler.ts","../src/actions/registry.ts","../src/actions/ActionHandler.ts","../src/actions/built-in/social.ts","../src/actions/built-in/index.ts","../src/llm/prompt.ts","../src/actions/interpreter.ts","../src/memory/Memory.ts","../src/memory/shortterm.ts","../src/llm/anthropic.ts","../src/llm/Provider.ts","../src/llm/openai.ts","../src/social/moltbook.ts","../src/social/SocialAdapter.ts","../src/social/twitter.ts","../src/agent/Agent.ts","../src/config/ConfigLoader.ts","../src/config/MarkdownParser.ts","../src/config/types.ts","../src/config/validator.ts","../src/memory/longterm.ts","../src/server/app.ts","../src/server/routes.ts","../src/server/middleware.ts"],"sourcesContent":["import winston from 'winston';\n\nconst logLevel = process.env.LOG_LEVEL || 'info';\n\nexport function createLogger(label: string): winston.Logger {\n return winston.createLogger({\n level: logLevel,\n format: winston.format.combine(\n winston.format.timestamp(),\n winston.format.label({ label }),\n winston.format.printf(({ timestamp, level, label, message, ...meta }) => {\n const metaStr = Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';\n return `${timestamp} [${label}] ${level}: ${message}${metaStr}`;\n }),\n ),\n transports: [new winston.transports.Console()],\n });\n}\n","import { createLogger } from '../logger.js';\n\nconst logger = createLogger('Scheduler');\n\nexport interface ScheduledJob {\n name: string;\n intervalMs: number;\n handler: () => Promise<void>;\n lastRun?: number;\n}\n\nexport class Scheduler {\n private jobs: ScheduledJob[] = [];\n private timers: Map<string, ReturnType<typeof setInterval>> = new Map();\n private running = false;\n\n addJob(job: ScheduledJob): void {\n this.jobs.push(job);\n logger.debug(`Job registered: ${job.name} (every ${job.intervalMs}ms)`);\n }\n\n removeJob(name: string): void {\n this.jobs = this.jobs.filter((j) => j.name !== name);\n const timer = this.timers.get(name);\n if (timer) {\n clearInterval(timer);\n this.timers.delete(name);\n }\n }\n\n start(): void {\n if (this.running) return;\n this.running = true;\n\n for (const job of this.jobs) {\n const timer = setInterval(async () => {\n try {\n logger.debug(`Running job: ${job.name}`);\n await job.handler();\n job.lastRun = Date.now();\n } catch (error) {\n logger.error(`Job failed: ${job.name}`, {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }, job.intervalMs);\n\n this.timers.set(job.name, timer);\n }\n\n logger.info(`Scheduler started with ${this.jobs.length} jobs`);\n }\n\n stop(): void {\n this.running = false;\n for (const [name, timer] of this.timers) {\n clearInterval(timer);\n }\n this.timers.clear();\n logger.info('Scheduler stopped');\n }\n\n isRunning(): boolean {\n return this.running;\n }\n\n getJobs(): ScheduledJob[] {\n return [...this.jobs];\n }\n}\n","\nimport type { Action } from '../config/types.js';\n\nexport class ActionRegistry {\n private actions = new Map<string, Action>();\n\n register(action: Action): void {\n if (this.actions.has(action.name)) {\n throw new Error(`Action \"${action.name}\" is already registered`);\n }\n this.actions.set(action.name, action);\n }\n\n unregister(name: string): void {\n this.actions.delete(name);\n }\n\n get(name: string): Action | undefined {\n return this.actions.get(name);\n }\n\n has(name: string): boolean {\n return this.actions.has(name);\n }\n\n list(): Action[] {\n return Array.from(this.actions.values());\n }\n\n listNames(): string[] {\n return Array.from(this.actions.keys());\n }\n}\n","import { ActionRegistry } from './registry.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('ActionHandler');\n\nexport class ActionExecutionError extends Error {\n constructor(\n message: string,\n public actionName: string,\n public recoverable: boolean = true,\n ) {\n super(message);\n this.name = 'ActionExecutionError';\n }\n}\n\nexport class ActionHandler {\n private registry: ActionRegistry;\n\n constructor(registry: ActionRegistry) {\n this.registry = registry;\n }\n\n async execute(actionName: string, context: ActionContext): Promise<ActionResult> {\n const action = this.registry.get(actionName);\n\n if (!action) {\n throw new ActionExecutionError(\n `Action \"${actionName}\" not found in registry`,\n actionName,\n false,\n );\n }\n\n logger.info(`Executing action: ${actionName}`);\n\n try {\n const result = await action.execute(context);\n logger.info(`Action completed: ${actionName}`, { success: result.success });\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Action failed: ${actionName}`, { error: message });\n throw new ActionExecutionError(\n `Action \"${actionName}\" failed: ${message}`,\n actionName,\n );\n }\n }\n\n getAvailableActions(): Array<{ name: string; description: string }> {\n return this.registry.list().map((action) => ({\n name: action.name,\n description: action.description,\n }));\n }\n}\n","import type { Action, ActionContext, ActionResult } from '../../config/types.js';\n\nexport const postSocialUpdateAction: Action = {\n name: 'post_social_update',\n description: 'Post a status update to configured social platforms',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { content, platforms } = context.parameters as {\n content: string;\n platforms?: string[];\n };\n\n if (!content) {\n return { success: false, error: 'Missing required parameter: content' };\n }\n\n const results: Record<string, unknown> = {};\n const socialAdapters = context.agent?.socialAdapters || {};\n const targetPlatforms = platforms || Object.keys(socialAdapters);\n\n for (const platform of targetPlatforms) {\n const adapter = socialAdapters[platform];\n if (!adapter) continue;\n\n try {\n const result = await adapter.post(content);\n results[platform] = result;\n } catch (error) {\n results[platform] = {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n return { success: true, data: results };\n },\n};\n\nexport const respondToMentionAction: Action = {\n name: 'respond_to_mention',\n description: 'Respond to a social platform mention',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { mentionId, content, platform } = context.parameters as {\n mentionId: string;\n content: string;\n platform: string;\n };\n\n if (!mentionId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: mentionId, content, platform' };\n }\n\n const adapter = context.agent?.socialAdapters?.[platform];\n if (!adapter) {\n return { success: false, error: `No adapter configured for platform: ${platform}` };\n }\n\n const result = await adapter.reply(mentionId, content);\n return { success: true, data: result };\n },\n};\n\nexport const dmUserAction: Action = {\n name: 'dm_user',\n description: 'Send a direct message to a user on a social platform',\n async execute(context: ActionContext): Promise<ActionResult> {\n // DM functionality depends on platform-specific APIs\n // This is a placeholder for the generic interface\n const { userId, content, platform } = context.parameters as {\n userId: string;\n content: string;\n platform: string;\n };\n\n if (!userId || !content || !platform) {\n return { success: false, error: 'Missing required parameters: userId, content, platform' };\n }\n\n return {\n success: false,\n error: `DM not yet implemented for platform: ${platform}`,\n };\n },\n};\n\nexport const scheduleTaskAction: Action = {\n name: 'schedule_task',\n description: 'Schedule a task for later execution',\n async execute(context: ActionContext): Promise<ActionResult> {\n const { taskName, delay, parameters } = context.parameters as {\n taskName: string;\n delay: number;\n parameters?: Record<string, unknown>;\n };\n\n if (!taskName || delay === undefined) {\n return { success: false, error: 'Missing required parameters: taskName, delay' };\n }\n\n // Store scheduled task in memory for the scheduler to pick up\n const scheduledTask = {\n taskName,\n executeAt: Date.now() + delay * 1000,\n parameters: parameters || {},\n };\n\n await context.memory.store(`scheduled:${taskName}:${Date.now()}`, scheduledTask);\n\n return { success: true, data: scheduledTask };\n },\n};\n","export {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nimport type { Action } from '../../config/types.js';\nimport {\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n} from './social.js';\n\nexport const builtInActions: Action[] = [\n postSocialUpdateAction,\n respondToMentionAction,\n dmUserAction,\n scheduleTaskAction,\n];\n","import type { AgentConfig, Action } from '../config/types.js';\n\nexport function buildSystemPrompt(config: AgentConfig): string {\n const parts: string[] = [];\n\n parts.push(`You are ${config.name}, an autonomous AI agent.`);\n\n if (config.type) {\n parts.push(`Your role: ${config.type}.`);\n }\n\n if (config.personality.bio) {\n parts.push(`\\nBackground:\\n${config.personality.bio}`);\n }\n\n if (config.personality.traits.length > 0) {\n parts.push(`\\nPersonality traits: ${config.personality.traits.join(', ')}`);\n }\n\n if (config.llm.systemPrompt) {\n parts.push(`\\n${config.llm.systemPrompt}`);\n }\n\n return parts.join('\\n');\n}\n\nexport function buildDecisionPrompt(\n context: Record<string, unknown>,\n availableActions: Array<{ name: string; description: string }>,\n): string {\n const actionList = availableActions\n .map((a) => `- ${a.name}: ${a.description}`)\n .join('\\n');\n\n return `Given the current context, decide what action to take next.\n\nAvailable actions:\n${actionList}\n\nCurrent context:\n${JSON.stringify(context, null, 2)}\n\nRespond with a JSON object:\n{\n \"action\": \"<action_name>\",\n \"reasoning\": \"<brief explanation>\",\n \"parameters\": { <any parameters for the action> }\n}`;\n}\n\nexport function buildSkillPrompt(skillName: string, skillDescription: string, parameters: Record<string, unknown>): string {\n return `Execute the following skill: ${skillName}\n\nInstructions:\n${skillDescription}\n\nParameters:\n${JSON.stringify(parameters, null, 2)}\n\nExecute these instructions step by step and return the result as a JSON object:\n{\n \"success\": true/false,\n \"data\": { <result data> },\n \"reasoning\": \"<what you did and why>\"\n}`;\n}\n","import type { LLMProvider } from '../llm/Provider.js';\nimport type { Action, ActionContext, ActionResult } from '../config/types.js';\nimport { buildSkillPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('MarkdownInterpreter');\n\nexport class LLMInterpretationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'LLMInterpretationError';\n }\n}\n\n/**\n * Creates an Action from a markdown skill description.\n * The skill's behavior is interpreted by the LLM at runtime.\n */\nexport function createMarkdownAction(\n name: string,\n description: string,\n llmProvider: LLMProvider,\n): Action {\n return {\n name,\n description,\n execute: async (context: ActionContext): Promise<ActionResult> => {\n logger.info(`Interpreting markdown skill: ${name}`);\n\n const prompt = buildSkillPrompt(name, description, context.parameters);\n\n try {\n const response = await llmProvider.generateText(prompt, {\n temperature: 0.7,\n maxTokens: 2048,\n });\n\n const jsonMatch = response.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new LLMInterpretationError(\n `LLM did not return valid JSON for skill \"${name}\"`,\n );\n }\n\n const result = JSON.parse(jsonMatch[0]);\n return {\n success: result.success ?? true,\n data: result.data || result,\n };\n } catch (error) {\n if (error instanceof LLMInterpretationError) throw error;\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Markdown skill interpretation failed: ${name}`, { error: message });\n throw new LLMInterpretationError(\n `Failed to interpret skill \"${name}\": ${message}`,\n );\n }\n },\n };\n}\n","import type { Experience } from '../config/types.js';\n\nexport abstract class Memory {\n // Short-term (current session)\n abstract remember(key: string, value: unknown, ttl?: number): Promise<void>;\n abstract recall(key: string): Promise<unknown>;\n abstract forget(key: string): Promise<void>;\n\n // Long-term (persistent)\n abstract store(key: string, value: unknown): Promise<void>;\n abstract retrieve(key: string): Promise<unknown>;\n abstract delete(key: string): Promise<void>;\n\n // Semantic memory\n abstract addExperience(experience: Experience): Promise<void>;\n abstract queryExperiences(query: string, limit?: number): Promise<Experience[]>;\n\n // Lifecycle\n abstract clear(): Promise<void>;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\n\ninterface CacheEntry {\n value: unknown;\n expiresAt?: number;\n}\n\nexport class ShortTermMemory extends Memory {\n private cache = new Map<string, CacheEntry>();\n private store_ = new Map<string, unknown>();\n private experiences: Experience[] = [];\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n this.cache.set(key, {\n value,\n expiresAt: ttl ? Date.now() + ttl * 1000 : undefined,\n });\n }\n\n async recall(key: string): Promise<unknown> {\n const entry = this.cache.get(key);\n if (!entry) return undefined;\n\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n this.cache.delete(key);\n return undefined;\n }\n\n return entry.value;\n }\n\n async forget(key: string): Promise<void> {\n this.cache.delete(key);\n }\n\n async store(key: string, value: unknown): Promise<void> {\n this.store_.set(key, value);\n }\n\n async retrieve(key: string): Promise<unknown> {\n return this.store_.get(key);\n }\n\n async delete(key: string): Promise<void> {\n this.store_.delete(key);\n }\n\n async addExperience(experience: Experience): Promise<void> {\n this.experiences.push(experience);\n }\n\n async queryExperiences(query: string, limit: number = 10): Promise<Experience[]> {\n // Simple keyword matching — will be replaced with vector search in longterm\n const queryLower = query.toLowerCase();\n return this.experiences\n .filter(\n (exp) =>\n exp.type.toLowerCase().includes(queryLower) ||\n exp.action.toLowerCase().includes(queryLower),\n )\n .slice(-limit);\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n this.store_.clear();\n this.experiences = [];\n }\n}\n","import Anthropic from '@anthropic-ai/sdk';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class AnthropicProvider extends LLMProvider {\n name = 'anthropic';\n private client: Anthropic;\n private model: string;\n\n constructor(apiKey: string, model: string = 'claude-sonnet-4-20250514') {\n super();\n this.client = new Anthropic({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop_sequences: options.stopSequences } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return textBlock ? textBlock.text : '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const systemMessages = messages.filter((m) => m.role === 'system');\n const chatMessages = messages\n .filter((m) => m.role !== 'system')\n .map((m) => ({ role: m.role as 'user' | 'assistant', content: m.content }));\n\n const response = await this.client.messages.create({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: chatMessages,\n ...(systemMessages.length > 0 ? { system: systemMessages.map((m) => m.content).join('\\n') } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n const textBlock = response.content.find((block) => block.type === 'text');\n return { role: 'assistant', content: textBlock ? textBlock.text : '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const stream = this.client.messages.stream({\n model: this.model,\n max_tokens: options?.maxTokens || 2048,\n messages: [{ role: 'user', content: prompt }],\n ...(options?.systemPrompt ? { system: options.systemPrompt } : {}),\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const event of stream) {\n if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {\n yield event.delta.text;\n }\n }\n }\n}\n","export interface GenerateOptions {\n temperature?: number;\n maxTokens?: number;\n stopSequences?: string[];\n systemPrompt?: string;\n}\n\nexport interface Message {\n role: 'system' | 'user' | 'assistant';\n content: string;\n}\n\nexport interface StructuredSchema {\n type: string;\n properties?: Record<string, unknown>;\n required?: string[];\n}\n\nexport abstract class LLMProvider {\n abstract name: string;\n\n abstract generateText(prompt: string, options?: GenerateOptions): Promise<string>;\n\n abstract generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T>;\n\n abstract chat(messages: Message[], options?: GenerateOptions): Promise<Message>;\n\n abstract streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string>;\n}\n","import OpenAI from 'openai';\nimport { LLMProvider, type GenerateOptions, type Message, type StructuredSchema } from './Provider.js';\n\nexport class OpenAIProvider extends LLMProvider {\n name = 'openai';\n private client: OpenAI;\n private model: string;\n\n constructor(apiKey: string, model: string = 'gpt-4o') {\n super();\n this.client = new OpenAI({ apiKey });\n this.model = model;\n }\n\n async generateText(prompt: string, options?: GenerateOptions): Promise<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n ...(options?.stopSequences ? { stop: options.stopSequences } : {}),\n });\n\n return response.choices[0]?.message?.content || '';\n }\n\n async generateStructured<T>(prompt: string, schema: StructuredSchema, options?: GenerateOptions): Promise<T> {\n const structuredPrompt = `${prompt}\\n\\nRespond with a JSON object matching this schema:\\n${JSON.stringify(schema, null, 2)}\\n\\nRespond with valid JSON only, no other text.`;\n\n const text = await this.generateText(structuredPrompt, options);\n\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error('LLM did not return valid JSON');\n }\n\n return JSON.parse(jsonMatch[0]) as T;\n }\n\n async chat(messages: Message[], options?: GenerateOptions): Promise<Message> {\n const openaiMessages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n\n const response = await this.client.chat.completions.create({\n model: this.model,\n messages: openaiMessages,\n max_tokens: options?.maxTokens || 2048,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n return { role: 'assistant', content: response.choices[0]?.message?.content || '' };\n }\n\n async *streamGenerate(prompt: string, options?: GenerateOptions): AsyncGenerator<string> {\n const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [];\n\n if (options?.systemPrompt) {\n messages.push({ role: 'system', content: options.systemPrompt });\n }\n messages.push({ role: 'user', content: prompt });\n\n const stream = await this.client.chat.completions.create({\n model: this.model,\n messages,\n max_tokens: options?.maxTokens || 2048,\n stream: true,\n ...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),\n });\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content;\n if (delta) yield delta;\n }\n }\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { MoltbookConfig } from '../config/types.js';\n\nexport class MoltbookAdapter extends SocialAdapter {\n platform = 'moltbook';\n private client: AxiosInstance;\n private config: MoltbookConfig;\n\n constructor(config: MoltbookConfig) {\n super();\n this.config = config;\n this.client = axios.create({\n baseURL: config.baseUrl || 'https://api.moltbook.com',\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n }\n\n async connect(): Promise<void> {\n // Verify API key is valid\n await this.client.get('/me');\n }\n\n async disconnect(): Promise<void> {\n // No persistent connection to close\n }\n\n async post(content: string): Promise<PostResult> {\n const response = await this.client.post('/posts', { content });\n return {\n id: response.data.id,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async reply(postId: string, content: string): Promise<ReplyResult> {\n const response = await this.client.post(`/posts/${postId}/replies`, { content });\n return {\n id: response.data.id,\n parentId: postId,\n url: response.data.url,\n timestamp: new Date(response.data.created_at),\n };\n }\n\n async like(postId: string): Promise<void> {\n await this.client.post(`/posts/${postId}/like`);\n }\n\n async follow(userId: string): Promise<void> {\n await this.client.post(`/users/${userId}/follow`);\n }\n\n async getMentions(): Promise<Mention[]> {\n const response = await this.client.get('/mentions');\n return response.data.mentions.map((m: any) => ({\n id: m.id,\n authorId: m.author_id,\n authorName: m.author_name,\n content: m.content,\n timestamp: new Date(m.created_at),\n platform: 'moltbook',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const params: Record<string, unknown> = {};\n if (options?.limit) params.limit = options.limit;\n if (options?.cursor) params.cursor = options.cursor;\n if (options?.since) params.since = options.since.toISOString();\n\n const response = await this.client.get('/feed', { params });\n return response.data.posts.map((p: any) => ({\n id: p.id,\n authorId: p.author_id,\n authorName: p.author_name,\n content: p.content,\n timestamp: new Date(p.created_at),\n platform: 'moltbook',\n likes: p.likes_count,\n replies: p.replies_count,\n reposts: p.reposts_count,\n mentions: p.mentions || [],\n url: p.url,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const response = await this.client.get(`/users/${userId}`);\n return {\n id: response.data.id,\n name: response.data.name,\n bio: response.data.bio,\n followers: response.data.followers_count,\n following: response.data.following_count,\n platform: 'moltbook',\n };\n }\n}\n","import type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\n\nexport abstract class SocialAdapter {\n abstract platform: string;\n\n abstract post(content: string): Promise<PostResult>;\n abstract reply(id: string, content: string): Promise<ReplyResult>;\n abstract like(id: string): Promise<void>;\n abstract follow(userId: string): Promise<void>;\n abstract getMentions(): Promise<Mention[]>;\n abstract getFeed(options?: FeedOptions): Promise<Post[]>;\n abstract getProfile(userId: string): Promise<Profile>;\n\n abstract connect(): Promise<void>;\n abstract disconnect(): Promise<void>;\n}\n","import { SocialAdapter } from './SocialAdapter.js';\nimport type { PostResult, ReplyResult, Mention, Profile, Post, FeedOptions } from './types.js';\nimport type { TwitterConfig } from '../config/types.js';\n\nexport class TwitterAdapter extends SocialAdapter {\n platform = 'twitter';\n private config: TwitterConfig;\n private client: any; // twitter-api-v2 client\n\n constructor(config: TwitterConfig) {\n super();\n this.config = config;\n }\n\n async connect(): Promise<void> {\n // Dynamic import to keep twitter-api-v2 optional\n const { TwitterApi } = await import('twitter-api-v2');\n this.client = new TwitterApi({\n appKey: this.config.credentials.apiKey,\n appSecret: this.config.credentials.apiSecret,\n accessToken: this.config.credentials.accessToken,\n accessSecret: this.config.credentials.accessSecret,\n });\n\n // Verify credentials\n await this.client.v2.me();\n }\n\n async disconnect(): Promise<void> {\n this.client = null;\n }\n\n async post(content: string): Promise<PostResult> {\n const tweet = await this.client.v2.tweet(content);\n return {\n id: tweet.data.id,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async reply(tweetId: string, content: string): Promise<ReplyResult> {\n const tweet = await this.client.v2.reply(content, tweetId);\n return {\n id: tweet.data.id,\n parentId: tweetId,\n url: `https://twitter.com/i/status/${tweet.data.id}`,\n timestamp: new Date(),\n };\n }\n\n async like(tweetId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.like(me.data.id, tweetId);\n }\n\n async follow(userId: string): Promise<void> {\n const me = await this.client.v2.me();\n await this.client.v2.follow(me.data.id, userId);\n }\n\n async getMentions(): Promise<Mention[]> {\n const me = await this.client.v2.me();\n const mentions = await this.client.v2.userMentionTimeline(me.data.id, {\n max_results: 20,\n expansions: ['author_id'],\n 'tweet.fields': ['created_at'],\n 'user.fields': ['name', 'username'],\n });\n\n const users = new Map<string, string>();\n if (mentions.includes?.users) {\n for (const user of mentions.includes.users) {\n users.set(user.id, user.username);\n }\n }\n\n return (mentions.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: tweet.author_id,\n authorName: users.get(tweet.author_id) || 'unknown',\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n }));\n }\n\n async getFeed(options?: FeedOptions): Promise<Post[]> {\n const me = await this.client.v2.me();\n const timeline = await this.client.v2.userTimeline(me.data.id, {\n max_results: options?.limit || 20,\n 'tweet.fields': ['created_at', 'public_metrics'],\n });\n\n return (timeline.data?.data || []).map((tweet: any) => ({\n id: tweet.id,\n authorId: me.data.id,\n authorName: me.data.username,\n content: tweet.text,\n timestamp: new Date(tweet.created_at),\n platform: 'twitter',\n likes: tweet.public_metrics?.like_count,\n replies: tweet.public_metrics?.reply_count,\n reposts: tweet.public_metrics?.retweet_count,\n }));\n }\n\n async getProfile(userId: string): Promise<Profile> {\n const user = await this.client.v2.user(userId, {\n 'user.fields': ['description', 'public_metrics'],\n });\n\n return {\n id: user.data.id,\n name: user.data.name,\n bio: user.data.description,\n followers: user.data.public_metrics?.followers_count,\n following: user.data.public_metrics?.following_count,\n platform: 'twitter',\n };\n }\n}\n","import type { AgentConfig, Decision, Experience, ActionResult, Action } from '../config/types.js';\nimport type { LifecycleHooks } from './lifecycle.js';\nimport { Scheduler } from './scheduler.js';\nimport { ActionRegistry } from '../actions/registry.js';\nimport { ActionHandler } from '../actions/ActionHandler.js';\nimport { builtInActions } from '../actions/built-in/index.js';\nimport { createMarkdownAction } from '../actions/interpreter.js';\nimport { ShortTermMemory } from '../memory/shortterm.js';\nimport type { Memory } from '../memory/Memory.js';\nimport type { LLMProvider } from '../llm/Provider.js';\nimport { AnthropicProvider } from '../llm/anthropic.js';\nimport { OpenAIProvider } from '../llm/openai.js';\nimport { SocialAdapter } from '../social/SocialAdapter.js';\nimport { MoltbookAdapter } from '../social/moltbook.js';\nimport { TwitterAdapter } from '../social/twitter.js';\nimport { buildSystemPrompt, buildDecisionPrompt } from '../llm/prompt.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Agent');\n\nexport type AgentState = 'idle' | 'initializing' | 'running' | 'stopping' | 'stopped' | 'error';\n\nexport class Agent {\n readonly config: AgentConfig;\n\n private state: AgentState = 'idle';\n private llm!: LLMProvider;\n private memory_: Memory;\n private scheduler: Scheduler;\n private actionRegistry: ActionRegistry;\n private actionHandler: ActionHandler;\n private hooks: LifecycleHooks = {};\n private tickTimer?: ReturnType<typeof setInterval>;\n private systemPrompt: string;\n\n socialAdapters: Record<string, SocialAdapter> = {};\n\n constructor(config: AgentConfig, hooks?: LifecycleHooks) {\n this.config = config;\n this.hooks = hooks || {};\n this.memory_ = new ShortTermMemory();\n this.scheduler = new Scheduler();\n this.actionRegistry = new ActionRegistry();\n this.actionHandler = new ActionHandler(this.actionRegistry);\n this.systemPrompt = buildSystemPrompt(config);\n }\n\n get name(): string {\n return this.config.name;\n }\n\n getState(): AgentState {\n return this.state;\n }\n\n getMemory(): Memory {\n return this.memory_;\n }\n\n getLLM(): LLMProvider {\n return this.llm;\n }\n\n getActionRegistry(): ActionRegistry {\n return this.actionRegistry;\n }\n\n // ── Configuration Methods ──\n\n setSystemPrompt(prompt: string): void {\n this.systemPrompt = prompt;\n }\n\n appendSystemPrompt(additional: string): void {\n this.systemPrompt += '\\n\\n' + additional;\n }\n\n getSystemPrompt(): string {\n return this.systemPrompt;\n }\n\n setHooks(hooks: LifecycleHooks): void {\n this.hooks = hooks;\n }\n\n mergeHooks(hooks: Partial<LifecycleHooks>): void {\n this.hooks = { ...this.hooks, ...hooks };\n }\n\n setMemory(memory: Memory): void {\n this.memory_ = memory;\n }\n\n async preloadMemory(entries: Record<string, unknown>): Promise<void> {\n for (const [key, value] of Object.entries(entries)) {\n await this.memory_.remember(key, value);\n }\n }\n\n registerAction(action: Action): void {\n this.actionRegistry.register(action);\n }\n\n // ── Lifecycle ──\n\n async init(): Promise<void> {\n this.state = 'initializing';\n logger.info(`Initializing agent: ${this.config.name}`);\n\n this.initLLM();\n this.registerActions();\n await this.initSocialAdapters();\n\n if (this.hooks.onInit) {\n await this.hooks.onInit(this);\n }\n\n logger.info(`Agent initialized: ${this.config.name}`);\n }\n\n async start(): Promise<void> {\n if (this.state !== 'initializing' && this.state !== 'idle') {\n throw new Error(`Cannot start agent in state: ${this.state}`);\n }\n\n if (this.state === 'idle') {\n await this.init();\n }\n\n this.state = 'running';\n logger.info(`Agent started: ${this.config.name}`);\n\n if (this.hooks.onStart) {\n await this.hooks.onStart(this);\n }\n\n this.scheduler.start();\n\n if (this.config.behaviors.autonomous) {\n this.startAutonomousLoop();\n }\n }\n\n async stop(): Promise<void> {\n this.state = 'stopping';\n logger.info(`Stopping agent: ${this.config.name}`);\n\n if (this.tickTimer) {\n clearInterval(this.tickTimer);\n this.tickTimer = undefined;\n }\n\n this.scheduler.stop();\n\n for (const adapter of Object.values(this.socialAdapters)) {\n await adapter.disconnect();\n }\n\n if (this.hooks.onShutdown) {\n await this.hooks.onShutdown(this);\n }\n\n this.state = 'stopped';\n logger.info(`Agent stopped: ${this.config.name}`);\n }\n\n // ── Decision Loop ──\n\n async think(): Promise<Decision> {\n const context = await this.gatherContext();\n const availableActions = this.actionHandler.getAvailableActions();\n\n const prompt = buildDecisionPrompt(context, availableActions);\n\n const decision = await this.llm.generateStructured<Decision>(\n prompt,\n {\n type: 'object',\n properties: {\n action: { type: 'string' },\n reasoning: { type: 'string' },\n parameters: { type: 'object' },\n },\n required: ['action', 'reasoning', 'parameters'],\n },\n { systemPrompt: this.systemPrompt, temperature: this.config.llm.temperature },\n );\n\n logger.debug(`Decision: ${decision.action} — ${decision.reasoning}`);\n return decision;\n }\n\n async act(actionName: string, parameters: Record<string, unknown> = {}): Promise<ActionResult> {\n const context = {\n agent: this,\n memory: this.memory_,\n llm: this.llm,\n parameters,\n };\n\n return this.actionHandler.execute(actionName, context);\n }\n\n async learn(experience: Experience): Promise<void> {\n await this.memory_.addExperience(experience);\n }\n\n async tick(): Promise<void> {\n if (this.state !== 'running') return;\n\n try {\n if (this.hooks.onTick) {\n await this.hooks.onTick(this);\n }\n\n if (this.isSleeping()) return;\n\n const decision = await this.think();\n const result = await this.act(decision.action, decision.parameters);\n\n await this.learn({\n type: 'action',\n action: decision.action,\n result,\n timestamp: new Date(),\n context: { reasoning: decision.reasoning },\n });\n\n if (this.config.webhooks?.onAction) {\n await this.fireWebhook('onAction', decision, result);\n }\n } catch (error) {\n logger.error(`Tick error: ${error instanceof Error ? error.message : error}`);\n if (this.hooks.onError && error instanceof Error) {\n await this.hooks.onError(error, this);\n }\n }\n }\n\n // ── Markdown skill registration ──\n\n registerMarkdownSkills(skills: Array<{ name: string; description: string }>): void {\n for (const skill of skills) {\n const action = createMarkdownAction(skill.name, skill.description, this.llm);\n this.actionRegistry.register(action);\n }\n }\n\n // ── Internal ──\n\n private initLLM(): void {\n const { provider, apiKey, model } = this.config.llm;\n\n switch (provider) {\n case 'anthropic':\n this.llm = new AnthropicProvider(apiKey, model);\n break;\n case 'openai':\n this.llm = new OpenAIProvider(apiKey, model);\n break;\n default:\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n }\n\n private registerActions(): void {\n // Register built-in actions that the config references\n for (const action of builtInActions) {\n if (this.config.actions.includes(action.name)) {\n this.actionRegistry.register(action);\n }\n }\n\n // Register custom actions (code-based)\n if (this.config.customActions) {\n for (const action of this.config.customActions) {\n this.actionRegistry.register(action);\n }\n }\n }\n\n private async initSocialAdapters(): Promise<void> {\n const { social } = this.config;\n\n if (social.moltbook?.enabled) {\n const adapter = new MoltbookAdapter(social.moltbook);\n try {\n await adapter.connect();\n this.socialAdapters['moltbook'] = adapter;\n logger.info('Moltbook adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Moltbook adapter: ${error}`);\n }\n }\n\n if (social.twitter?.enabled) {\n const adapter = new TwitterAdapter(social.twitter);\n try {\n await adapter.connect();\n this.socialAdapters['twitter'] = adapter;\n logger.info('Twitter adapter connected');\n } catch (error) {\n logger.warn(`Failed to connect Twitter adapter: ${error}`);\n }\n }\n }\n\n private startAutonomousLoop(): void {\n const actionsPerHour = typeof this.config.behaviors.actionsPerHour === 'function'\n ? this.config.behaviors.actionsPerHour({})\n : this.config.behaviors.actionsPerHour || 5;\n\n const intervalMs = Math.floor(3600000 / actionsPerHour);\n\n this.tickTimer = setInterval(() => this.tick(), intervalMs);\n logger.info(`Autonomous loop started: ~${actionsPerHour} actions/hour (every ${intervalMs}ms)`);\n }\n\n private isSleeping(): boolean {\n const schedule = this.config.behaviors.sleepSchedule;\n if (!schedule) return false;\n\n const now = new Date();\n const hour = now.getHours();\n\n if (schedule.start > schedule.end) {\n // Wraps midnight (e.g., 22-6)\n return hour >= schedule.start || hour < schedule.end;\n }\n return hour >= schedule.start && hour < schedule.end;\n }\n\n private async gatherContext(): Promise<Record<string, unknown>> {\n return {\n agentName: this.config.name,\n agentType: this.config.type,\n currentTime: new Date().toISOString(),\n state: this.state,\n personality: this.config.personality.traits,\n };\n }\n\n private async fireWebhook(event: string, ...args: unknown[]): Promise<void> {\n try {\n const hook = this.config.webhooks?.[event as keyof typeof this.config.webhooks];\n if (typeof hook === 'function') {\n await (hook as Function)(...args);\n } else if (typeof hook === 'string') {\n const { default: axios } = await import('axios');\n await axios.post(hook, { event, data: args });\n }\n } catch (error) {\n logger.error(`Webhook ${event} failed: ${error}`);\n }\n }\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { MarkdownParser } from './MarkdownParser.js';\nimport { validateConfig } from './validator.js';\nimport type { AgentConfig } from './types.js';\n\nexport type ConfigType = 'code' | 'markdown';\n\nexport class ConfigurationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ConfigurationError';\n }\n}\n\nexport class ConfigLoader {\n private markdownParser = new MarkdownParser();\n\n async load(directory: string): Promise<{ config: AgentConfig; type: ConfigType }> {\n const codeConfigPath = resolve(directory, 'agent.config.ts');\n const mdConfigPath = resolve(directory, 'agent.md');\n\n if (existsSync(codeConfigPath)) {\n return { config: await this.loadCode(codeConfigPath), type: 'code' };\n }\n\n if (existsSync(mdConfigPath)) {\n return { config: await this.loadMarkdown(mdConfigPath), type: 'markdown' };\n }\n\n throw new ConfigurationError(\n `No agent configuration found in ${directory}. Expected agent.config.ts or agent.md`,\n );\n }\n\n async loadCode(filePath: string): Promise<AgentConfig> {\n try {\n // Use jiti to load TypeScript files at runtime without pre-compilation\n const { createJiti } = await import('jiti');\n const jiti = createJiti(pathToFileURL(filePath).href, {\n interopDefault: true,\n moduleCache: false,\n });\n\n const module = await jiti.import(filePath) as any;\n const config = module.default || module;\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load code config from ${filePath}: ${error}`);\n }\n }\n\n async loadMarkdown(filePath: string): Promise<AgentConfig> {\n try {\n const content = readFileSync(filePath, 'utf-8');\n const partialConfig = this.markdownParser.parse(content);\n\n // Markdown configs need LLM settings from env or frontmatter\n const config = {\n ...partialConfig,\n llm: partialConfig.llm || {\n provider: (process.env.LLM_PROVIDER as 'anthropic' | 'openai') || 'anthropic',\n model: process.env.LLM_MODEL || 'claude-sonnet-4-20250514',\n apiKey: process.env.ANTHROPIC_API_KEY || process.env.OPENAI_API_KEY || '',\n },\n };\n\n return validateConfig(config);\n } catch (error) {\n if (error instanceof Error && error.name === 'ConfigValidationError') throw error;\n throw new ConfigurationError(`Failed to load markdown config from ${filePath}: ${error}`);\n }\n }\n}\n","import matter from 'gray-matter';\nimport type { AgentConfig } from './types.js';\n\ninterface ParsedSection {\n title: string;\n level: number;\n content: string;\n children: ParsedSection[];\n}\n\nexport class MarkdownParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'MarkdownParseError';\n }\n}\n\nexport class MarkdownParser {\n parse(markdown: string): Partial<AgentConfig> {\n const { data: frontmatter, content } = matter(markdown);\n const sections = this.parseSections(content);\n\n const identity = this.findSection(sections, 'Identity');\n const bio = this.findSection(sections, 'Bio');\n const social = this.findSection(sections, 'Social Platforms');\n const behaviors = this.findSection(sections, 'Behaviors');\n const memory = this.findSection(sections, 'Memory');\n const skills = this.findSection(sections, 'Skills');\n const scheduling = this.findSection(sections, 'Scheduling');\n\n const identityData = this.parseIdentity(identity);\n const bioText = bio ? bio.content.trim() : (identityData?.personality?.bio || '');\n\n const config: Partial<AgentConfig> = {\n ...identityData,\n personality: {\n traits: identityData?.personality?.traits || [],\n bio: bioText,\n },\n ...(social ? { social: this.parseSocial(social) } : {}),\n ...(behaviors ? { behaviors: this.parseBehaviors(behaviors) } : {}),\n ...(memory ? { memory: this.parseMemory(memory) } : {}),\n actions: [],\n ...frontmatter,\n };\n\n if (skills) {\n config.actions = skills.children.map((s) => this.toSnakeCase(s.title));\n }\n\n return config;\n }\n\n parseSkills(markdown: string): Array<{ name: string; description: string }> {\n const { content } = matter(markdown);\n const sections = this.parseSections(content);\n const skills = this.findSection(sections, 'Skills');\n\n if (!skills) return [];\n\n return skills.children.map((child) => ({\n name: this.toSnakeCase(child.title),\n description: child.content.trim(),\n }));\n }\n\n private parseSections(content: string): ParsedSection[] {\n const lines = content.split('\\n');\n const root: ParsedSection[] = [];\n const stack: Array<{ level: number; section: ParsedSection }> = [];\n\n for (const line of lines) {\n const match = line.match(/^(#{1,6})\\s+(.+)/);\n if (match) {\n const level = match[1].length;\n const title = match[2].trim();\n const section: ParsedSection = { title, level, content: '', children: [] };\n\n while (stack.length > 0 && stack[stack.length - 1].level >= level) {\n stack.pop();\n }\n\n if (stack.length === 0) {\n root.push(section);\n } else {\n stack[stack.length - 1].section.children.push(section);\n }\n\n stack.push({ level, section });\n } else if (stack.length > 0) {\n stack[stack.length - 1].section.content += line + '\\n';\n }\n }\n\n return root;\n }\n\n private findSection(sections: ParsedSection[], title: string): ParsedSection | undefined {\n for (const section of sections) {\n if (section.title.toLowerCase() === title.toLowerCase()) return section;\n const found = this.findSection(section.children, title);\n if (found) return found;\n }\n return undefined;\n }\n\n private parseIdentity(section?: ParsedSection): Partial<AgentConfig> | undefined {\n if (!section) return undefined;\n const fields = this.parseKeyValueLines(section.content);\n return {\n name: fields['name'] || 'Unnamed Agent',\n type: fields['type'],\n personality: {\n traits: (fields['personality'] || '').split(',').map((t: string) => t.trim()).filter(Boolean),\n bio: '',\n },\n };\n }\n\n private parseSocial(section: ParsedSection): Record<string, any> {\n const social: Record<string, any> = {};\n\n for (const child of section.children) {\n const platform = child.title.toLowerCase();\n const fields = this.parseKeyValueLines(child.content);\n social[platform] = {\n enabled: fields['enabled'] === 'true',\n ...fields,\n };\n }\n\n return social;\n }\n\n private parseBehaviors(section: ParsedSection): AgentConfig['behaviors'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n autonomous: fields['autonomous'] === 'true',\n decisionMaking: (fields['decision_making'] || 'llm-driven') as AgentConfig['behaviors']['decisionMaking'],\n actionsPerHour: fields['actions_per_hour'] ? parseInt(fields['actions_per_hour'], 10) : undefined,\n sleepSchedule: fields['sleep_schedule'] ? this.parseSleepSchedule(fields['sleep_schedule']) : undefined,\n };\n }\n\n private parseMemory(section: ParsedSection): AgentConfig['memory'] {\n const fields = this.parseKeyValueLines(section.content);\n return {\n type: (fields['type'] || 'memory') as AgentConfig['memory']['type'],\n retention: fields['retention'],\n };\n }\n\n private parseSleepSchedule(value: string): { start: number; end: number; timezone?: string } {\n const match = value.match(/(\\d{1,2}):?\\d{0,2}\\s*-\\s*(\\d{1,2}):?\\d{0,2}\\s*(.*)?/);\n if (!match) return { start: 22, end: 6 };\n return {\n start: parseInt(match[1], 10),\n end: parseInt(match[2], 10),\n timezone: match[3]?.trim() || undefined,\n };\n }\n\n private parseKeyValueLines(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n for (const line of content.split('\\n')) {\n const match = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*):\\s*(.+)/);\n if (match) {\n result[match[1].trim()] = match[2].trim();\n }\n }\n return result;\n }\n\n private toSnakeCase(str: string): string {\n return str\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_|_$/g, '');\n }\n}\n","import { z } from 'zod';\n\n// ── Social Platform Configs ──\n\nexport interface MoltbookConfig {\n enabled: boolean;\n apiKey: string;\n baseUrl?: string;\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n engagementRate?: 'low' | 'medium' | 'high';\n autoReply?: boolean;\n replyFilter?: (post: any) => boolean;\n}\n\nexport interface TwitterConfig {\n enabled: boolean;\n credentials: {\n apiKey: string;\n apiSecret: string;\n accessToken: string;\n accessSecret: string;\n bearerToken?: string;\n };\n postFrequency?: 'realtime' | 'hourly' | 'daily';\n replyToMentions?: boolean;\n autoRetweet?: boolean;\n maxTweetsPerDay?: number;\n contentStrategy?: {\n threadTopics?: string[];\n hashtagStrategy?: string;\n mentionBehavior?: string;\n };\n}\n\nexport interface SocialPlatformConfig {\n enabled: boolean;\n [key: string]: unknown;\n}\n\nexport type SocialConfig = {\n moltbook?: MoltbookConfig;\n twitter?: TwitterConfig;\n} & Record<string, SocialPlatformConfig | MoltbookConfig | TwitterConfig | undefined>;\n\n// ── Behavior Configs ──\n\nexport interface BehaviorTrigger {\n condition: (context: any) => boolean;\n action: string;\n params?: Record<string, unknown>;\n}\n\n// ── Memory Configs ──\n\nexport interface RedisConfig {\n url: string;\n keyPrefix?: string;\n ttl?: number;\n}\n\nexport interface PostgresConfig {\n url: string;\n schema?: string;\n tableName?: string;\n}\n\n// ── Plugin Interface ──\n\nexport interface Plugin {\n name: string;\n version: string;\n init?: (agent: any) => Promise<void>;\n destroy?: () => Promise<void>;\n}\n\n// ── Main Agent Config ──\n\nexport interface AgentConfig {\n name: string;\n type?: string;\n\n personality: {\n traits: string[];\n bio: string;\n [key: string]: unknown;\n };\n\n llm: {\n provider: 'anthropic' | 'openai';\n model: string;\n apiKey: string;\n temperature?: number;\n maxTokens?: number;\n systemPrompt?: string;\n };\n\n social: SocialConfig;\n\n behaviors: {\n autonomous: boolean;\n decisionMaking: 'llm-driven' | 'rule-based' | 'hybrid';\n actionsPerHour?: number | ((context: any) => number);\n sleepSchedule?: { start: number; end: number; timezone?: string };\n triggers?: BehaviorTrigger[];\n };\n\n memory: {\n type: 'memory' | 'redis' | 'postgres' | 'hybrid';\n retention?: string;\n redis?: RedisConfig;\n postgres?: PostgresConfig;\n };\n\n actions: string[];\n customActions?: Action[];\n\n webhooks?: {\n onAction?: string | ((action: any, result: any) => Promise<void>);\n onError?: string;\n };\n\n plugins?: Plugin[];\n}\n\n// ── Action Types ──\n\nexport interface ActionContext {\n agent: any;\n memory: any;\n llm: any;\n parameters: Record<string, unknown>;\n}\n\nexport interface ActionResult {\n success: boolean;\n data?: unknown;\n error?: string;\n}\n\nexport interface Action {\n name: string;\n description: string;\n parameters?: Record<string, unknown>;\n execute: (context: ActionContext) => Promise<ActionResult>;\n}\n\n// ── Decision / Experience Types ──\n\nexport interface Decision {\n action: string;\n reasoning: string;\n parameters: Record<string, unknown>;\n}\n\nexport interface Experience {\n type: string;\n action: string;\n result: ActionResult;\n timestamp: Date;\n context?: Record<string, unknown>;\n}\n\n// ── Deployment Types ──\n\nexport interface DeploymentConfig {\n platform: 'railway' | 'render' | 'aws' | 'digitalocean' | 'custom';\n region?: string;\n instanceType?: string;\n autoScale?: boolean;\n customConfig?: CustomDeploymentConfig;\n}\n\nexport interface DeploymentResult {\n success: boolean;\n url?: string;\n deploymentId?: string;\n logs?: string[];\n error?: string;\n}\n\nexport interface DeploymentStatus {\n state: 'running' | 'stopped' | 'deploying' | 'failed' | 'unknown';\n url?: string;\n uptime?: number;\n lastDeployed?: Date;\n}\n\nexport interface CustomDeploymentConfig {\n deploymentMethod: 'docker' | 'ssh' | 'cli' | 'api';\n buildCommand: string;\n startCommand: string;\n environmentVariables?: Record<string, string>;\n healthCheckUrl?: string;\n port?: number;\n docker?: CustomDockerConfig;\n ssh?: CustomSSHConfig;\n cli?: CustomCLIConfig;\n api?: CustomAPIConfig;\n}\n\nexport interface CustomDockerConfig {\n registry: string;\n imageName: string;\n tag?: string;\n dockerfile?: string;\n buildArgs?: Record<string, string>;\n registryAuth?: {\n username: string;\n password: string;\n };\n hostUrl: string;\n containerPort: number;\n hostPort: number;\n}\n\nexport interface CustomSSHConfig {\n host: string;\n port: number;\n username: string;\n authMethod: 'password' | 'privateKey';\n password?: string;\n privateKeyPath?: string;\n deploymentPath: string;\n preDeployCommands?: string[];\n postDeployCommands?: string[];\n}\n\nexport interface CustomCLIConfig {\n cliName: string;\n installCommand?: string;\n loginCommand?: string;\n deployCommand: string;\n statusCommand?: string;\n logsCommand?: string;\n credentials?: Record<string, string>;\n}\n\nexport interface CustomAPIConfig {\n baseUrl: string;\n authType: 'bearer' | 'apiKey' | 'basic' | 'custom';\n authToken?: string;\n apiKey?: string;\n headers?: Record<string, string>;\n endpoints: {\n deploy: string;\n status?: string;\n logs?: string;\n rollback?: string;\n };\n requestMethod?: 'POST' | 'PUT';\n payloadTemplate?: Record<string, unknown>;\n}\n\n// ── Social Types ──\n\nexport interface PostResult {\n id: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface ReplyResult {\n id: string;\n parentId: string;\n url?: string;\n timestamp: Date;\n}\n\nexport interface Mention {\n id: string;\n authorId: string;\n authorName: string;\n content: string;\n timestamp: Date;\n platform: string;\n}\n\nexport interface Profile {\n id: string;\n name: string;\n bio?: string;\n followers?: number;\n following?: number;\n platform: string;\n}\n\n// ── Zod Schemas for Runtime Validation (markdown configs) ──\n\nexport const AgentConfigSchema = z.object({\n name: z.string().min(1),\n type: z.string().optional(),\n personality: z.object({\n traits: z.array(z.string()),\n bio: z.string(),\n }).passthrough(),\n llm: z.object({\n provider: z.enum(['anthropic', 'openai']),\n model: z.string(),\n apiKey: z.string(),\n temperature: z.number().min(0).max(2).optional(),\n maxTokens: z.number().positive().optional(),\n systemPrompt: z.string().optional(),\n }),\n social: z.record(z.unknown()).optional(),\n behaviors: z.object({\n autonomous: z.boolean(),\n decisionMaking: z.enum(['llm-driven', 'rule-based', 'hybrid']),\n actionsPerHour: z.number().optional(),\n sleepSchedule: z.object({\n start: z.number(),\n end: z.number(),\n timezone: z.string().optional(),\n }).optional(),\n }),\n memory: z.object({\n type: z.enum(['memory', 'redis', 'postgres', 'hybrid']),\n retention: z.string().optional(),\n }).passthrough(),\n actions: z.array(z.string()),\n}).passthrough();\n","import { AgentConfig, AgentConfigSchema } from './types.js';\n\nexport class ConfigValidationError extends Error {\n constructor(\n message: string,\n public issues: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = 'ConfigValidationError';\n }\n}\n\nexport function validateConfig(config: unknown): AgentConfig {\n const result = AgentConfigSchema.safeParse(config);\n\n if (!result.success) {\n const issues = result.error.issues.map((issue) => ({\n path: issue.path.join('.'),\n message: issue.message,\n }));\n\n throw new ConfigValidationError(\n `Invalid agent configuration:\\n${issues.map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n issues,\n );\n }\n\n return result.data as AgentConfig;\n}\n","import { Memory } from './Memory.js';\nimport type { Experience } from '../config/types.js';\nimport type { RedisConfig, PostgresConfig } from '../config/types.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('LongTermMemory');\n\nexport class LongTermMemory extends Memory {\n private redisConfig?: RedisConfig;\n private postgresConfig?: PostgresConfig;\n private redis: any = null;\n private pg: any = null;\n private initialized = false;\n\n constructor(options: { redis?: RedisConfig; postgres?: PostgresConfig } = {}) {\n super();\n this.redisConfig = options.redis;\n this.postgresConfig = options.postgres;\n }\n\n async init(): Promise<void> {\n if (this.initialized) return;\n\n if (this.redisConfig) {\n await this.initRedis();\n }\n\n if (this.postgresConfig) {\n await this.initPostgres();\n }\n\n this.initialized = true;\n }\n\n // ── Redis: Short-term cache operations ──\n\n async remember(key: string, value: unknown, ttl?: number): Promise<void> {\n await this.ensureRedis();\n const serialized = JSON.stringify(value);\n const prefixedKey = this.redisKey(key);\n\n if (ttl) {\n await this.redis.setex(prefixedKey, ttl, serialized);\n } else {\n const defaultTtl = this.redisConfig?.ttl || 86400; // 24h default\n await this.redis.setex(prefixedKey, defaultTtl, serialized);\n }\n }\n\n async recall(key: string): Promise<unknown> {\n await this.ensureRedis();\n const data = await this.redis.get(this.redisKey(key));\n if (data === null) return undefined;\n try {\n return JSON.parse(data);\n } catch {\n return data;\n }\n }\n\n async forget(key: string): Promise<void> {\n await this.ensureRedis();\n await this.redis.del(this.redisKey(key));\n }\n\n // ── Postgres: Persistent storage operations ──\n\n async store(key: string, value: unknown): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(\n `INSERT INTO ${table} (key, value, updated_at)\n VALUES ($1, $2, NOW())\n ON CONFLICT (key) DO UPDATE SET value = $2, updated_at = NOW()`,\n [key, JSON.stringify(value)],\n );\n }\n\n async retrieve(key: string): Promise<unknown> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const result = await this.pg.query(\n `SELECT value FROM ${table} WHERE key = $1`,\n [key],\n );\n if (result.rows.length === 0) return undefined;\n try {\n return JSON.parse(result.rows[0].value);\n } catch {\n return result.rows[0].value;\n }\n }\n\n async delete(key: string): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n await this.pg.query(`DELETE FROM ${table} WHERE key = $1`, [key]);\n }\n\n // ── Postgres: Experience/semantic storage ──\n\n async addExperience(experience: Experience): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n await this.pg.query(\n `INSERT INTO ${table} (type, action, result, context, timestamp)\n VALUES ($1, $2, $3, $4, $5)`,\n [\n experience.type,\n experience.action,\n JSON.stringify(experience.result),\n JSON.stringify(experience.context || {}),\n experience.timestamp,\n ],\n );\n }\n\n async queryExperiences(query: string, limit = 20): Promise<Experience[]> {\n await this.ensurePostgres();\n const table = this.pgExperienceTable();\n\n // Text search on action and context fields\n const result = await this.pg.query(\n `SELECT type, action, result, context, timestamp FROM ${table}\n WHERE action ILIKE $1 OR context::text ILIKE $1\n ORDER BY timestamp DESC\n LIMIT $2`,\n [`%${query}%`, limit],\n );\n\n return result.rows.map((row: any) => ({\n type: row.type,\n action: row.action,\n result: typeof row.result === 'string' ? JSON.parse(row.result) : row.result,\n context: typeof row.context === 'string' ? JSON.parse(row.context) : row.context,\n timestamp: new Date(row.timestamp),\n }));\n }\n\n async clear(): Promise<void> {\n if (this.redis) {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n const keys = await this.redis.keys(`${prefix}*`);\n if (keys.length > 0) {\n await this.redis.del(...keys);\n }\n }\n\n if (this.pg) {\n await this.pg.query(`DELETE FROM ${this.pgTable()}`);\n await this.pg.query(`DELETE FROM ${this.pgExperienceTable()}`);\n }\n }\n\n async disconnect(): Promise<void> {\n if (this.redis) {\n await this.redis.quit();\n this.redis = null;\n }\n if (this.pg) {\n await this.pg.end();\n this.pg = null;\n }\n this.initialized = false;\n }\n\n // ── Schema setup (call once to create tables) ──\n\n async ensureSchema(): Promise<void> {\n await this.ensurePostgres();\n const table = this.pgTable();\n const expTable = this.pgExperienceTable();\n const schema = this.postgresConfig?.schema || 'public';\n\n await this.pg.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${table} (\n key TEXT PRIMARY KEY,\n value JSONB NOT NULL,\n updated_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE TABLE IF NOT EXISTS ${expTable} (\n id SERIAL PRIMARY KEY,\n type TEXT NOT NULL,\n action TEXT NOT NULL,\n result JSONB NOT NULL,\n context JSONB DEFAULT '{}',\n timestamp TIMESTAMPTZ NOT NULL,\n created_at TIMESTAMPTZ DEFAULT NOW()\n )\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_action\n ON ${expTable} (action)\n `);\n\n await this.pg.query(`\n CREATE INDEX IF NOT EXISTS idx_${this.sanitizeName()}_experiences_timestamp\n ON ${expTable} (timestamp DESC)\n `);\n }\n\n // ── Internal helpers ──\n\n private async initRedis(): Promise<void> {\n if (!this.redisConfig) throw new Error('Redis config not provided');\n\n try {\n const { default: Redis } = await import('ioredis');\n this.redis = new Redis(this.redisConfig.url);\n logger.info('Redis connection established');\n } catch (error) {\n logger.error(`Failed to connect to Redis: ${error}`);\n throw error;\n }\n }\n\n private async initPostgres(): Promise<void> {\n if (!this.postgresConfig) throw new Error('Postgres config not provided');\n\n try {\n const pg = await import('pg');\n const Pool = pg.default?.Pool || pg.Pool;\n this.pg = new Pool({\n connectionString: this.postgresConfig.url,\n });\n // Test the connection\n await this.pg.query('SELECT 1');\n logger.info('Postgres connection established');\n } catch (error) {\n logger.error(`Failed to connect to Postgres: ${error}`);\n throw error;\n }\n }\n\n private async ensureRedis(): Promise<void> {\n if (!this.redis) {\n if (!this.redisConfig) {\n throw new Error('Redis not configured. Provide redis config in memory settings.');\n }\n await this.initRedis();\n }\n }\n\n private async ensurePostgres(): Promise<void> {\n if (!this.pg) {\n if (!this.postgresConfig) {\n throw new Error('Postgres not configured. Provide postgres config in memory settings.');\n }\n await this.initPostgres();\n }\n }\n\n private redisKey(key: string): string {\n const prefix = this.redisConfig?.keyPrefix || 'moltium:';\n return `${prefix}${key}`;\n }\n\n private pgTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}`;\n }\n\n private pgExperienceTable(): string {\n const schema = this.postgresConfig?.schema || 'public';\n const table = this.postgresConfig?.tableName || 'moltium_memory';\n return `${schema}.${table}_experiences`;\n }\n\n private sanitizeName(): string {\n return (this.postgresConfig?.tableName || 'moltium_memory').replace(/[^a-z0-9_]/g, '_');\n }\n}\n","import express from 'express';\nimport { createRoutes } from './routes.js';\nimport { requestLogger, errorHandler, authMiddleware } from './middleware.js';\nimport type { Agent } from '../agent/Agent.js';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport interface ServerOptions {\n port?: number;\n host?: string;\n}\n\nexport function createApp(agent: Agent) {\n const app = express();\n\n app.use(express.json());\n app.use(requestLogger);\n app.use(authMiddleware);\n app.use(createRoutes(agent));\n app.use(errorHandler);\n\n return app;\n}\n\nexport async function startServer(agent: Agent, options: ServerOptions = {}): Promise<void> {\n const port = options.port || parseInt(process.env.PORT || '3000', 10);\n const host = options.host || '0.0.0.0';\n\n const app = createApp(agent);\n\n await agent.start();\n\n app.listen(port, host, () => {\n logger.info(`Agent \"${agent.name}\" running at http://${host}:${port}`);\n });\n\n // Graceful shutdown\n const shutdown = async () => {\n logger.info('Received shutdown signal');\n await agent.stop();\n process.exit(0);\n };\n\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n","import { Router, type Request, type Response } from 'express';\nimport type { Agent } from '../agent/Agent.js';\n\nexport function createRoutes(agent: Agent): Router {\n const router = Router();\n\n router.get('/', (_req: Request, res: Response) => {\n res.json({\n agent: agent.name,\n type: agent.config.type || 'general',\n state: agent.getState(),\n endpoints: {\n 'GET /': 'This overview',\n 'GET /health': 'Health check',\n 'GET /status': 'Agent status and uptime',\n 'POST /message': 'Send a message to the agent (body: { message })',\n 'POST /action': 'Trigger a specific action (body: { action, parameters })',\n 'GET /config': 'View agent configuration (redacted)',\n 'POST /shutdown': 'Graceful shutdown',\n },\n });\n });\n\n router.get('/health', (_req: Request, res: Response) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n });\n\n router.get('/status', (_req: Request, res: Response) => {\n res.json({\n name: agent.name,\n state: agent.getState(),\n type: agent.config.type || 'general',\n uptime: process.uptime(),\n timestamp: new Date().toISOString(),\n });\n });\n\n router.post('/message', async (req: Request, res: Response) => {\n try {\n const { message } = req.body;\n if (!message) {\n res.status(400).json({ error: 'Missing message field' });\n return;\n }\n\n const response = await agent.getLLM().generateText(message, {\n systemPrompt: `You are ${agent.name}. ${agent.config.personality.bio}`,\n temperature: agent.config.llm.temperature,\n });\n\n res.json({ response });\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.post('/action', async (req: Request, res: Response) => {\n try {\n const { action, parameters } = req.body;\n if (!action) {\n res.status(400).json({ error: 'Missing action field' });\n return;\n }\n\n const result = await agent.act(action, parameters || {});\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: error instanceof Error ? error.message : 'Unknown error' });\n }\n });\n\n router.get('/config', (_req: Request, res: Response) => {\n // Return config without sensitive fields\n const safeConfig = {\n name: agent.config.name,\n type: agent.config.type,\n personality: agent.config.personality,\n behaviors: {\n autonomous: agent.config.behaviors.autonomous,\n decisionMaking: agent.config.behaviors.decisionMaking,\n actionsPerHour: typeof agent.config.behaviors.actionsPerHour === 'function'\n ? '(dynamic)'\n : agent.config.behaviors.actionsPerHour,\n sleepSchedule: agent.config.behaviors.sleepSchedule,\n },\n memory: { type: agent.config.memory.type },\n actions: agent.config.actions,\n };\n\n res.json(safeConfig);\n });\n\n router.post('/shutdown', async (_req: Request, res: Response) => {\n res.json({ message: 'Shutting down...' });\n await agent.stop();\n process.exit(0);\n });\n\n return router;\n}\n","import type { Request, Response, NextFunction } from 'express';\nimport { createLogger } from '../logger.js';\n\nconst logger = createLogger('Server');\n\nexport function requestLogger(req: Request, _res: Response, next: NextFunction): void {\n logger.debug(`${req.method} ${req.path}`);\n next();\n}\n\nexport function errorHandler(err: Error, _req: Request, res: Response, _next: NextFunction): void {\n logger.error(`Server error: ${err.message}`);\n res.status(500).json({ error: err.message });\n}\n\nexport function authMiddleware(req: Request, res: Response, next: NextFunction): void {\n const authToken = process.env.AGENT_AUTH_TOKEN;\n\n // If no auth token is configured, skip authentication\n if (!authToken) {\n next();\n return;\n }\n\n const provided = req.headers.authorization?.replace('Bearer ', '');\n if (provided !== authToken) {\n res.status(401).json({ error: 'Unauthorized' });\n return;\n }\n\n next();\n}\n"],"mappings":";AAAA,OAAO,aAAa;AAEpB,IAAM,WAAW,QAAQ,IAAI,aAAa;AAEnC,SAAS,aAAa,OAA+B;AAC1D,SAAO,QAAQ,aAAa;AAAA,IAC1B,OAAO;AAAA,IACP,QAAQ,QAAQ,OAAO;AAAA,MACrB,QAAQ,OAAO,UAAU;AAAA,MACzB,QAAQ,OAAO,MAAM,EAAE,MAAM,CAAC;AAAA,MAC9B,QAAQ,OAAO,OAAO,CAAC,EAAE,WAAW,OAAO,OAAAA,QAAO,SAAS,GAAG,KAAK,MAAM;AACvE,cAAM,UAAU,OAAO,KAAK,IAAI,EAAE,SAAS,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,KAAK;AAC5E,eAAO,GAAG,SAAS,KAAKA,MAAK,KAAK,KAAK,KAAK,OAAO,GAAG,OAAO;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,IACA,YAAY,CAAC,IAAI,QAAQ,WAAW,QAAQ,CAAC;AAAA,EAC/C,CAAC;AACH;;;ACfA,IAAM,SAAS,aAAa,WAAW;AAShC,IAAM,YAAN,MAAgB;AAAA,EACb,OAAuB,CAAC;AAAA,EACxB,SAAsD,oBAAI,IAAI;AAAA,EAC9D,UAAU;AAAA,EAElB,OAAO,KAAyB;AAC9B,SAAK,KAAK,KAAK,GAAG;AAClB,WAAO,MAAM,mBAAmB,IAAI,IAAI,WAAW,IAAI,UAAU,KAAK;AAAA,EACxE;AAAA,EAEA,UAAU,MAAoB;AAC5B,SAAK,OAAO,KAAK,KAAK,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI;AACnD,UAAM,QAAQ,KAAK,OAAO,IAAI,IAAI;AAClC,QAAI,OAAO;AACT,oBAAc,KAAK;AACnB,WAAK,OAAO,OAAO,IAAI;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,QAAS;AAClB,SAAK,UAAU;AAEf,eAAW,OAAO,KAAK,MAAM;AAC3B,YAAM,QAAQ,YAAY,YAAY;AACpC,YAAI;AACF,iBAAO,MAAM,gBAAgB,IAAI,IAAI,EAAE;AACvC,gBAAM,IAAI,QAAQ;AAClB,cAAI,UAAU,KAAK,IAAI;AAAA,QACzB,SAAS,OAAO;AACd,iBAAO,MAAM,eAAe,IAAI,IAAI,IAAI;AAAA,YACtC,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAC9D,CAAC;AAAA,QACH;AAAA,MACF,GAAG,IAAI,UAAU;AAEjB,WAAK,OAAO,IAAI,IAAI,MAAM,KAAK;AAAA,IACjC;AAEA,WAAO,KAAK,0BAA0B,KAAK,KAAK,MAAM,OAAO;AAAA,EAC/D;AAAA,EAEA,OAAa;AACX,SAAK,UAAU;AACf,eAAW,CAAC,MAAM,KAAK,KAAK,KAAK,QAAQ;AACvC,oBAAc,KAAK;AAAA,IACrB;AACA,SAAK,OAAO,MAAM;AAClB,WAAO,KAAK,mBAAmB;AAAA,EACjC;AAAA,EAEA,YAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAA0B;AACxB,WAAO,CAAC,GAAG,KAAK,IAAI;AAAA,EACtB;AACF;;;AClEO,IAAM,iBAAN,MAAqB;AAAA,EAClB,UAAU,oBAAI,IAAoB;AAAA,EAE1C,SAAS,QAAsB;AAC7B,QAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG;AACjC,YAAM,IAAI,MAAM,WAAW,OAAO,IAAI,yBAAyB;AAAA,IACjE;AACA,SAAK,QAAQ,IAAI,OAAO,MAAM,MAAM;AAAA,EACtC;AAAA,EAEA,WAAW,MAAoB;AAC7B,SAAK,QAAQ,OAAO,IAAI;AAAA,EAC1B;AAAA,EAEA,IAAI,MAAkC;AACpC,WAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,EAC9B;AAAA,EAEA,IAAI,MAAuB;AACzB,WAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,EAC9B;AAAA,EAEA,OAAiB;AACf,WAAO,MAAM,KAAK,KAAK,QAAQ,OAAO,CAAC;AAAA,EACzC;AAAA,EAEA,YAAsB;AACpB,WAAO,MAAM,KAAK,KAAK,QAAQ,KAAK,CAAC;AAAA,EACvC;AACF;;;AC5BA,IAAMC,UAAS,aAAa,eAAe;AAEpC,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAC9C,YACE,SACO,YACA,cAAuB,MAC9B;AACA,UAAM,OAAO;AAHN;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EAER,YAAY,UAA0B;AACpC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,QAAQ,YAAoB,SAA+C;AAC/E,UAAM,SAAS,KAAK,SAAS,IAAI,UAAU;AAE3C,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR,WAAW,UAAU;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,IAAAA,QAAO,KAAK,qBAAqB,UAAU,EAAE;AAE7C,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,QAAQ,OAAO;AAC3C,MAAAA,QAAO,KAAK,qBAAqB,UAAU,IAAI,EAAE,SAAS,OAAO,QAAQ,CAAC;AAC1E,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,MAAAA,QAAO,MAAM,kBAAkB,UAAU,IAAI,EAAE,OAAO,QAAQ,CAAC;AAC/D,YAAM,IAAI;AAAA,QACR,WAAW,UAAU,aAAa,OAAO;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,sBAAoE;AAClE,WAAO,KAAK,SAAS,KAAK,EAAE,IAAI,CAAC,YAAY;AAAA,MAC3C,MAAM,OAAO;AAAA,MACb,aAAa,OAAO;AAAA,IACtB,EAAE;AAAA,EACJ;AACF;;;ACvDO,IAAM,yBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,QAAQ,SAA+C;AAC3D,UAAM,EAAE,SAAS,UAAU,IAAI,QAAQ;AAKvC,QAAI,CAAC,SAAS;AACZ,aAAO,EAAE,SAAS,OAAO,OAAO,sCAAsC;AAAA,IACxE;AAEA,UAAM,UAAmC,CAAC;AAC1C,UAAM,iBAAiB,QAAQ,OAAO,kBAAkB,CAAC;AACzD,UAAM,kBAAkB,aAAa,OAAO,KAAK,cAAc;AAE/D,eAAW,YAAY,iBAAiB;AACtC,YAAM,UAAU,eAAe,QAAQ;AACvC,UAAI,CAAC,QAAS;AAEd,UAAI;AACF,cAAM,SAAS,MAAM,QAAQ,KAAK,OAAO;AACzC,gBAAQ,QAAQ,IAAI;AAAA,MACtB,SAAS,OAAO;AACd,gBAAQ,QAAQ,IAAI;AAAA,UAClB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,SAAS,MAAM,MAAM,QAAQ;AAAA,EACxC;AACF;AAEO,IAAM,yBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,QAAQ,SAA+C;AAC3D,UAAM,EAAE,WAAW,SAAS,SAAS,IAAI,QAAQ;AAMjD,QAAI,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU;AACvC,aAAO,EAAE,SAAS,OAAO,OAAO,4DAA4D;AAAA,IAC9F;AAEA,UAAM,UAAU,QAAQ,OAAO,iBAAiB,QAAQ;AACxD,QAAI,CAAC,SAAS;AACZ,aAAO,EAAE,SAAS,OAAO,OAAO,uCAAuC,QAAQ,GAAG;AAAA,IACpF;AAEA,UAAM,SAAS,MAAM,QAAQ,MAAM,WAAW,OAAO;AACrD,WAAO,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,EACvC;AACF;AAEO,IAAM,eAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,QAAQ,SAA+C;AAG3D,UAAM,EAAE,QAAQ,SAAS,SAAS,IAAI,QAAQ;AAM9C,QAAI,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU;AACpC,aAAO,EAAE,SAAS,OAAO,OAAO,yDAAyD;AAAA,IAC3F;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,wCAAwC,QAAQ;AAAA,IACzD;AAAA,EACF;AACF;AAEO,IAAM,qBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM,QAAQ,SAA+C;AAC3D,UAAM,EAAE,UAAU,OAAO,WAAW,IAAI,QAAQ;AAMhD,QAAI,CAAC,YAAY,UAAU,QAAW;AACpC,aAAO,EAAE,SAAS,OAAO,OAAO,+CAA+C;AAAA,IACjF;AAGA,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA,WAAW,KAAK,IAAI,IAAI,QAAQ;AAAA,MAChC,YAAY,cAAc,CAAC;AAAA,IAC7B;AAEA,UAAM,QAAQ,OAAO,MAAM,aAAa,QAAQ,IAAI,KAAK,IAAI,CAAC,IAAI,aAAa;AAE/E,WAAO,EAAE,SAAS,MAAM,MAAM,cAAc;AAAA,EAC9C;AACF;;;AC9FO,IAAM,iBAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AClBO,SAAS,kBAAkB,QAA6B;AAC7D,QAAM,QAAkB,CAAC;AAEzB,QAAM,KAAK,WAAW,OAAO,IAAI,2BAA2B;AAE5D,MAAI,OAAO,MAAM;AACf,UAAM,KAAK,cAAc,OAAO,IAAI,GAAG;AAAA,EACzC;AAEA,MAAI,OAAO,YAAY,KAAK;AAC1B,UAAM,KAAK;AAAA;AAAA,EAAkB,OAAO,YAAY,GAAG,EAAE;AAAA,EACvD;AAEA,MAAI,OAAO,YAAY,OAAO,SAAS,GAAG;AACxC,UAAM,KAAK;AAAA,sBAAyB,OAAO,YAAY,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,EAC5E;AAEA,MAAI,OAAO,IAAI,cAAc;AAC3B,UAAM,KAAK;AAAA,EAAK,OAAO,IAAI,YAAY,EAAE;AAAA,EAC3C;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAEO,SAAS,oBACd,SACA,kBACQ;AACR,QAAM,aAAa,iBAChB,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,EAAE,WAAW,EAAE,EAC1C,KAAK,IAAI;AAEZ,SAAO;AAAA;AAAA;AAAA,EAGP,UAAU;AAAA;AAAA;AAAA,EAGV,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQlC;AAEO,SAAS,iBAAiB,WAAmB,kBAA0B,YAA6C;AACzH,SAAO,gCAAgC,SAAS;AAAA;AAAA;AAAA,EAGhD,gBAAgB;AAAA;AAAA;AAAA,EAGhB,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQrC;;;AC5DA,IAAMC,UAAS,aAAa,qBAAqB;AAE1C,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAChD,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAMO,SAAS,qBACd,MACA,aACA,aACQ;AACR,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS,OAAO,YAAkD;AAChE,MAAAA,QAAO,KAAK,gCAAgC,IAAI,EAAE;AAElD,YAAM,SAAS,iBAAiB,MAAM,aAAa,QAAQ,UAAU;AAErE,UAAI;AACF,cAAM,WAAW,MAAM,YAAY,aAAa,QAAQ;AAAA,UACtD,aAAa;AAAA,UACb,WAAW;AAAA,QACb,CAAC;AAED,cAAM,YAAY,SAAS,MAAM,aAAa;AAC9C,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI;AAAA,YACR,4CAA4C,IAAI;AAAA,UAClD;AAAA,QACF;AAEA,cAAM,SAAS,KAAK,MAAM,UAAU,CAAC,CAAC;AACtC,eAAO;AAAA,UACL,SAAS,OAAO,WAAW;AAAA,UAC3B,MAAM,OAAO,QAAQ;AAAA,QACvB;AAAA,MACF,SAAS,OAAO;AACd,YAAI,iBAAiB,uBAAwB,OAAM;AACnD,cAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,QAAAA,QAAO,MAAM,yCAAyC,IAAI,IAAI,EAAE,OAAO,QAAQ,CAAC;AAChF,cAAM,IAAI;AAAA,UACR,8BAA8B,IAAI,MAAM,OAAO;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACzDO,IAAe,SAAf,MAAsB;AAiB7B;;;ACXO,IAAM,kBAAN,cAA8B,OAAO;AAAA,EAClC,QAAQ,oBAAI,IAAwB;AAAA,EACpC,SAAS,oBAAI,IAAqB;AAAA,EAClC,cAA4B,CAAC;AAAA,EAErC,MAAM,SAAS,KAAa,OAAgB,KAA6B;AACvE,SAAK,MAAM,IAAI,KAAK;AAAA,MAClB;AAAA,MACA,WAAW,MAAM,KAAK,IAAI,IAAI,MAAM,MAAO;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,KAA+B;AAC1C,UAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,QAAI,CAAC,MAAO,QAAO;AAEnB,QAAI,MAAM,aAAa,KAAK,IAAI,IAAI,MAAM,WAAW;AACnD,WAAK,MAAM,OAAO,GAAG;AACrB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,MAAM,OAAO,KAA4B;AACvC,SAAK,MAAM,OAAO,GAAG;AAAA,EACvB;AAAA,EAEA,MAAM,MAAM,KAAa,OAA+B;AACtD,SAAK,OAAO,IAAI,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,SAAS,KAA+B;AAC5C,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC5B;AAAA,EAEA,MAAM,OAAO,KAA4B;AACvC,SAAK,OAAO,OAAO,GAAG;AAAA,EACxB;AAAA,EAEA,MAAM,cAAc,YAAuC;AACzD,SAAK,YAAY,KAAK,UAAU;AAAA,EAClC;AAAA,EAEA,MAAM,iBAAiB,OAAe,QAAgB,IAA2B;AAE/E,UAAM,aAAa,MAAM,YAAY;AACrC,WAAO,KAAK,YACT;AAAA,MACC,CAAC,QACC,IAAI,KAAK,YAAY,EAAE,SAAS,UAAU,KAC1C,IAAI,OAAO,YAAY,EAAE,SAAS,UAAU;AAAA,IAChD,EACC,MAAM,CAAC,KAAK;AAAA,EACjB;AAAA,EAEA,MAAM,QAAuB;AAC3B,SAAK,MAAM,MAAM;AACjB,SAAK,OAAO,MAAM;AAClB,SAAK,cAAc,CAAC;AAAA,EACtB;AACF;;;ACrEA,OAAO,eAAe;;;ACkBf,IAAe,cAAf,MAA2B;AAUlC;;;ADzBO,IAAM,oBAAN,cAAgC,YAAY;AAAA,EACjD,OAAO;AAAA,EACC;AAAA,EACA;AAAA,EAER,YAAY,QAAgB,QAAgB,4BAA4B;AACtE,UAAM;AACN,SAAK,SAAS,IAAI,UAAU,EAAE,OAAO,CAAC;AACtC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,MAAM,aAAa,QAAgB,SAA4C;AAC7E,UAAM,WAAW,MAAM,KAAK,OAAO,SAAS,OAAO;AAAA,MACjD,OAAO,KAAK;AAAA,MACZ,YAAY,SAAS,aAAa;AAAA,MAClC,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,OAAO,CAAC;AAAA,MAC5C,GAAI,SAAS,eAAe,EAAE,QAAQ,QAAQ,aAAa,IAAI,CAAC;AAAA,MAChE,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,MACjF,GAAI,SAAS,gBAAgB,EAAE,gBAAgB,QAAQ,cAAc,IAAI,CAAC;AAAA,IAC5E,CAAC;AAED,UAAM,YAAY,SAAS,QAAQ,KAAK,CAAC,UAAU,MAAM,SAAS,MAAM;AACxE,WAAO,YAAY,UAAU,OAAO;AAAA,EACtC;AAAA,EAEA,MAAM,mBAAsB,QAAgB,QAA0B,SAAuC;AAC3G,UAAM,mBAAmB,GAAG,MAAM;AAAA;AAAA;AAAA,EAAyD,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA;AAE1H,UAAM,OAAO,MAAM,KAAK,aAAa,kBAAkB,OAAO;AAE9D,UAAM,YAAY,KAAK,MAAM,aAAa;AAC1C,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,WAAO,KAAK,MAAM,UAAU,CAAC,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,KAAK,UAAqB,SAA6C;AAC3E,UAAM,iBAAiB,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ;AACjE,UAAM,eAAe,SAClB,OAAO,CAAC,MAAM,EAAE,SAAS,QAAQ,EACjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAA8B,SAAS,EAAE,QAAQ,EAAE;AAE5E,UAAM,WAAW,MAAM,KAAK,OAAO,SAAS,OAAO;AAAA,MACjD,OAAO,KAAK;AAAA,MACZ,YAAY,SAAS,aAAa;AAAA,MAClC,UAAU;AAAA,MACV,GAAI,eAAe,SAAS,IAAI,EAAE,QAAQ,eAAe,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,MAC/F,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IACnF,CAAC;AAED,UAAM,YAAY,SAAS,QAAQ,KAAK,CAAC,UAAU,MAAM,SAAS,MAAM;AACxE,WAAO,EAAE,MAAM,aAAa,SAAS,YAAY,UAAU,OAAO,GAAG;AAAA,EACvE;AAAA,EAEA,OAAO,eAAe,QAAgB,SAAmD;AACvF,UAAM,SAAS,KAAK,OAAO,SAAS,OAAO;AAAA,MACzC,OAAO,KAAK;AAAA,MACZ,YAAY,SAAS,aAAa;AAAA,MAClC,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,OAAO,CAAC;AAAA,MAC5C,GAAI,SAAS,eAAe,EAAE,QAAQ,QAAQ,aAAa,IAAI,CAAC;AAAA,MAChE,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IACnF,CAAC;AAED,qBAAiB,SAAS,QAAQ;AAChC,UAAI,MAAM,SAAS,yBAAyB,MAAM,MAAM,SAAS,cAAc;AAC7E,cAAM,MAAM,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AACF;;;AE1EA,OAAO,YAAY;AAGZ,IAAM,iBAAN,cAA6B,YAAY;AAAA,EAC9C,OAAO;AAAA,EACC;AAAA,EACA;AAAA,EAER,YAAY,QAAgB,QAAgB,UAAU;AACpD,UAAM;AACN,SAAK,SAAS,IAAI,OAAO,EAAE,OAAO,CAAC;AACnC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,MAAM,aAAa,QAAgB,SAA4C;AAC7E,UAAM,WAAiE,CAAC;AAExE,QAAI,SAAS,cAAc;AACzB,eAAS,KAAK,EAAE,MAAM,UAAU,SAAS,QAAQ,aAAa,CAAC;AAAA,IACjE;AACA,aAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,OAAO,CAAC;AAE/C,UAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,MACzD,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,YAAY,SAAS,aAAa;AAAA,MAClC,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,MACjF,GAAI,SAAS,gBAAgB,EAAE,MAAM,QAAQ,cAAc,IAAI,CAAC;AAAA,IAClE,CAAC;AAED,WAAO,SAAS,QAAQ,CAAC,GAAG,SAAS,WAAW;AAAA,EAClD;AAAA,EAEA,MAAM,mBAAsB,QAAgB,QAA0B,SAAuC;AAC3G,UAAM,mBAAmB,GAAG,MAAM;AAAA;AAAA;AAAA,EAAyD,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA;AAE1H,UAAM,OAAO,MAAM,KAAK,aAAa,kBAAkB,OAAO;AAE9D,UAAM,YAAY,KAAK,MAAM,aAAa;AAC1C,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAEA,WAAO,KAAK,MAAM,UAAU,CAAC,CAAC;AAAA,EAChC;AAAA,EAEA,MAAM,KAAK,UAAqB,SAA6C;AAC3E,UAAM,iBAAuE,SAAS,IAAI,CAAC,OAAO;AAAA,MAChG,MAAM,EAAE;AAAA,MACR,SAAS,EAAE;AAAA,IACb,EAAE;AAEF,UAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,MACzD,OAAO,KAAK;AAAA,MACZ,UAAU;AAAA,MACV,YAAY,SAAS,aAAa;AAAA,MAClC,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IACnF,CAAC;AAED,WAAO,EAAE,MAAM,aAAa,SAAS,SAAS,QAAQ,CAAC,GAAG,SAAS,WAAW,GAAG;AAAA,EACnF;AAAA,EAEA,OAAO,eAAe,QAAgB,SAAmD;AACvF,UAAM,WAAiE,CAAC;AAExE,QAAI,SAAS,cAAc;AACzB,eAAS,KAAK,EAAE,MAAM,UAAU,SAAS,QAAQ,aAAa,CAAC;AAAA,IACjE;AACA,aAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,OAAO,CAAC;AAE/C,UAAM,SAAS,MAAM,KAAK,OAAO,KAAK,YAAY,OAAO;AAAA,MACvD,OAAO,KAAK;AAAA,MACZ;AAAA,MACA,YAAY,SAAS,aAAa;AAAA,MAClC,QAAQ;AAAA,MACR,GAAI,SAAS,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IACnF,CAAC;AAED,qBAAiB,SAAS,QAAQ;AAChC,YAAM,QAAQ,MAAM,QAAQ,CAAC,GAAG,OAAO;AACvC,UAAI,MAAO,OAAM;AAAA,IACnB;AAAA,EACF;AACF;;;ACnFA,OAAO,WAAmC;;;ACEnC,IAAe,gBAAf,MAA6B;AAapC;;;ADVO,IAAM,kBAAN,cAA8B,cAAc;AAAA,EACjD,WAAW;AAAA,EACH;AAAA,EACA;AAAA,EAER,YAAY,QAAwB;AAClC,UAAM;AACN,SAAK,SAAS;AACd,SAAK,SAAS,MAAM,OAAO;AAAA,MACzB,SAAS,OAAO,WAAW;AAAA,MAC3B,SAAS;AAAA,QACP,eAAe,UAAU,OAAO,MAAM;AAAA,QACtC,gBAAgB;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UAAyB;AAE7B,UAAM,KAAK,OAAO,IAAI,KAAK;AAAA,EAC7B;AAAA,EAEA,MAAM,aAA4B;AAAA,EAElC;AAAA,EAEA,MAAM,KAAK,SAAsC;AAC/C,UAAM,WAAW,MAAM,KAAK,OAAO,KAAK,UAAU,EAAE,QAAQ,CAAC;AAC7D,WAAO;AAAA,MACL,IAAI,SAAS,KAAK;AAAA,MAClB,KAAK,SAAS,KAAK;AAAA,MACnB,WAAW,IAAI,KAAK,SAAS,KAAK,UAAU;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,QAAgB,SAAuC;AACjE,UAAM,WAAW,MAAM,KAAK,OAAO,KAAK,UAAU,MAAM,YAAY,EAAE,QAAQ,CAAC;AAC/E,WAAO;AAAA,MACL,IAAI,SAAS,KAAK;AAAA,MAClB,UAAU;AAAA,MACV,KAAK,SAAS,KAAK;AAAA,MACnB,WAAW,IAAI,KAAK,SAAS,KAAK,UAAU;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,QAA+B;AACxC,UAAM,KAAK,OAAO,KAAK,UAAU,MAAM,OAAO;AAAA,EAChD;AAAA,EAEA,MAAM,OAAO,QAA+B;AAC1C,UAAM,KAAK,OAAO,KAAK,UAAU,MAAM,SAAS;AAAA,EAClD;AAAA,EAEA,MAAM,cAAkC;AACtC,UAAM,WAAW,MAAM,KAAK,OAAO,IAAI,WAAW;AAClD,WAAO,SAAS,KAAK,SAAS,IAAI,CAAC,OAAY;AAAA,MAC7C,IAAI,EAAE;AAAA,MACN,UAAU,EAAE;AAAA,MACZ,YAAY,EAAE;AAAA,MACd,SAAS,EAAE;AAAA,MACX,WAAW,IAAI,KAAK,EAAE,UAAU;AAAA,MAChC,UAAU;AAAA,IACZ,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,SAAwC;AACpD,UAAM,SAAkC,CAAC;AACzC,QAAI,SAAS,MAAO,QAAO,QAAQ,QAAQ;AAC3C,QAAI,SAAS,OAAQ,QAAO,SAAS,QAAQ;AAC7C,QAAI,SAAS,MAAO,QAAO,QAAQ,QAAQ,MAAM,YAAY;AAE7D,UAAM,WAAW,MAAM,KAAK,OAAO,IAAI,SAAS,EAAE,OAAO,CAAC;AAC1D,WAAO,SAAS,KAAK,MAAM,IAAI,CAAC,OAAY;AAAA,MAC1C,IAAI,EAAE;AAAA,MACN,UAAU,EAAE;AAAA,MACZ,YAAY,EAAE;AAAA,MACd,SAAS,EAAE;AAAA,MACX,WAAW,IAAI,KAAK,EAAE,UAAU;AAAA,MAChC,UAAU;AAAA,MACV,OAAO,EAAE;AAAA,MACT,SAAS,EAAE;AAAA,MACX,SAAS,EAAE;AAAA,MACX,UAAU,EAAE,YAAY,CAAC;AAAA,MACzB,KAAK,EAAE;AAAA,IACT,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,QAAkC;AACjD,UAAM,WAAW,MAAM,KAAK,OAAO,IAAI,UAAU,MAAM,EAAE;AACzD,WAAO;AAAA,MACL,IAAI,SAAS,KAAK;AAAA,MAClB,MAAM,SAAS,KAAK;AAAA,MACpB,KAAK,SAAS,KAAK;AAAA,MACnB,WAAW,SAAS,KAAK;AAAA,MACzB,WAAW,SAAS,KAAK;AAAA,MACzB,UAAU;AAAA,IACZ;AAAA,EACF;AACF;;;AEnGO,IAAM,iBAAN,cAA6B,cAAc;AAAA,EAChD,WAAW;AAAA,EACH;AAAA,EACA;AAAA;AAAA,EAER,YAAY,QAAuB;AACjC,UAAM;AACN,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,UAAyB;AAE7B,UAAM,EAAE,WAAW,IAAI,MAAM,OAAO,gBAAgB;AACpD,SAAK,SAAS,IAAI,WAAW;AAAA,MAC3B,QAAQ,KAAK,OAAO,YAAY;AAAA,MAChC,WAAW,KAAK,OAAO,YAAY;AAAA,MACnC,aAAa,KAAK,OAAO,YAAY;AAAA,MACrC,cAAc,KAAK,OAAO,YAAY;AAAA,IACxC,CAAC;AAGD,UAAM,KAAK,OAAO,GAAG,GAAG;AAAA,EAC1B;AAAA,EAEA,MAAM,aAA4B;AAChC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,KAAK,SAAsC;AAC/C,UAAM,QAAQ,MAAM,KAAK,OAAO,GAAG,MAAM,OAAO;AAChD,WAAO;AAAA,MACL,IAAI,MAAM,KAAK;AAAA,MACf,KAAK,gCAAgC,MAAM,KAAK,EAAE;AAAA,MAClD,WAAW,oBAAI,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,SAAiB,SAAuC;AAClE,UAAM,QAAQ,MAAM,KAAK,OAAO,GAAG,MAAM,SAAS,OAAO;AACzD,WAAO;AAAA,MACL,IAAI,MAAM,KAAK;AAAA,MACf,UAAU;AAAA,MACV,KAAK,gCAAgC,MAAM,KAAK,EAAE;AAAA,MAClD,WAAW,oBAAI,KAAK;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,SAAgC;AACzC,UAAM,KAAK,MAAM,KAAK,OAAO,GAAG,GAAG;AACnC,UAAM,KAAK,OAAO,GAAG,KAAK,GAAG,KAAK,IAAI,OAAO;AAAA,EAC/C;AAAA,EAEA,MAAM,OAAO,QAA+B;AAC1C,UAAM,KAAK,MAAM,KAAK,OAAO,GAAG,GAAG;AACnC,UAAM,KAAK,OAAO,GAAG,OAAO,GAAG,KAAK,IAAI,MAAM;AAAA,EAChD;AAAA,EAEA,MAAM,cAAkC;AACtC,UAAM,KAAK,MAAM,KAAK,OAAO,GAAG,GAAG;AACnC,UAAM,WAAW,MAAM,KAAK,OAAO,GAAG,oBAAoB,GAAG,KAAK,IAAI;AAAA,MACpE,aAAa;AAAA,MACb,YAAY,CAAC,WAAW;AAAA,MACxB,gBAAgB,CAAC,YAAY;AAAA,MAC7B,eAAe,CAAC,QAAQ,UAAU;AAAA,IACpC,CAAC;AAED,UAAM,QAAQ,oBAAI,IAAoB;AACtC,QAAI,SAAS,UAAU,OAAO;AAC5B,iBAAW,QAAQ,SAAS,SAAS,OAAO;AAC1C,cAAM,IAAI,KAAK,IAAI,KAAK,QAAQ;AAAA,MAClC;AAAA,IACF;AAEA,YAAQ,SAAS,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAgB;AAAA,MACtD,IAAI,MAAM;AAAA,MACV,UAAU,MAAM;AAAA,MAChB,YAAY,MAAM,IAAI,MAAM,SAAS,KAAK;AAAA,MAC1C,SAAS,MAAM;AAAA,MACf,WAAW,IAAI,KAAK,MAAM,UAAU;AAAA,MACpC,UAAU;AAAA,IACZ,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,SAAwC;AACpD,UAAM,KAAK,MAAM,KAAK,OAAO,GAAG,GAAG;AACnC,UAAM,WAAW,MAAM,KAAK,OAAO,GAAG,aAAa,GAAG,KAAK,IAAI;AAAA,MAC7D,aAAa,SAAS,SAAS;AAAA,MAC/B,gBAAgB,CAAC,cAAc,gBAAgB;AAAA,IACjD,CAAC;AAED,YAAQ,SAAS,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,WAAgB;AAAA,MACtD,IAAI,MAAM;AAAA,MACV,UAAU,GAAG,KAAK;AAAA,MAClB,YAAY,GAAG,KAAK;AAAA,MACpB,SAAS,MAAM;AAAA,MACf,WAAW,IAAI,KAAK,MAAM,UAAU;AAAA,MACpC,UAAU;AAAA,MACV,OAAO,MAAM,gBAAgB;AAAA,MAC7B,SAAS,MAAM,gBAAgB;AAAA,MAC/B,SAAS,MAAM,gBAAgB;AAAA,IACjC,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,QAAkC;AACjD,UAAM,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,QAAQ;AAAA,MAC7C,eAAe,CAAC,eAAe,gBAAgB;AAAA,IACjD,CAAC;AAED,WAAO;AAAA,MACL,IAAI,KAAK,KAAK;AAAA,MACd,MAAM,KAAK,KAAK;AAAA,MAChB,KAAK,KAAK,KAAK;AAAA,MACf,WAAW,KAAK,KAAK,gBAAgB;AAAA,MACrC,WAAW,KAAK,KAAK,gBAAgB;AAAA,MACrC,UAAU;AAAA,IACZ;AAAA,EACF;AACF;;;ACvGA,IAAMC,UAAS,aAAa,OAAO;AAI5B,IAAM,QAAN,MAAY;AAAA,EACR;AAAA,EAED,QAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAwB,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EAER,iBAAgD,CAAC;AAAA,EAEjD,YAAY,QAAqB,OAAwB;AACvD,SAAK,SAAS;AACd,SAAK,QAAQ,SAAS,CAAC;AACvB,SAAK,UAAU,IAAI,gBAAgB;AACnC,SAAK,YAAY,IAAI,UAAU;AAC/B,SAAK,iBAAiB,IAAI,eAAe;AACzC,SAAK,gBAAgB,IAAI,cAAc,KAAK,cAAc;AAC1D,SAAK,eAAe,kBAAkB,MAAM;AAAA,EAC9C;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,WAAuB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,YAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAsB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAIA,gBAAgB,QAAsB;AACpC,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,mBAAmB,YAA0B;AAC3C,SAAK,gBAAgB,SAAS;AAAA,EAChC;AAAA,EAEA,kBAA0B;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAS,OAA6B;AACpC,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,WAAW,OAAsC;AAC/C,SAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,MAAM;AAAA,EACzC;AAAA,EAEA,UAAU,QAAsB;AAC9B,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,cAAc,SAAiD;AACnE,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,YAAM,KAAK,QAAQ,SAAS,KAAK,KAAK;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,eAAe,QAAsB;AACnC,SAAK,eAAe,SAAS,MAAM;AAAA,EACrC;AAAA;AAAA,EAIA,MAAM,OAAsB;AAC1B,SAAK,QAAQ;AACb,IAAAA,QAAO,KAAK,uBAAuB,KAAK,OAAO,IAAI,EAAE;AAErD,SAAK,QAAQ;AACb,SAAK,gBAAgB;AACrB,UAAM,KAAK,mBAAmB;AAE9B,QAAI,KAAK,MAAM,QAAQ;AACrB,YAAM,KAAK,MAAM,OAAO,IAAI;AAAA,IAC9B;AAEA,IAAAA,QAAO,KAAK,sBAAsB,KAAK,OAAO,IAAI,EAAE;AAAA,EACtD;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,UAAU,kBAAkB,KAAK,UAAU,QAAQ;AAC1D,YAAM,IAAI,MAAM,gCAAgC,KAAK,KAAK,EAAE;AAAA,IAC9D;AAEA,QAAI,KAAK,UAAU,QAAQ;AACzB,YAAM,KAAK,KAAK;AAAA,IAClB;AAEA,SAAK,QAAQ;AACb,IAAAA,QAAO,KAAK,kBAAkB,KAAK,OAAO,IAAI,EAAE;AAEhD,QAAI,KAAK,MAAM,SAAS;AACtB,YAAM,KAAK,MAAM,QAAQ,IAAI;AAAA,IAC/B;AAEA,SAAK,UAAU,MAAM;AAErB,QAAI,KAAK,OAAO,UAAU,YAAY;AACpC,WAAK,oBAAoB;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,MAAM,OAAsB;AAC1B,SAAK,QAAQ;AACb,IAAAA,QAAO,KAAK,mBAAmB,KAAK,OAAO,IAAI,EAAE;AAEjD,QAAI,KAAK,WAAW;AAClB,oBAAc,KAAK,SAAS;AAC5B,WAAK,YAAY;AAAA,IACnB;AAEA,SAAK,UAAU,KAAK;AAEpB,eAAW,WAAW,OAAO,OAAO,KAAK,cAAc,GAAG;AACxD,YAAM,QAAQ,WAAW;AAAA,IAC3B;AAEA,QAAI,KAAK,MAAM,YAAY;AACzB,YAAM,KAAK,MAAM,WAAW,IAAI;AAAA,IAClC;AAEA,SAAK,QAAQ;AACb,IAAAA,QAAO,KAAK,kBAAkB,KAAK,OAAO,IAAI,EAAE;AAAA,EAClD;AAAA;AAAA,EAIA,MAAM,QAA2B;AAC/B,UAAM,UAAU,MAAM,KAAK,cAAc;AACzC,UAAM,mBAAmB,KAAK,cAAc,oBAAoB;AAEhE,UAAM,SAAS,oBAAoB,SAAS,gBAAgB;AAE5D,UAAM,WAAW,MAAM,KAAK,IAAI;AAAA,MAC9B;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,UACV,QAAQ,EAAE,MAAM,SAAS;AAAA,UACzB,WAAW,EAAE,MAAM,SAAS;AAAA,UAC5B,YAAY,EAAE,MAAM,SAAS;AAAA,QAC/B;AAAA,QACA,UAAU,CAAC,UAAU,aAAa,YAAY;AAAA,MAChD;AAAA,MACA,EAAE,cAAc,KAAK,cAAc,aAAa,KAAK,OAAO,IAAI,YAAY;AAAA,IAC9E;AAEA,IAAAA,QAAO,MAAM,aAAa,SAAS,MAAM,WAAM,SAAS,SAAS,EAAE;AACnE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,YAAoB,aAAsC,CAAC,GAA0B;AAC7F,UAAM,UAAU;AAAA,MACd,OAAO;AAAA,MACP,QAAQ,KAAK;AAAA,MACb,KAAK,KAAK;AAAA,MACV;AAAA,IACF;AAEA,WAAO,KAAK,cAAc,QAAQ,YAAY,OAAO;AAAA,EACvD;AAAA,EAEA,MAAM,MAAM,YAAuC;AACjD,UAAM,KAAK,QAAQ,cAAc,UAAU;AAAA,EAC7C;AAAA,EAEA,MAAM,OAAsB;AAC1B,QAAI,KAAK,UAAU,UAAW;AAE9B,QAAI;AACF,UAAI,KAAK,MAAM,QAAQ;AACrB,cAAM,KAAK,MAAM,OAAO,IAAI;AAAA,MAC9B;AAEA,UAAI,KAAK,WAAW,EAAG;AAEvB,YAAM,WAAW,MAAM,KAAK,MAAM;AAClC,YAAM,SAAS,MAAM,KAAK,IAAI,SAAS,QAAQ,SAAS,UAAU;AAElE,YAAM,KAAK,MAAM;AAAA,QACf,MAAM;AAAA,QACN,QAAQ,SAAS;AAAA,QACjB;AAAA,QACA,WAAW,oBAAI,KAAK;AAAA,QACpB,SAAS,EAAE,WAAW,SAAS,UAAU;AAAA,MAC3C,CAAC;AAED,UAAI,KAAK,OAAO,UAAU,UAAU;AAClC,cAAM,KAAK,YAAY,YAAY,UAAU,MAAM;AAAA,MACrD;AAAA,IACF,SAAS,OAAO;AACd,MAAAA,QAAO,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,KAAK,EAAE;AAC5E,UAAI,KAAK,MAAM,WAAW,iBAAiB,OAAO;AAChD,cAAM,KAAK,MAAM,QAAQ,OAAO,IAAI;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIA,uBAAuB,QAA4D;AACjF,eAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,qBAAqB,MAAM,MAAM,MAAM,aAAa,KAAK,GAAG;AAC3E,WAAK,eAAe,SAAS,MAAM;AAAA,IACrC;AAAA,EACF;AAAA;AAAA,EAIQ,UAAgB;AACtB,UAAM,EAAE,UAAU,QAAQ,MAAM,IAAI,KAAK,OAAO;AAEhD,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,aAAK,MAAM,IAAI,kBAAkB,QAAQ,KAAK;AAC9C;AAAA,MACF,KAAK;AACH,aAAK,MAAM,IAAI,eAAe,QAAQ,KAAK;AAC3C;AAAA,MACF;AACE,cAAM,IAAI,MAAM,6BAA6B,QAAQ,EAAE;AAAA,IAC3D;AAAA,EACF;AAAA,EAEQ,kBAAwB;AAE9B,eAAW,UAAU,gBAAgB;AACnC,UAAI,KAAK,OAAO,QAAQ,SAAS,OAAO,IAAI,GAAG;AAC7C,aAAK,eAAe,SAAS,MAAM;AAAA,MACrC;AAAA,IACF;AAGA,QAAI,KAAK,OAAO,eAAe;AAC7B,iBAAW,UAAU,KAAK,OAAO,eAAe;AAC9C,aAAK,eAAe,SAAS,MAAM;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,qBAAoC;AAChD,UAAM,EAAE,OAAO,IAAI,KAAK;AAExB,QAAI,OAAO,UAAU,SAAS;AAC5B,YAAM,UAAU,IAAI,gBAAgB,OAAO,QAAQ;AACnD,UAAI;AACF,cAAM,QAAQ,QAAQ;AACtB,aAAK,eAAe,UAAU,IAAI;AAClC,QAAAA,QAAO,KAAK,4BAA4B;AAAA,MAC1C,SAAS,OAAO;AACd,QAAAA,QAAO,KAAK,uCAAuC,KAAK,EAAE;AAAA,MAC5D;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,SAAS;AAC3B,YAAM,UAAU,IAAI,eAAe,OAAO,OAAO;AACjD,UAAI;AACF,cAAM,QAAQ,QAAQ;AACtB,aAAK,eAAe,SAAS,IAAI;AACjC,QAAAA,QAAO,KAAK,2BAA2B;AAAA,MACzC,SAAS,OAAO;AACd,QAAAA,QAAO,KAAK,sCAAsC,KAAK,EAAE;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,sBAA4B;AAClC,UAAM,iBAAiB,OAAO,KAAK,OAAO,UAAU,mBAAmB,aACnE,KAAK,OAAO,UAAU,eAAe,CAAC,CAAC,IACvC,KAAK,OAAO,UAAU,kBAAkB;AAE5C,UAAM,aAAa,KAAK,MAAM,OAAU,cAAc;AAEtD,SAAK,YAAY,YAAY,MAAM,KAAK,KAAK,GAAG,UAAU;AAC1D,IAAAA,QAAO,KAAK,6BAA6B,cAAc,wBAAwB,UAAU,KAAK;AAAA,EAChG;AAAA,EAEQ,aAAsB;AAC5B,UAAM,WAAW,KAAK,OAAO,UAAU;AACvC,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,OAAO,IAAI,SAAS;AAE1B,QAAI,SAAS,QAAQ,SAAS,KAAK;AAEjC,aAAO,QAAQ,SAAS,SAAS,OAAO,SAAS;AAAA,IACnD;AACA,WAAO,QAAQ,SAAS,SAAS,OAAO,SAAS;AAAA,EACnD;AAAA,EAEA,MAAc,gBAAkD;AAC9D,WAAO;AAAA,MACL,WAAW,KAAK,OAAO;AAAA,MACvB,WAAW,KAAK,OAAO;AAAA,MACvB,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK,OAAO,YAAY;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,MAAc,YAAY,UAAkB,MAAgC;AAC1E,QAAI;AACF,YAAM,OAAO,KAAK,OAAO,WAAW,KAA0C;AAC9E,UAAI,OAAO,SAAS,YAAY;AAC9B,cAAO,KAAkB,GAAG,IAAI;AAAA,MAClC,WAAW,OAAO,SAAS,UAAU;AACnC,cAAM,EAAE,SAASC,OAAM,IAAI,MAAM,OAAO,OAAO;AAC/C,cAAMA,OAAM,KAAK,MAAM,EAAE,OAAO,MAAM,KAAK,CAAC;AAAA,MAC9C;AAAA,IACF,SAAS,OAAO;AACd,MAAAD,QAAO,MAAM,WAAW,KAAK,YAAY,KAAK,EAAE;AAAA,IAClD;AAAA,EACF;AACF;;;ACnWA,SAAS,cAAc,kBAAkB;AACzC,SAAS,eAAe;AACxB,SAAS,qBAAqB;;;ACF9B,OAAO,YAAY;AAiBZ,IAAM,iBAAN,MAAqB;AAAA,EAC1B,MAAM,UAAwC;AAC5C,UAAM,EAAE,MAAM,aAAa,QAAQ,IAAI,OAAO,QAAQ;AACtD,UAAM,WAAW,KAAK,cAAc,OAAO;AAE3C,UAAM,WAAW,KAAK,YAAY,UAAU,UAAU;AACtD,UAAM,MAAM,KAAK,YAAY,UAAU,KAAK;AAC5C,UAAM,SAAS,KAAK,YAAY,UAAU,kBAAkB;AAC5D,UAAM,YAAY,KAAK,YAAY,UAAU,WAAW;AACxD,UAAM,SAAS,KAAK,YAAY,UAAU,QAAQ;AAClD,UAAM,SAAS,KAAK,YAAY,UAAU,QAAQ;AAClD,UAAM,aAAa,KAAK,YAAY,UAAU,YAAY;AAE1D,UAAM,eAAe,KAAK,cAAc,QAAQ;AAChD,UAAM,UAAU,MAAM,IAAI,QAAQ,KAAK,IAAK,cAAc,aAAa,OAAO;AAE9E,UAAM,SAA+B;AAAA,MACnC,GAAG;AAAA,MACH,aAAa;AAAA,QACX,QAAQ,cAAc,aAAa,UAAU,CAAC;AAAA,QAC9C,KAAK;AAAA,MACP;AAAA,MACA,GAAI,SAAS,EAAE,QAAQ,KAAK,YAAY,MAAM,EAAE,IAAI,CAAC;AAAA,MACrD,GAAI,YAAY,EAAE,WAAW,KAAK,eAAe,SAAS,EAAE,IAAI,CAAC;AAAA,MACjE,GAAI,SAAS,EAAE,QAAQ,KAAK,YAAY,MAAM,EAAE,IAAI,CAAC;AAAA,MACrD,SAAS,CAAC;AAAA,MACV,GAAG;AAAA,IACL;AAEA,QAAI,QAAQ;AACV,aAAO,UAAU,OAAO,SAAS,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,KAAK,CAAC;AAAA,IACvE;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,UAAgE;AAC1E,UAAM,EAAE,QAAQ,IAAI,OAAO,QAAQ;AACnC,UAAM,WAAW,KAAK,cAAc,OAAO;AAC3C,UAAM,SAAS,KAAK,YAAY,UAAU,QAAQ;AAElD,QAAI,CAAC,OAAQ,QAAO,CAAC;AAErB,WAAO,OAAO,SAAS,IAAI,CAAC,WAAW;AAAA,MACrC,MAAM,KAAK,YAAY,MAAM,KAAK;AAAA,MAClC,aAAa,MAAM,QAAQ,KAAK;AAAA,IAClC,EAAE;AAAA,EACJ;AAAA,EAEQ,cAAc,SAAkC;AACtD,UAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,UAAM,OAAwB,CAAC;AAC/B,UAAM,QAA0D,CAAC;AAEjE,eAAW,QAAQ,OAAO;AACxB,YAAM,QAAQ,KAAK,MAAM,kBAAkB;AAC3C,UAAI,OAAO;AACT,cAAM,QAAQ,MAAM,CAAC,EAAE;AACvB,cAAM,QAAQ,MAAM,CAAC,EAAE,KAAK;AAC5B,cAAM,UAAyB,EAAE,OAAO,OAAO,SAAS,IAAI,UAAU,CAAC,EAAE;AAEzE,eAAO,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,OAAO;AACjE,gBAAM,IAAI;AAAA,QACZ;AAEA,YAAI,MAAM,WAAW,GAAG;AACtB,eAAK,KAAK,OAAO;AAAA,QACnB,OAAO;AACL,gBAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,SAAS,KAAK,OAAO;AAAA,QACvD;AAEA,cAAM,KAAK,EAAE,OAAO,QAAQ,CAAC;AAAA,MAC/B,WAAW,MAAM,SAAS,GAAG;AAC3B,cAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,WAAW,OAAO;AAAA,MACpD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,UAA2B,OAA0C;AACvF,eAAW,WAAW,UAAU;AAC9B,UAAI,QAAQ,MAAM,YAAY,MAAM,MAAM,YAAY,EAAG,QAAO;AAChE,YAAM,QAAQ,KAAK,YAAY,QAAQ,UAAU,KAAK;AACtD,UAAI,MAAO,QAAO;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,SAA2D;AAC/E,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,SAAS,KAAK,mBAAmB,QAAQ,OAAO;AACtD,WAAO;AAAA,MACL,MAAM,OAAO,MAAM,KAAK;AAAA,MACxB,MAAM,OAAO,MAAM;AAAA,MACnB,aAAa;AAAA,QACX,SAAS,OAAO,aAAa,KAAK,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,QAC5F,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAY,SAA6C;AAC/D,UAAM,SAA8B,CAAC;AAErC,eAAW,SAAS,QAAQ,UAAU;AACpC,YAAM,WAAW,MAAM,MAAM,YAAY;AACzC,YAAM,SAAS,KAAK,mBAAmB,MAAM,OAAO;AACpD,aAAO,QAAQ,IAAI;AAAA,QACjB,SAAS,OAAO,SAAS,MAAM;AAAA,QAC/B,GAAG;AAAA,MACL;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,eAAe,SAAkD;AACvE,UAAM,SAAS,KAAK,mBAAmB,QAAQ,OAAO;AACtD,WAAO;AAAA,MACL,YAAY,OAAO,YAAY,MAAM;AAAA,MACrC,gBAAiB,OAAO,iBAAiB,KAAK;AAAA,MAC9C,gBAAgB,OAAO,kBAAkB,IAAI,SAAS,OAAO,kBAAkB,GAAG,EAAE,IAAI;AAAA,MACxF,eAAe,OAAO,gBAAgB,IAAI,KAAK,mBAAmB,OAAO,gBAAgB,CAAC,IAAI;AAAA,IAChG;AAAA,EACF;AAAA,EAEQ,YAAY,SAA+C;AACjE,UAAM,SAAS,KAAK,mBAAmB,QAAQ,OAAO;AACtD,WAAO;AAAA,MACL,MAAO,OAAO,MAAM,KAAK;AAAA,MACzB,WAAW,OAAO,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA,EAEQ,mBAAmB,OAAkE;AAC3F,UAAM,QAAQ,MAAM,MAAM,qDAAqD;AAC/E,QAAI,CAAC,MAAO,QAAO,EAAE,OAAO,IAAI,KAAK,EAAE;AACvC,WAAO;AAAA,MACL,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,MAC5B,KAAK,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,MAC1B,UAAU,MAAM,CAAC,GAAG,KAAK,KAAK;AAAA,IAChC;AAAA,EACF;AAAA,EAEQ,mBAAmB,SAAyC;AAClE,UAAM,SAAiC,CAAC;AACxC,eAAW,QAAQ,QAAQ,MAAM,IAAI,GAAG;AACtC,YAAM,QAAQ,KAAK,MAAM,mCAAmC;AAC5D,UAAI,OAAO;AACT,eAAO,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK;AAAA,MAC1C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAY,KAAqB;AACvC,WAAO,IACJ,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,UAAU,EAAE;AAAA,EACzB;AACF;;;ACnLA,SAAS,SAAS;AAgSX,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,aAAa,EAAE,OAAO;AAAA,IACpB,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC1B,KAAK,EAAE,OAAO;AAAA,EAChB,CAAC,EAAE,YAAY;AAAA,EACf,KAAK,EAAE,OAAO;AAAA,IACZ,UAAU,EAAE,KAAK,CAAC,aAAa,QAAQ,CAAC;AAAA,IACxC,OAAO,EAAE,OAAO;AAAA,IAChB,QAAQ,EAAE,OAAO;AAAA,IACjB,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC/C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC1C,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC;AAAA,EACD,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACvC,WAAW,EAAE,OAAO;AAAA,IAClB,YAAY,EAAE,QAAQ;AAAA,IACtB,gBAAgB,EAAE,KAAK,CAAC,cAAc,cAAc,QAAQ,CAAC;AAAA,IAC7D,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,IACpC,eAAe,EAAE,OAAO;AAAA,MACtB,OAAO,EAAE,OAAO;AAAA,MAChB,KAAK,EAAE,OAAO;AAAA,MACd,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,CAAC,EAAE,SAAS;AAAA,EACd,CAAC;AAAA,EACD,QAAQ,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,KAAK,CAAC,UAAU,SAAS,YAAY,QAAQ,CAAC;AAAA,IACtD,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC,EAAE,YAAY;AAAA,EACf,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;AAC7B,CAAC,EAAE,YAAY;;;AC7TR,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/C,YACE,SACO,QACP;AACA,UAAM,OAAO;AAFN;AAGP,SAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,eAAe,QAA8B;AAC3D,QAAM,SAAS,kBAAkB,UAAU,MAAM;AAEjD,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,SAAS,OAAO,MAAM,OAAO,IAAI,CAAC,WAAW;AAAA,MACjD,MAAM,MAAM,KAAK,KAAK,GAAG;AAAA,MACzB,SAAS,MAAM;AAAA,IACjB,EAAE;AAEF,UAAM,IAAI;AAAA,MACR;AAAA,EAAiC,OAAO,IAAI,CAAC,MAAM,OAAO,EAAE,IAAI,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,MAC5F;AAAA,IACF;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;;;AHnBO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EAC5C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,eAAN,MAAmB;AAAA,EAChB,iBAAiB,IAAI,eAAe;AAAA,EAE5C,MAAM,KAAK,WAAuE;AAChF,UAAM,iBAAiB,QAAQ,WAAW,iBAAiB;AAC3D,UAAM,eAAe,QAAQ,WAAW,UAAU;AAElD,QAAI,WAAW,cAAc,GAAG;AAC9B,aAAO,EAAE,QAAQ,MAAM,KAAK,SAAS,cAAc,GAAG,MAAM,OAAO;AAAA,IACrE;AAEA,QAAI,WAAW,YAAY,GAAG;AAC5B,aAAO,EAAE,QAAQ,MAAM,KAAK,aAAa,YAAY,GAAG,MAAM,WAAW;AAAA,IAC3E;AAEA,UAAM,IAAI;AAAA,MACR,mCAAmC,SAAS;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,UAAwC;AACrD,QAAI;AAEF,YAAM,EAAE,WAAW,IAAI,MAAM,OAAO,MAAM;AAC1C,YAAM,OAAO,WAAW,cAAc,QAAQ,EAAE,MAAM;AAAA,QACpD,gBAAgB;AAAA,QAChB,aAAa;AAAA,MACf,CAAC;AAED,YAAM,SAAS,MAAM,KAAK,OAAO,QAAQ;AACzC,YAAM,SAAS,OAAO,WAAW;AACjC,aAAO,eAAe,MAAM;AAAA,IAC9B,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,MAAM,SAAS,wBAAyB,OAAM;AAC5E,YAAM,IAAI,mBAAmB,mCAAmC,QAAQ,KAAK,KAAK,EAAE;AAAA,IACtF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,UAAwC;AACzD,QAAI;AACF,YAAM,UAAU,aAAa,UAAU,OAAO;AAC9C,YAAM,gBAAgB,KAAK,eAAe,MAAM,OAAO;AAGvD,YAAM,SAAS;AAAA,QACb,GAAG;AAAA,QACH,KAAK,cAAc,OAAO;AAAA,UACxB,UAAW,QAAQ,IAAI,gBAA2C;AAAA,UAClE,OAAO,QAAQ,IAAI,aAAa;AAAA,UAChC,QAAQ,QAAQ,IAAI,qBAAqB,QAAQ,IAAI,kBAAkB;AAAA,QACzE;AAAA,MACF;AAEA,aAAO,eAAe,MAAM;AAAA,IAC9B,SAAS,OAAO;AACd,UAAI,iBAAiB,SAAS,MAAM,SAAS,wBAAyB,OAAM;AAC5E,YAAM,IAAI,mBAAmB,uCAAuC,QAAQ,KAAK,KAAK,EAAE;AAAA,IAC1F;AAAA,EACF;AACF;;;AItEA,IAAME,UAAS,aAAa,gBAAgB;AAErC,IAAM,iBAAN,cAA6B,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA,QAAa;AAAA,EACb,KAAU;AAAA,EACV,cAAc;AAAA,EAEtB,YAAY,UAA8D,CAAC,GAAG;AAC5E,UAAM;AACN,SAAK,cAAc,QAAQ;AAC3B,SAAK,iBAAiB,QAAQ;AAAA,EAChC;AAAA,EAEA,MAAM,OAAsB;AAC1B,QAAI,KAAK,YAAa;AAEtB,QAAI,KAAK,aAAa;AACpB,YAAM,KAAK,UAAU;AAAA,IACvB;AAEA,QAAI,KAAK,gBAAgB;AACvB,YAAM,KAAK,aAAa;AAAA,IAC1B;AAEA,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA,EAIA,MAAM,SAAS,KAAa,OAAgB,KAA6B;AACvE,UAAM,KAAK,YAAY;AACvB,UAAM,aAAa,KAAK,UAAU,KAAK;AACvC,UAAM,cAAc,KAAK,SAAS,GAAG;AAErC,QAAI,KAAK;AACP,YAAM,KAAK,MAAM,MAAM,aAAa,KAAK,UAAU;AAAA,IACrD,OAAO;AACL,YAAM,aAAa,KAAK,aAAa,OAAO;AAC5C,YAAM,KAAK,MAAM,MAAM,aAAa,YAAY,UAAU;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,KAA+B;AAC1C,UAAM,KAAK,YAAY;AACvB,UAAM,OAAO,MAAM,KAAK,MAAM,IAAI,KAAK,SAAS,GAAG,CAAC;AACpD,QAAI,SAAS,KAAM,QAAO;AAC1B,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,KAA4B;AACvC,UAAM,KAAK,YAAY;AACvB,UAAM,KAAK,MAAM,IAAI,KAAK,SAAS,GAAG,CAAC;AAAA,EACzC;AAAA;AAAA,EAIA,MAAM,MAAM,KAAa,OAA+B;AACtD,UAAM,KAAK,eAAe;AAC1B,UAAM,QAAQ,KAAK,QAAQ;AAC3B,UAAM,KAAK,GAAG;AAAA,MACZ,eAAe,KAAK;AAAA;AAAA;AAAA,MAGpB,CAAC,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,KAA+B;AAC5C,UAAM,KAAK,eAAe;AAC1B,UAAM,QAAQ,KAAK,QAAQ;AAC3B,UAAM,SAAS,MAAM,KAAK,GAAG;AAAA,MAC3B,qBAAqB,KAAK;AAAA,MAC1B,CAAC,GAAG;AAAA,IACN;AACA,QAAI,OAAO,KAAK,WAAW,EAAG,QAAO;AACrC,QAAI;AACF,aAAO,KAAK,MAAM,OAAO,KAAK,CAAC,EAAE,KAAK;AAAA,IACxC,QAAQ;AACN,aAAO,OAAO,KAAK,CAAC,EAAE;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,KAA4B;AACvC,UAAM,KAAK,eAAe;AAC1B,UAAM,QAAQ,KAAK,QAAQ;AAC3B,UAAM,KAAK,GAAG,MAAM,eAAe,KAAK,mBAAmB,CAAC,GAAG,CAAC;AAAA,EAClE;AAAA;AAAA,EAIA,MAAM,cAAc,YAAuC;AACzD,UAAM,KAAK,eAAe;AAC1B,UAAM,QAAQ,KAAK,kBAAkB;AACrC,UAAM,KAAK,GAAG;AAAA,MACZ,eAAe,KAAK;AAAA;AAAA,MAEpB;AAAA,QACE,WAAW;AAAA,QACX,WAAW;AAAA,QACX,KAAK,UAAU,WAAW,MAAM;AAAA,QAChC,KAAK,UAAU,WAAW,WAAW,CAAC,CAAC;AAAA,QACvC,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,OAAe,QAAQ,IAA2B;AACvE,UAAM,KAAK,eAAe;AAC1B,UAAM,QAAQ,KAAK,kBAAkB;AAGrC,UAAM,SAAS,MAAM,KAAK,GAAG;AAAA,MAC3B,wDAAwD,KAAK;AAAA;AAAA;AAAA;AAAA,MAI7D,CAAC,IAAI,KAAK,KAAK,KAAK;AAAA,IACtB;AAEA,WAAO,OAAO,KAAK,IAAI,CAAC,SAAc;AAAA,MACpC,MAAM,IAAI;AAAA,MACV,QAAQ,IAAI;AAAA,MACZ,QAAQ,OAAO,IAAI,WAAW,WAAW,KAAK,MAAM,IAAI,MAAM,IAAI,IAAI;AAAA,MACtE,SAAS,OAAO,IAAI,YAAY,WAAW,KAAK,MAAM,IAAI,OAAO,IAAI,IAAI;AAAA,MACzE,WAAW,IAAI,KAAK,IAAI,SAAS;AAAA,IACnC,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,OAAO;AACd,YAAM,SAAS,KAAK,aAAa,aAAa;AAC9C,YAAM,OAAO,MAAM,KAAK,MAAM,KAAK,GAAG,MAAM,GAAG;AAC/C,UAAI,KAAK,SAAS,GAAG;AACnB,cAAM,KAAK,MAAM,IAAI,GAAG,IAAI;AAAA,MAC9B;AAAA,IACF;AAEA,QAAI,KAAK,IAAI;AACX,YAAM,KAAK,GAAG,MAAM,eAAe,KAAK,QAAQ,CAAC,EAAE;AACnD,YAAM,KAAK,GAAG,MAAM,eAAe,KAAK,kBAAkB,CAAC,EAAE;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,aAA4B;AAChC,QAAI,KAAK,OAAO;AACd,YAAM,KAAK,MAAM,KAAK;AACtB,WAAK,QAAQ;AAAA,IACf;AACA,QAAI,KAAK,IAAI;AACX,YAAM,KAAK,GAAG,IAAI;AAClB,WAAK,KAAK;AAAA,IACZ;AACA,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA,EAIA,MAAM,eAA8B;AAClC,UAAM,KAAK,eAAe;AAC1B,UAAM,QAAQ,KAAK,QAAQ;AAC3B,UAAM,WAAW,KAAK,kBAAkB;AACxC,UAAM,SAAS,KAAK,gBAAgB,UAAU;AAE9C,UAAM,KAAK,GAAG,MAAM,+BAA+B,MAAM,EAAE;AAE3D,UAAM,KAAK,GAAG,MAAM;AAAA,mCACW,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,KAKnC;AAED,UAAM,KAAK,GAAG,MAAM;AAAA,mCACW,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAStC;AAED,UAAM,KAAK,GAAG,MAAM;AAAA,uCACe,KAAK,aAAa,CAAC;AAAA,WAC/C,QAAQ;AAAA,KACd;AAED,UAAM,KAAK,GAAG,MAAM;AAAA,uCACe,KAAK,aAAa,CAAC;AAAA,WAC/C,QAAQ;AAAA,KACd;AAAA,EACH;AAAA;AAAA,EAIA,MAAc,YAA2B;AACvC,QAAI,CAAC,KAAK,YAAa,OAAM,IAAI,MAAM,2BAA2B;AAElE,QAAI;AACF,YAAM,EAAE,SAAS,MAAM,IAAI,MAAM,OAAO,SAAS;AACjD,WAAK,QAAQ,IAAI,MAAM,KAAK,YAAY,GAAG;AAC3C,MAAAA,QAAO,KAAK,8BAA8B;AAAA,IAC5C,SAAS,OAAO;AACd,MAAAA,QAAO,MAAM,+BAA+B,KAAK,EAAE;AACnD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,eAA8B;AAC1C,QAAI,CAAC,KAAK,eAAgB,OAAM,IAAI,MAAM,8BAA8B;AAExE,QAAI;AACF,YAAM,KAAK,MAAM,OAAO,IAAI;AAC5B,YAAM,OAAO,GAAG,SAAS,QAAQ,GAAG;AACpC,WAAK,KAAK,IAAI,KAAK;AAAA,QACjB,kBAAkB,KAAK,eAAe;AAAA,MACxC,CAAC;AAED,YAAM,KAAK,GAAG,MAAM,UAAU;AAC9B,MAAAA,QAAO,KAAK,iCAAiC;AAAA,IAC/C,SAAS,OAAO;AACd,MAAAA,QAAO,MAAM,kCAAkC,KAAK,EAAE;AACtD,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,cAA6B;AACzC,QAAI,CAAC,KAAK,OAAO;AACf,UAAI,CAAC,KAAK,aAAa;AACrB,cAAM,IAAI,MAAM,gEAAgE;AAAA,MAClF;AACA,YAAM,KAAK,UAAU;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,MAAc,iBAAgC;AAC5C,QAAI,CAAC,KAAK,IAAI;AACZ,UAAI,CAAC,KAAK,gBAAgB;AACxB,cAAM,IAAI,MAAM,sEAAsE;AAAA,MACxF;AACA,YAAM,KAAK,aAAa;AAAA,IAC1B;AAAA,EACF;AAAA,EAEQ,SAAS,KAAqB;AACpC,UAAM,SAAS,KAAK,aAAa,aAAa;AAC9C,WAAO,GAAG,MAAM,GAAG,GAAG;AAAA,EACxB;AAAA,EAEQ,UAAkB;AACxB,UAAM,SAAS,KAAK,gBAAgB,UAAU;AAC9C,UAAM,QAAQ,KAAK,gBAAgB,aAAa;AAChD,WAAO,GAAG,MAAM,IAAI,KAAK;AAAA,EAC3B;AAAA,EAEQ,oBAA4B;AAClC,UAAM,SAAS,KAAK,gBAAgB,UAAU;AAC9C,UAAM,QAAQ,KAAK,gBAAgB,aAAa;AAChD,WAAO,GAAG,MAAM,IAAI,KAAK;AAAA,EAC3B;AAAA,EAEQ,eAAuB;AAC7B,YAAQ,KAAK,gBAAgB,aAAa,kBAAkB,QAAQ,eAAe,GAAG;AAAA,EACxF;AACF;;;ACtRA,OAAO,aAAa;;;ACApB,SAAS,cAA2C;AAG7C,SAAS,aAAa,OAAsB;AACjD,QAAM,SAAS,OAAO;AAEtB,SAAO,IAAI,KAAK,CAAC,MAAe,QAAkB;AAChD,QAAI,KAAK;AAAA,MACP,OAAO,MAAM;AAAA,MACb,MAAM,MAAM,OAAO,QAAQ;AAAA,MAC3B,OAAO,MAAM,SAAS;AAAA,MACtB,WAAW;AAAA,QACT,SAAgB;AAAA,QAChB,eAAgB;AAAA,QAChB,eAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,gBAAiB;AAAA,QACjB,eAAiB;AAAA,QACjB,kBAAkB;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO,IAAI,WAAW,CAAC,MAAe,QAAkB;AACtD,QAAI,KAAK,EAAE,QAAQ,MAAM,YAAW,oBAAI,KAAK,GAAE,YAAY,EAAE,CAAC;AAAA,EAChE,CAAC;AAED,SAAO,IAAI,WAAW,CAAC,MAAe,QAAkB;AACtD,QAAI,KAAK;AAAA,MACP,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM,SAAS;AAAA,MACtB,MAAM,MAAM,OAAO,QAAQ;AAAA,MAC3B,QAAQ,QAAQ,OAAO;AAAA,MACvB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC,CAAC;AAAA,EACH,CAAC;AAED,SAAO,KAAK,YAAY,OAAO,KAAc,QAAkB;AAC7D,QAAI;AACF,YAAM,EAAE,QAAQ,IAAI,IAAI;AACxB,UAAI,CAAC,SAAS;AACZ,YAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,wBAAwB,CAAC;AACvD;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,MAAM,OAAO,EAAE,aAAa,SAAS;AAAA,QAC1D,cAAc,WAAW,MAAM,IAAI,KAAK,MAAM,OAAO,YAAY,GAAG;AAAA,QACpE,aAAa,MAAM,OAAO,IAAI;AAAA,MAChC,CAAC;AAED,UAAI,KAAK,EAAE,SAAS,CAAC;AAAA,IACvB,SAAS,OAAO;AACd,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,gBAAgB,CAAC;AAAA,IAC1F;AAAA,EACF,CAAC;AAED,SAAO,KAAK,WAAW,OAAO,KAAc,QAAkB;AAC5D,QAAI;AACF,YAAM,EAAE,QAAQ,WAAW,IAAI,IAAI;AACnC,UAAI,CAAC,QAAQ;AACX,YAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,uBAAuB,CAAC;AACtD;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,MAAM,IAAI,QAAQ,cAAc,CAAC,CAAC;AACvD,UAAI,KAAK,MAAM;AAAA,IACjB,SAAS,OAAO;AACd,UAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,gBAAgB,CAAC;AAAA,IAC1F;AAAA,EACF,CAAC;AAED,SAAO,IAAI,WAAW,CAAC,MAAe,QAAkB;AAEtD,UAAM,aAAa;AAAA,MACjB,MAAM,MAAM,OAAO;AAAA,MACnB,MAAM,MAAM,OAAO;AAAA,MACnB,aAAa,MAAM,OAAO;AAAA,MAC1B,WAAW;AAAA,QACT,YAAY,MAAM,OAAO,UAAU;AAAA,QACnC,gBAAgB,MAAM,OAAO,UAAU;AAAA,QACvC,gBAAgB,OAAO,MAAM,OAAO,UAAU,mBAAmB,aAC7D,cACA,MAAM,OAAO,UAAU;AAAA,QAC3B,eAAe,MAAM,OAAO,UAAU;AAAA,MACxC;AAAA,MACA,QAAQ,EAAE,MAAM,MAAM,OAAO,OAAO,KAAK;AAAA,MACzC,SAAS,MAAM,OAAO;AAAA,IACxB;AAEA,QAAI,KAAK,UAAU;AAAA,EACrB,CAAC;AAED,SAAO,KAAK,aAAa,OAAO,MAAe,QAAkB;AAC/D,QAAI,KAAK,EAAE,SAAS,mBAAmB,CAAC;AACxC,UAAM,MAAM,KAAK;AACjB,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AAED,SAAO;AACT;;;AChGA,IAAMC,UAAS,aAAa,QAAQ;AAE7B,SAAS,cAAc,KAAc,MAAgB,MAA0B;AACpF,EAAAA,QAAO,MAAM,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,EAAE;AACxC,OAAK;AACP;AAEO,SAAS,aAAa,KAAY,MAAe,KAAe,OAA2B;AAChG,EAAAA,QAAO,MAAM,iBAAiB,IAAI,OAAO,EAAE;AAC3C,MAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC;AAC7C;AAEO,SAAS,eAAe,KAAc,KAAe,MAA0B;AACpF,QAAM,YAAY,QAAQ,IAAI;AAG9B,MAAI,CAAC,WAAW;AACd,SAAK;AACL;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,QAAQ,eAAe,QAAQ,WAAW,EAAE;AACjE,MAAI,aAAa,WAAW;AAC1B,QAAI,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,eAAe,CAAC;AAC9C;AAAA,EACF;AAEA,OAAK;AACP;;;AFzBA,IAAMC,UAAS,aAAa,QAAQ;AAO7B,SAAS,UAAU,OAAc;AACtC,QAAM,MAAM,QAAQ;AAEpB,MAAI,IAAI,QAAQ,KAAK,CAAC;AACtB,MAAI,IAAI,aAAa;AACrB,MAAI,IAAI,cAAc;AACtB,MAAI,IAAI,aAAa,KAAK,CAAC;AAC3B,MAAI,IAAI,YAAY;AAEpB,SAAO;AACT;AAEA,eAAsB,YAAY,OAAc,UAAyB,CAAC,GAAkB;AAC1F,QAAM,OAAO,QAAQ,QAAQ,SAAS,QAAQ,IAAI,QAAQ,QAAQ,EAAE;AACpE,QAAM,OAAO,QAAQ,QAAQ;AAE7B,QAAM,MAAM,UAAU,KAAK;AAE3B,QAAM,MAAM,MAAM;AAElB,MAAI,OAAO,MAAM,MAAM,MAAM;AAC3B,IAAAA,QAAO,KAAK,UAAU,MAAM,IAAI,uBAAuB,IAAI,IAAI,IAAI,EAAE;AAAA,EACvE,CAAC;AAGD,QAAM,WAAW,YAAY;AAC3B,IAAAA,QAAO,KAAK,0BAA0B;AACtC,UAAM,MAAM,KAAK;AACjB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,GAAG,UAAU,QAAQ;AAC7B,UAAQ,GAAG,WAAW,QAAQ;AAChC;","names":["label","logger","logger","logger","axios","logger","logger","logger"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moltium/core",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Agent runtime, adapters, and types for the Moltium autonomous agent SDK",
5
5
  "license": "MIT",
6
6
  "keywords": ["ai", "agent", "autonomous", "llm", "sdk", "moltium"],