@moltium/core 0.1.12 → 0.1.13

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.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 ScheduledTask,\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://www.moltbook.com/api/v1',\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n }\n\n async connect(): Promise<void> {\n await this.client.get('/agents/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 submolt = this.config.defaultSubmolt || 'general';\n const title = extractTitle(content);\n\n const response = await this.client.post('/posts', {\n submolt,\n title,\n content,\n });\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}/comments`, { 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}/upvote`);\n }\n\n async follow(agentName: string): Promise<void> {\n await this.client.post(`/agents/${agentName}/follow`);\n }\n\n async getMentions(): Promise<Mention[]> {\n const response = await this.client.get('/feed', {\n params: { sort: 'new', limit: 20 },\n });\n return (response.data.posts || []).map((m: any) => ({\n id: m.id,\n authorId: m.author_id || m.author?.id || '',\n authorName: m.author_name || 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> = { sort: 'hot' };\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 || p.author?.id || '',\n authorName: p.author_name || p.author?.name || '',\n content: p.content,\n timestamp: new Date(p.created_at),\n platform: 'moltbook',\n likes: p.upvotes ?? p.likes_count,\n replies: p.comment_count ?? p.replies_count,\n reposts: p.reposts_count,\n mentions: p.mentions || [],\n url: p.url,\n }));\n }\n\n async getProfile(agentName: string): Promise<Profile> {\n const response = await this.client.get('/agents/profile', {\n params: { name: agentName },\n });\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\n/**\n * Extract a short title from the content.\n * Uses the first line or first sentence, truncated to ~80 characters.\n */\nfunction extractTitle(content: string): string {\n const firstLine = content.split('\\n')[0].trim();\n // Try to find a sentence boundary\n const sentenceEnd = firstLine.search(/[.!?]/);\n const raw = sentenceEnd > 0 && sentenceEnd <= 80\n ? firstLine.slice(0, sentenceEnd + 1)\n : firstLine;\n\n if (raw.length <= 80) return raw;\n // Truncate at last word boundary before 80 chars\n const truncated = raw.slice(0, 80).replace(/\\s+\\S*$/, '');\n return truncated + '...';\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\n/** Parse a postFrequency string into milliseconds. Supports: 'hourly', 'daily', '30m', '2h', etc. */\nfunction parsePostFrequency(freq: string): number {\n const lower = freq.toLowerCase().trim();\n\n // Named presets\n if (lower === 'realtime') return 5 * 60 * 1000; // 5 minutes\n if (lower === 'hourly') return 60 * 60 * 1000; // 1 hour\n if (lower === 'daily') return 24 * 60 * 60 * 1000; // 24 hours\n\n // Short-form: \"30m\", \"2h\", \"1d\"\n const match = lower.match(/^(\\d+)\\s*(m|min|mins|minutes?|h|hr|hrs|hours?|d|days?)$/);\n if (match) {\n const n = parseInt(match[1], 10);\n const unit = match[2][0]; // 'm', 'h', or 'd'\n if (unit === 'm') return n * 60 * 1000;\n if (unit === 'h') return n * 60 * 60 * 1000;\n if (unit === 'd') return n * 24 * 60 * 60 * 1000;\n }\n\n // Natural language: \"every 30 minutes\", \"every 2 hours\"\n const nlMin = lower.match(/every\\s+(\\d+)\\s+minutes?/);\n if (nlMin) return parseInt(nlMin[1], 10) * 60 * 1000;\n\n const nlHour = lower.match(/every\\s+(\\d+)\\s+hours?/);\n if (nlHour) return parseInt(nlHour[1], 10) * 60 * 60 * 1000;\n\n if (/every\\s+hour/.test(lower)) return 60 * 60 * 1000;\n if (/every\\s+day/.test(lower)) return 24 * 60 * 60 * 1000;\n\n return 0;\n}\n\n/** Format milliseconds into a human-readable string */\nfunction formatInterval(ms: number): string {\n if (ms < 60 * 1000) return `${Math.round(ms / 1000)}s`;\n if (ms < 60 * 60 * 1000) return `${Math.round(ms / 60000)}m`;\n if (ms < 24 * 60 * 60 * 1000) return `${Math.round(ms / 3600000)}h`;\n return `${Math.round(ms / 86400000)}d`;\n}\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 this.initScheduledJobs();\n\n if (this.hooks.onInit) {\n await this.hooks.onInit(this);\n }\n\n await this.postStartupMessages();\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.social;\n\n // ── Moltbook: detect from env, merge with config ──\n await this.initMoltbook(social);\n\n // ── Twitter: detect from env, merge with config ──\n await this.initTwitter(social);\n\n if (Object.keys(this.socialAdapters).length === 0) {\n logger.warn('Social: No adapters connected. Set MOLTBOOK_API_KEY or Twitter env vars in your .env to enable.');\n }\n }\n\n private async initMoltbook(social: typeof this.config.social): Promise<void> {\n // Resolve API key: config takes priority, then env\n const envKey = process.env.MOLTBOOK_API_KEY;\n const configMoltbook = social.moltbook;\n const apiKey = configMoltbook?.apiKey || envKey || '';\n const isPlaceholder = !apiKey || apiKey === 'your-moltbook-key-here';\n\n // Determine if moltbook should be active\n // A valid API key (from env or config) always wins over enabled: false in scaffold.\n // The scaffold sets enabled: false as a default — setting the key means the user wants it on.\n const explicitlyDisabled = configMoltbook && configMoltbook.enabled === false && !envKey;\n const shouldConnect = !isPlaceholder && !explicitlyDisabled;\n\n if (explicitlyDisabled) {\n logger.info('Moltbook: Disabled in config and no MOLTBOOK_API_KEY in env — skipping');\n return;\n }\n\n if (isPlaceholder) {\n if (configMoltbook?.enabled || envKey) {\n logger.warn('Moltbook: MOLTBOOK_API_KEY is missing or still a placeholder.');\n logger.warn(' Fix: Set a valid MOLTBOOK_API_KEY in your .env file.');\n }\n // No key at all and not configured — stay silent\n return;\n }\n\n if (!shouldConnect) return;\n\n // Build the effective config by merging env + config\n const source = configMoltbook?.apiKey ? 'config' : 'environment';\n const baseUrl = configMoltbook?.baseUrl || process.env.MOLTBOOK_BASE_URL || 'https://www.moltbook.com/api/v1';\n const defaultSubmolt = configMoltbook?.defaultSubmolt || 'general';\n\n const effectiveConfig = {\n enabled: true as const,\n apiKey,\n baseUrl,\n defaultSubmolt,\n ...configMoltbook,\n // Ensure env-resolved values win when config didn't set them\n ...(configMoltbook?.apiKey ? {} : { apiKey }),\n ...(configMoltbook?.baseUrl ? {} : { baseUrl }),\n };\n\n logger.info(`Moltbook: API key detected from ${source}`);\n logger.info(`Moltbook: Connecting to ${baseUrl} ...`);\n\n const adapter = new MoltbookAdapter(effectiveConfig);\n try {\n await adapter.connect();\n this.socialAdapters['moltbook'] = adapter;\n // Write back so the rest of the system sees the effective config\n social.moltbook = effectiveConfig;\n logger.info(`Moltbook: Connected successfully (submolt: ${defaultSubmolt})`);\n } catch (error: any) {\n logger.error(`Moltbook: Connection FAILED — ${error.message || error}`);\n this.logPlatformError('Moltbook', error);\n }\n }\n\n private async initTwitter(social: typeof this.config.social): Promise<void> {\n const configTwitter = social.twitter;\n const envApiKey = process.env.TWITTER_API_KEY;\n const envApiSecret = process.env.TWITTER_API_SECRET;\n const envAccessToken = process.env.TWITTER_ACCESS_TOKEN;\n const envAccessSecret = process.env.TWITTER_ACCESS_SECRET;\n\n // Resolve credentials: config takes priority, then env\n const creds = (configTwitter as any)?.credentials;\n const apiKey = creds?.apiKey || envApiKey || '';\n const apiSecret = creds?.apiSecret || envApiSecret || '';\n const accessToken = creds?.accessToken || envAccessToken || '';\n const accessSecret = creds?.accessSecret || envAccessSecret || '';\n\n const hasKey = apiKey && apiKey !== 'your-twitter-api-key';\n const hasAllCreds = hasKey && apiSecret && accessToken && accessSecret;\n\n // A valid env key overrides enabled: false from the scaffold\n const explicitlyDisabled = configTwitter && configTwitter.enabled === false && !envApiKey;\n\n if (explicitlyDisabled) {\n logger.info('Twitter: Disabled in config and no TWITTER_API_KEY in env — skipping');\n return;\n }\n\n if (!hasKey) {\n if (configTwitter?.enabled || envApiKey) {\n logger.warn('Twitter: Credentials are missing or still placeholders.');\n logger.warn(' Fix: Set valid Twitter keys in your .env file.');\n }\n return;\n }\n\n if (!hasAllCreds) {\n logger.warn('Twitter: Some credentials are missing. Need: TWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_SECRET');\n return;\n }\n\n const source = creds?.apiKey ? 'config' : 'environment';\n logger.info(`Twitter: Credentials detected from ${source}`);\n logger.info('Twitter: Connecting...');\n\n const effectiveConfig = {\n enabled: true as const,\n ...configTwitter,\n credentials: { apiKey, apiSecret, accessToken, accessSecret },\n };\n\n const adapter = new TwitterAdapter(effectiveConfig as any);\n try {\n await adapter.connect();\n this.socialAdapters['twitter'] = adapter;\n social.twitter = effectiveConfig as any;\n logger.info('Twitter: Connected successfully');\n } catch (error: any) {\n logger.error(`Twitter: Connection FAILED — ${error.message || error}`);\n this.logPlatformError('Twitter', error);\n }\n }\n\n private async postStartupMessages(): Promise<void> {\n const adapters = Object.entries(this.socialAdapters);\n\n if (adapters.length === 0) {\n logger.info('Startup post: No connected social adapters — skipping');\n return;\n }\n\n // Generate a personality-driven startup post via the LLM\n let content: string;\n try {\n const prompt = `You are ${this.config.name}. You just came online.\\n` +\n `Your bio: ${this.config.personality.bio}\\n` +\n `Your personality traits: ${this.config.personality.traits.join(', ')}\\n` +\n (this.config.type ? `Your role: ${this.config.type}\\n` : '') +\n `\\nWrite a short, engaging first post announcing you're online. ` +\n `Stay in character — reflect your personality and bio. ` +\n `Do NOT use generic phrases like \"is now online and ready\". ` +\n `Write only the post content, nothing else.`;\n\n content = (await this.llm.generateText(prompt, {\n temperature: this.config.llm.temperature ?? 0.8,\n maxTokens: 280,\n })).trim();\n\n logger.info(`Startup post: LLM generated content (${content.length} chars)`);\n } catch (error: any) {\n // Fallback to a simple message if LLM fails\n logger.warn(`Startup post: LLM generation failed (${error.message}), using fallback`);\n content = `${this.config.name} is now online and ready.`;\n }\n\n for (const [platform, adapter] of adapters) {\n logger.info(`Startup post: Posting to ${platform}...`);\n try {\n const result = await adapter.post(content);\n logger.info(`Startup post: ${platform} SUCCESS — id=${result.id}${result.url ? ` url=${result.url}` : ''}`);\n } catch (error: any) {\n logger.error(`Startup post: ${platform} FAILED — ${error.message || error}`);\n this.logPlatformError(platform, error);\n }\n }\n }\n\n private initScheduledJobs(): void {\n // ── 1. Wire postFrequency from social platform configs ──\n this.wirePostFrequencyJobs();\n\n // ── 2. Wire scheduling tasks (from markdown ## Scheduling or code config) ──\n this.wireSchedulingTasks();\n }\n\n private wirePostFrequencyJobs(): void {\n const social = this.config.social;\n\n // Moltbook postFrequency\n if (social.moltbook?.enabled !== false && this.socialAdapters['moltbook']) {\n const freq = (social.moltbook as any)?.postFrequency;\n if (freq) {\n const intervalMs = parsePostFrequency(freq);\n if (intervalMs > 0) {\n this.scheduler.addJob({\n name: 'moltbook_scheduled_post',\n intervalMs,\n handler: async () => {\n await this.scheduledPost('moltbook');\n },\n });\n logger.info(`Scheduler: Moltbook posting every ${formatInterval(intervalMs)}`);\n }\n }\n }\n\n // Twitter postFrequency\n if (social.twitter?.enabled !== false && this.socialAdapters['twitter']) {\n const freq = (social.twitter as any)?.postFrequency;\n if (freq) {\n const intervalMs = parsePostFrequency(freq);\n if (intervalMs > 0) {\n this.scheduler.addJob({\n name: 'twitter_scheduled_post',\n intervalMs,\n handler: async () => {\n await this.scheduledPost('twitter');\n },\n });\n logger.info(`Scheduler: Twitter posting every ${formatInterval(intervalMs)}`);\n }\n }\n }\n }\n\n private wireSchedulingTasks(): void {\n const tasks = this.config.scheduling;\n if (!tasks || tasks.length === 0) return;\n\n for (const task of tasks) {\n this.scheduler.addJob({\n name: task.name,\n intervalMs: task.intervalMs,\n handler: async () => {\n await this.executeScheduledTask(task);\n },\n });\n logger.info(`Scheduler: \"${task.name}\" every ${formatInterval(task.intervalMs)}`);\n }\n }\n\n private async scheduledPost(platform: string): Promise<void> {\n const adapter = this.socialAdapters[platform];\n if (!adapter) return;\n\n try {\n // Ask the LLM to generate content for the post\n const prompt = `You are ${this.config.name}. Generate a short, engaging social media post for ${platform}. ` +\n `Your personality: ${this.config.personality.traits.join(', ')}. ` +\n `Bio: ${this.config.personality.bio}. ` +\n `Write only the post content, nothing else. Keep it concise and natural.`;\n\n const content = await this.llm.generateText(prompt, {\n temperature: this.config.llm.temperature ?? 0.8,\n maxTokens: 280,\n });\n\n const result = await adapter.post(content.trim());\n logger.info(`Scheduled post: ${platform} SUCCESS — id=${result.id}`);\n } catch (error: any) {\n logger.error(`Scheduled post: ${platform} FAILED — ${error.message || error}`);\n this.logPlatformError(platform, error);\n }\n }\n\n private async executeScheduledTask(task: { name: string; instructions: string }): Promise<void> {\n try {\n logger.info(`Scheduled task: Running \"${task.name}\"`);\n\n const prompt = `You are ${this.config.name}, an autonomous agent. Execute the following scheduled task.\\n\\n` +\n `Task: ${task.name}\\n` +\n `Instructions:\\n${task.instructions}\\n\\n` +\n `Available social platforms: ${Object.keys(this.socialAdapters).join(', ') || 'none'}\\n\\n` +\n `Decide what action to take. Respond with JSON:\\n` +\n `{ \"action\": \"<action_name>\", \"reasoning\": \"<why>\", \"parameters\": { ... } }`;\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 const result = await this.act(decision.action, decision.parameters);\n logger.info(`Scheduled task: \"${task.name}\" completed — action=${decision.action}, success=${result.success}`);\n } catch (error: any) {\n logger.error(`Scheduled task: \"${task.name}\" FAILED — ${error.message || error}`);\n }\n }\n\n private logPlatformError(platform: string, error: any): void {\n if (!error.response) {\n // Network-level error (DNS, timeout, connection refused)\n if (error.code === 'ENOTFOUND') {\n logger.error(` ${platform}: DNS lookup failed — check the base URL.`);\n } else if (error.code === 'ECONNREFUSED') {\n logger.error(` ${platform}: Connection refused — is the server running?`);\n } else if (error.code === 'ETIMEDOUT' || error.code === 'ECONNABORTED') {\n logger.error(` ${platform}: Request timed out.`);\n } else {\n logger.error(` ${platform}: Network error (${error.code || 'unknown'})`);\n }\n return;\n }\n\n const status = error.response.status;\n const data = error.response.data;\n logger.error(` ${platform}: HTTP ${status}`);\n\n // Log the API response body\n if (data) {\n if (data.error) logger.error(` ${platform}: API error: ${data.error}`);\n if (data.hint) logger.error(` ${platform}: API hint: ${data.hint}`);\n if (!data.error && !data.hint) logger.error(` ${platform}: Response: ${JSON.stringify(data)}`);\n }\n\n // Actionable hints for common HTTP status codes\n if (status === 401) {\n logger.error(` ${platform}: Your API key was rejected. Verify it is correct and the agent is claimed.`);\n } else if (status === 403) {\n logger.error(` ${platform}: Forbidden — your agent may not be claimed yet or lacks permissions.`);\n } else if (status === 429) {\n const retryMin = data?.retry_after_minutes;\n const retrySec = data?.retry_after_seconds;\n if (retryMin) {\n logger.error(` ${platform}: Rate limited — try again in ${retryMin} minute(s).`);\n } else if (retrySec) {\n logger.error(` ${platform}: Rate limited — try again in ${retrySec} second(s).`);\n } else {\n logger.error(` ${platform}: Rate limited — wait before retrying.`);\n }\n } else if (status === 404) {\n logger.error(` ${platform}: Endpoint not found — check the base URL.`);\n } else if (status >= 500) {\n logger.error(` ${platform}: Server error — the platform may be temporarily down.`);\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, ScheduledTask } 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 if (scheduling && scheduling.children.length > 0) {\n config.scheduling = this.parseScheduling(scheduling);\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 const enabled = fields['enabled'] === 'true';\n delete fields['enabled'];\n\n // Convert snake_case keys to camelCase so they match TypeScript interfaces\n const camelFields: Record<string, string> = {};\n for (const [key, value] of Object.entries(fields)) {\n camelFields[this.toCamelCase(key)] = value;\n }\n\n social[platform] = {\n enabled,\n ...camelFields,\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 parseScheduling(section: ParsedSection): ScheduledTask[] {\n const tasks: ScheduledTask[] = [];\n\n for (const child of section.children) {\n const title = child.title.trim();\n\n // Skip \"On Startup\" — startup is handled separately in Agent.init()\n if (/^on\\s+startup$/i.test(title)) continue;\n\n const intervalMs = this.parseIntervalFromTitle(title);\n if (intervalMs <= 0) continue;\n\n const instructions = child.content.trim();\n if (!instructions) continue;\n\n tasks.push({\n name: this.toSnakeCase(title),\n intervalMs,\n instructions,\n });\n }\n\n return tasks;\n }\n\n private parseIntervalFromTitle(title: string): number {\n const lower = title.toLowerCase();\n\n // \"Every 30 Minutes\", \"Every 5 Minutes\"\n const minMatch = lower.match(/every\\s+(\\d+)\\s+minutes?/);\n if (minMatch) return parseInt(minMatch[1], 10) * 60 * 1000;\n\n // \"Every Hour\"\n if (/every\\s+hour$/i.test(lower)) return 60 * 60 * 1000;\n\n // \"Every 2 Hours\", \"Every 6 Hours\"\n const hourMatch = lower.match(/every\\s+(\\d+)\\s+hours?/);\n if (hourMatch) return parseInt(hourMatch[1], 10) * 60 * 60 * 1000;\n\n // \"Every Day\" or \"Every Day at ...\"\n if (/every\\s+day/i.test(lower)) return 24 * 60 * 60 * 1000;\n\n // \"Every Week\"\n if (/every\\s+week/i.test(lower)) return 7 * 24 * 60 * 60 * 1000;\n\n return 0;\n }\n\n private toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, c) => c.toUpperCase());\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 defaultSubmolt?: string;\n postFrequency?: string; // 'hourly', 'daily', '30m', '2h', etc.\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?: string; // 'hourly', 'daily', '30m', '2h', etc.\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// ── Scheduling ──\n\nexport interface ScheduledTask {\n name: string;\n intervalMs: number;\n instructions: string; // What to do (natural language or action name)\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 scheduling?: ScheduledTask[];\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.get('/message', (_req: Request, res: Response) => {\n res.status(405).json({\n error: 'Method Not Allowed',\n message: 'Use POST /message to send a message to the agent.',\n expected_body: { message: 'string' },\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.get('/action', (_req: Request, res: Response) => {\n res.status(405).json({\n error: 'Method Not Allowed',\n message: 'Use POST /action to trigger an action.',\n expected_body: { action: 'string', parameters: '{}' },\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 ScheduledTask,\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://www.moltbook.com/api/v1',\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n }\n\n async connect(): Promise<void> {\n await this.client.get('/agents/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 submolt = this.config.defaultSubmolt || 'general';\n const title = extractTitle(content);\n\n const response = await this.client.post('/posts', {\n submolt,\n title,\n content,\n });\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}/comments`, { 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}/upvote`);\n }\n\n async follow(agentName: string): Promise<void> {\n await this.client.post(`/agents/${agentName}/follow`);\n }\n\n async getMentions(): Promise<Mention[]> {\n const response = await this.client.get('/feed', {\n params: { sort: 'new', limit: 20 },\n });\n return (response.data.posts || []).map((m: any) => ({\n id: m.id,\n authorId: m.author_id || m.author?.id || '',\n authorName: m.author_name || 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> = { sort: 'hot' };\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 || p.author?.id || '',\n authorName: p.author_name || p.author?.name || '',\n content: p.content,\n timestamp: new Date(p.created_at),\n platform: 'moltbook',\n likes: p.upvotes ?? p.likes_count,\n replies: p.comment_count ?? p.replies_count,\n reposts: p.reposts_count,\n mentions: p.mentions || [],\n url: p.url,\n }));\n }\n\n async getProfile(agentName: string): Promise<Profile> {\n const response = await this.client.get('/agents/profile', {\n params: { name: agentName },\n });\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\n/**\n * Extract a short title from the content.\n * Uses the first line or first sentence, truncated to ~80 characters.\n */\nfunction extractTitle(content: string): string {\n const firstLine = content.split('\\n')[0].trim();\n // Try to find a sentence boundary\n const sentenceEnd = firstLine.search(/[.!?]/);\n const raw = sentenceEnd > 0 && sentenceEnd <= 80\n ? firstLine.slice(0, sentenceEnd + 1)\n : firstLine;\n\n if (raw.length <= 80) return raw;\n // Truncate at last word boundary before 80 chars\n const truncated = raw.slice(0, 80).replace(/\\s+\\S*$/, '');\n return truncated + '...';\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\n/** Parse a postFrequency string into milliseconds. Supports: 'hourly', 'daily', '30m', '2h', etc. */\nfunction parsePostFrequency(freq: string): number {\n const lower = freq.toLowerCase().trim();\n\n // Named presets\n if (lower === 'realtime') return 5 * 60 * 1000; // 5 minutes\n if (lower === 'hourly') return 60 * 60 * 1000; // 1 hour\n if (lower === 'daily') return 24 * 60 * 60 * 1000; // 24 hours\n\n // Short-form: \"30m\", \"2h\", \"1d\"\n const match = lower.match(/^(\\d+)\\s*(m|min|mins|minutes?|h|hr|hrs|hours?|d|days?)$/);\n if (match) {\n const n = parseInt(match[1], 10);\n const unit = match[2][0]; // 'm', 'h', or 'd'\n if (unit === 'm') return n * 60 * 1000;\n if (unit === 'h') return n * 60 * 60 * 1000;\n if (unit === 'd') return n * 24 * 60 * 60 * 1000;\n }\n\n // Natural language: \"every 30 minutes\", \"every 2 hours\"\n const nlMin = lower.match(/every\\s+(\\d+)\\s+minutes?/);\n if (nlMin) return parseInt(nlMin[1], 10) * 60 * 1000;\n\n const nlHour = lower.match(/every\\s+(\\d+)\\s+hours?/);\n if (nlHour) return parseInt(nlHour[1], 10) * 60 * 60 * 1000;\n\n if (/every\\s+hour/.test(lower)) return 60 * 60 * 1000;\n if (/every\\s+day/.test(lower)) return 24 * 60 * 60 * 1000;\n\n return 0;\n}\n\n/** Format milliseconds into a human-readable string */\nfunction formatInterval(ms: number): string {\n if (ms < 60 * 1000) return `${Math.round(ms / 1000)}s`;\n if (ms < 60 * 60 * 1000) return `${Math.round(ms / 60000)}m`;\n if (ms < 24 * 60 * 60 * 1000) return `${Math.round(ms / 3600000)}h`;\n return `${Math.round(ms / 86400000)}d`;\n}\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 this.initScheduledJobs();\n\n if (this.hooks.onInit) {\n await this.hooks.onInit(this);\n }\n\n await this.postStartupMessages();\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.social;\n\n // ── Moltbook: detect from env, merge with config ──\n await this.initMoltbook(social);\n\n // ── Twitter: detect from env, merge with config ──\n await this.initTwitter(social);\n\n if (Object.keys(this.socialAdapters).length === 0) {\n logger.warn('Social: No adapters connected. Set MOLTBOOK_API_KEY or Twitter env vars in your .env to enable.');\n }\n }\n\n private async initMoltbook(social: typeof this.config.social): Promise<void> {\n // Resolve API key: config takes priority, then env\n const envKey = process.env.MOLTBOOK_API_KEY;\n const configMoltbook = social.moltbook;\n const apiKey = configMoltbook?.apiKey || envKey || '';\n const isPlaceholder = !apiKey || apiKey === 'your-moltbook-key-here';\n\n // Determine if moltbook should be active\n // A valid API key (from env or config) always wins over enabled: false in scaffold.\n // The scaffold sets enabled: false as a default — setting the key means the user wants it on.\n const explicitlyDisabled = configMoltbook && configMoltbook.enabled === false && !envKey;\n const shouldConnect = !isPlaceholder && !explicitlyDisabled;\n\n if (explicitlyDisabled) {\n logger.info('Moltbook: Disabled in config and no MOLTBOOK_API_KEY in env — skipping');\n return;\n }\n\n if (isPlaceholder) {\n if (configMoltbook?.enabled || envKey) {\n logger.warn('Moltbook: MOLTBOOK_API_KEY is missing or still a placeholder.');\n logger.warn(' Fix: Set a valid MOLTBOOK_API_KEY in your .env file.');\n }\n // No key at all and not configured — stay silent\n return;\n }\n\n if (!shouldConnect) return;\n\n // Build the effective config by merging env + config\n const source = configMoltbook?.apiKey ? 'config' : 'environment';\n const baseUrl = configMoltbook?.baseUrl || process.env.MOLTBOOK_BASE_URL || 'https://www.moltbook.com/api/v1';\n const defaultSubmolt = configMoltbook?.defaultSubmolt || 'general';\n\n const effectiveConfig = {\n enabled: true as const,\n apiKey,\n baseUrl,\n defaultSubmolt,\n ...configMoltbook,\n // Ensure env-resolved values win when config didn't set them\n ...(configMoltbook?.apiKey ? {} : { apiKey }),\n ...(configMoltbook?.baseUrl ? {} : { baseUrl }),\n };\n\n logger.info(`Moltbook: API key detected from ${source}`);\n logger.info(`Moltbook: Connecting to ${baseUrl} ...`);\n\n const adapter = new MoltbookAdapter(effectiveConfig);\n try {\n await adapter.connect();\n this.socialAdapters['moltbook'] = adapter;\n // Write back so the rest of the system sees the effective config\n social.moltbook = effectiveConfig;\n logger.info(`Moltbook: Connected successfully (submolt: ${defaultSubmolt})`);\n } catch (error: any) {\n logger.error(`Moltbook: Connection FAILED — ${error.message || error}`);\n this.logPlatformError('Moltbook', error);\n }\n }\n\n private async initTwitter(social: typeof this.config.social): Promise<void> {\n const configTwitter = social.twitter;\n const envApiKey = process.env.TWITTER_API_KEY;\n const envApiSecret = process.env.TWITTER_API_SECRET;\n const envAccessToken = process.env.TWITTER_ACCESS_TOKEN;\n const envAccessSecret = process.env.TWITTER_ACCESS_SECRET;\n\n // Resolve credentials: config takes priority, then env\n const creds = (configTwitter as any)?.credentials;\n const apiKey = creds?.apiKey || envApiKey || '';\n const apiSecret = creds?.apiSecret || envApiSecret || '';\n const accessToken = creds?.accessToken || envAccessToken || '';\n const accessSecret = creds?.accessSecret || envAccessSecret || '';\n\n const hasKey = apiKey && apiKey !== 'your-twitter-api-key';\n const hasAllCreds = hasKey && apiSecret && accessToken && accessSecret;\n\n // A valid env key overrides enabled: false from the scaffold\n const explicitlyDisabled = configTwitter && configTwitter.enabled === false && !envApiKey;\n\n if (explicitlyDisabled) {\n logger.info('Twitter: Disabled in config and no TWITTER_API_KEY in env — skipping');\n return;\n }\n\n if (!hasKey) {\n if (configTwitter?.enabled || envApiKey) {\n logger.warn('Twitter: Credentials are missing or still placeholders.');\n logger.warn(' Fix: Set valid Twitter keys in your .env file.');\n }\n return;\n }\n\n if (!hasAllCreds) {\n logger.warn('Twitter: Some credentials are missing. Need: TWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_SECRET');\n return;\n }\n\n const source = creds?.apiKey ? 'config' : 'environment';\n logger.info(`Twitter: Credentials detected from ${source}`);\n logger.info('Twitter: Connecting...');\n\n const effectiveConfig = {\n enabled: true as const,\n ...configTwitter,\n credentials: { apiKey, apiSecret, accessToken, accessSecret },\n };\n\n const adapter = new TwitterAdapter(effectiveConfig as any);\n try {\n await adapter.connect();\n this.socialAdapters['twitter'] = adapter;\n social.twitter = effectiveConfig as any;\n logger.info('Twitter: Connected successfully');\n } catch (error: any) {\n logger.error(`Twitter: Connection FAILED — ${error.message || error}`);\n this.logPlatformError('Twitter', error);\n }\n }\n\n private async postStartupMessages(): Promise<void> {\n const adapters = Object.entries(this.socialAdapters);\n\n if (adapters.length === 0) {\n logger.info('Startup post: No connected social adapters — skipping');\n return;\n }\n\n // Generate a personality-driven startup post via the LLM.\n // The system prompt contains the full personality context (bio.md, traits.md, etc.)\n let content: string;\n try {\n const prompt = `You just came online. Write a short, engaging first post for social media.\\n` +\n `Stay fully in character — your personality, background, and role are defined in the system prompt.\\n` +\n `Do NOT use generic phrases like \"is now online and ready\" or \"Hello, world!\".\\n` +\n `Do NOT describe yourself in third person. Do NOT use emojis unless your personality calls for it.\\n` +\n `Write only the post content, nothing else. Keep it concise and natural.`;\n\n content = (await this.llm.generateText(prompt, {\n systemPrompt: this.systemPrompt,\n temperature: this.config.llm.temperature ?? 0.8,\n maxTokens: 280,\n })).trim();\n\n logger.info(`Startup post: LLM generated content (${content.length} chars)`);\n } catch (error: any) {\n // Fallback to a simple message if LLM fails\n logger.warn(`Startup post: LLM generation failed (${error.message}), using fallback`);\n content = `${this.config.name} is now online and ready.`;\n }\n\n for (const [platform, adapter] of adapters) {\n logger.info(`Startup post: Posting to ${platform}...`);\n try {\n const result = await adapter.post(content);\n logger.info(`Startup post: ${platform} SUCCESS — id=${result.id}${result.url ? ` url=${result.url}` : ''}`);\n } catch (error: any) {\n logger.error(`Startup post: ${platform} FAILED — ${error.message || error}`);\n this.logPlatformError(platform, error);\n }\n }\n }\n\n private initScheduledJobs(): void {\n // ── 1. Wire postFrequency from social platform configs ──\n this.wirePostFrequencyJobs();\n\n // ── 2. Wire scheduling tasks (from markdown ## Scheduling or code config) ──\n this.wireSchedulingTasks();\n }\n\n private wirePostFrequencyJobs(): void {\n const social = this.config.social;\n\n // Moltbook postFrequency\n if (social.moltbook?.enabled !== false && this.socialAdapters['moltbook']) {\n const freq = (social.moltbook as any)?.postFrequency;\n if (freq) {\n const intervalMs = parsePostFrequency(freq);\n if (intervalMs > 0) {\n this.scheduler.addJob({\n name: 'moltbook_scheduled_post',\n intervalMs,\n handler: async () => {\n await this.scheduledPost('moltbook');\n },\n });\n logger.info(`Scheduler: Moltbook posting every ${formatInterval(intervalMs)}`);\n }\n }\n }\n\n // Twitter postFrequency\n if (social.twitter?.enabled !== false && this.socialAdapters['twitter']) {\n const freq = (social.twitter as any)?.postFrequency;\n if (freq) {\n const intervalMs = parsePostFrequency(freq);\n if (intervalMs > 0) {\n this.scheduler.addJob({\n name: 'twitter_scheduled_post',\n intervalMs,\n handler: async () => {\n await this.scheduledPost('twitter');\n },\n });\n logger.info(`Scheduler: Twitter posting every ${formatInterval(intervalMs)}`);\n }\n }\n }\n }\n\n private wireSchedulingTasks(): void {\n const tasks = this.config.scheduling;\n if (!tasks || tasks.length === 0) return;\n\n for (const task of tasks) {\n this.scheduler.addJob({\n name: task.name,\n intervalMs: task.intervalMs,\n handler: async () => {\n await this.executeScheduledTask(task);\n },\n });\n logger.info(`Scheduler: \"${task.name}\" every ${formatInterval(task.intervalMs)}`);\n }\n }\n\n private async scheduledPost(platform: string): Promise<void> {\n const adapter = this.socialAdapters[platform];\n if (!adapter) return;\n\n try {\n // Ask the LLM to generate content — system prompt has full personality context\n const prompt = `Generate a short, engaging social media post for ${platform}.\\n` +\n `Stay fully in character based on your personality in the system prompt.\\n` +\n `Write only the post content, nothing else. Keep it concise and natural.`;\n\n const content = await this.llm.generateText(prompt, {\n systemPrompt: this.systemPrompt,\n temperature: this.config.llm.temperature ?? 0.8,\n maxTokens: 280,\n });\n\n const result = await adapter.post(content.trim());\n logger.info(`Scheduled post: ${platform} SUCCESS — id=${result.id}`);\n } catch (error: any) {\n logger.error(`Scheduled post: ${platform} FAILED — ${error.message || error}`);\n this.logPlatformError(platform, error);\n }\n }\n\n private async executeScheduledTask(task: { name: string; instructions: string }): Promise<void> {\n try {\n logger.info(`Scheduled task: Running \"${task.name}\"`);\n\n const prompt = `You are ${this.config.name}, an autonomous agent. Execute the following scheduled task.\\n\\n` +\n `Task: ${task.name}\\n` +\n `Instructions:\\n${task.instructions}\\n\\n` +\n `Available social platforms: ${Object.keys(this.socialAdapters).join(', ') || 'none'}\\n\\n` +\n `Decide what action to take. Respond with JSON:\\n` +\n `{ \"action\": \"<action_name>\", \"reasoning\": \"<why>\", \"parameters\": { ... } }`;\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 const result = await this.act(decision.action, decision.parameters);\n logger.info(`Scheduled task: \"${task.name}\" completed — action=${decision.action}, success=${result.success}`);\n } catch (error: any) {\n logger.error(`Scheduled task: \"${task.name}\" FAILED — ${error.message || error}`);\n }\n }\n\n private logPlatformError(platform: string, error: any): void {\n if (!error.response) {\n // Network-level error (DNS, timeout, connection refused)\n if (error.code === 'ENOTFOUND') {\n logger.error(` ${platform}: DNS lookup failed — check the base URL.`);\n } else if (error.code === 'ECONNREFUSED') {\n logger.error(` ${platform}: Connection refused — is the server running?`);\n } else if (error.code === 'ETIMEDOUT' || error.code === 'ECONNABORTED') {\n logger.error(` ${platform}: Request timed out.`);\n } else {\n logger.error(` ${platform}: Network error (${error.code || 'unknown'})`);\n }\n return;\n }\n\n const status = error.response.status;\n const data = error.response.data;\n logger.error(` ${platform}: HTTP ${status}`);\n\n // Log the API response body\n if (data) {\n if (data.error) logger.error(` ${platform}: API error: ${data.error}`);\n if (data.hint) logger.error(` ${platform}: API hint: ${data.hint}`);\n if (!data.error && !data.hint) logger.error(` ${platform}: Response: ${JSON.stringify(data)}`);\n }\n\n // Actionable hints for common HTTP status codes\n if (status === 401) {\n logger.error(` ${platform}: Your API key was rejected. Verify it is correct and the agent is claimed.`);\n } else if (status === 403) {\n logger.error(` ${platform}: Forbidden — your agent may not be claimed yet or lacks permissions.`);\n } else if (status === 429) {\n const retryMin = data?.retry_after_minutes;\n const retrySec = data?.retry_after_seconds;\n if (retryMin) {\n logger.error(` ${platform}: Rate limited — try again in ${retryMin} minute(s).`);\n } else if (retrySec) {\n logger.error(` ${platform}: Rate limited — try again in ${retrySec} second(s).`);\n } else {\n logger.error(` ${platform}: Rate limited — wait before retrying.`);\n }\n } else if (status === 404) {\n logger.error(` ${platform}: Endpoint not found — check the base URL.`);\n } else if (status >= 500) {\n logger.error(` ${platform}: Server error — the platform may be temporarily down.`);\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, ScheduledTask } 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 if (scheduling && scheduling.children.length > 0) {\n config.scheduling = this.parseScheduling(scheduling);\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 const enabled = fields['enabled'] === 'true';\n delete fields['enabled'];\n\n // Convert snake_case keys to camelCase so they match TypeScript interfaces\n const camelFields: Record<string, string> = {};\n for (const [key, value] of Object.entries(fields)) {\n camelFields[this.toCamelCase(key)] = value;\n }\n\n social[platform] = {\n enabled,\n ...camelFields,\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 parseScheduling(section: ParsedSection): ScheduledTask[] {\n const tasks: ScheduledTask[] = [];\n\n for (const child of section.children) {\n const title = child.title.trim();\n\n // Skip \"On Startup\" — startup is handled separately in Agent.init()\n if (/^on\\s+startup$/i.test(title)) continue;\n\n const intervalMs = this.parseIntervalFromTitle(title);\n if (intervalMs <= 0) continue;\n\n const instructions = child.content.trim();\n if (!instructions) continue;\n\n tasks.push({\n name: this.toSnakeCase(title),\n intervalMs,\n instructions,\n });\n }\n\n return tasks;\n }\n\n private parseIntervalFromTitle(title: string): number {\n const lower = title.toLowerCase();\n\n // \"Every 30 Minutes\", \"Every 5 Minutes\"\n const minMatch = lower.match(/every\\s+(\\d+)\\s+minutes?/);\n if (minMatch) return parseInt(minMatch[1], 10) * 60 * 1000;\n\n // \"Every Hour\"\n if (/every\\s+hour$/i.test(lower)) return 60 * 60 * 1000;\n\n // \"Every 2 Hours\", \"Every 6 Hours\"\n const hourMatch = lower.match(/every\\s+(\\d+)\\s+hours?/);\n if (hourMatch) return parseInt(hourMatch[1], 10) * 60 * 60 * 1000;\n\n // \"Every Day\" or \"Every Day at ...\"\n if (/every\\s+day/i.test(lower)) return 24 * 60 * 60 * 1000;\n\n // \"Every Week\"\n if (/every\\s+week/i.test(lower)) return 7 * 24 * 60 * 60 * 1000;\n\n return 0;\n }\n\n private toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, c) => c.toUpperCase());\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 defaultSubmolt?: string;\n postFrequency?: string; // 'hourly', 'daily', '30m', '2h', etc.\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?: string; // 'hourly', 'daily', '30m', '2h', etc.\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// ── Scheduling ──\n\nexport interface ScheduledTask {\n name: string;\n intervalMs: number;\n instructions: string; // What to do (natural language or action name)\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 scheduling?: ScheduledTask[];\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.get('/message', (_req: Request, res: Response) => {\n res.status(405).json({\n error: 'Method Not Allowed',\n message: 'Use POST /message to send a message to the agent.',\n expected_body: { message: 'string' },\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.get('/action', (_req: Request, res: Response) => {\n res.status(405).json({\n error: 'Method Not Allowed',\n message: 'Use POST /action to trigger an action.',\n expected_body: { action: 'string', parameters: '{}' },\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"]}