@lupaflow/agent 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/runner.ts","../src/context.ts","../src/retry.ts","../src/config.ts","../src/agent.ts"],"sourcesContent":["export { Agent } from \"./agent\"\nexport { AgentRunner } from \"./runner\"\nexport type { AgentRunOptions, AgentRunResult, AgentStreamChunk } from \"./runner\"\nexport { ContextManager } from \"./context\"\nexport { withRetry } from \"./retry\"\nexport { buildSystemPrompt, validateAgentConfig } from \"./config\"\n","import type { Message, CompletionResponse, AgentConfig, MemoryEntry, ToolCall } from \"@lupaflow/types\"\nimport { providerRegistry } from \"@lupaflow/providers\"\nimport { ContextManager } from \"./context\"\nimport { MemoryStore } from \"@lupaflow/memory\"\nimport { withRetry } from \"./retry\"\nimport { buildSystemPrompt } from \"./config\"\nimport { generateId } from \"@lupaflow/core\"\nimport { globalEventBus } from \"@lupaflow/core\"\nimport { ToolError } from \"@lupaflow/core\"\nimport {\n runBeforeAgentRunHooks,\n runAfterAgentRunHooks,\n runBeforeToolCallHooks,\n runAfterToolCallHooks,\n runBeforeProviderCallHooks,\n runAfterProviderCallHooks,\n} from \"@lupaflow/plugins\"\n\nexport interface AgentRunOptions {\n input: string\n sessionId?: string\n onThinking?: (message: string) => void\n onToolCall?: (tool: string, args: Record<string, unknown>) => void\n onToolResult?: (tool: string, result: unknown) => void\n}\n\nexport interface AgentRunResult {\n id: string\n output: string\n messages: Message[]\n usage: {\n totalTokens: number\n promptTokens: number\n completionTokens: number\n }\n latencyMs: number\n toolCalls: number\n finishReason: string\n}\n\nexport type AgentStreamChunk =\n | { type: \"text\"; text: string }\n | { type: \"tool_call\"; toolCall: ToolCall }\n | { type: \"tool_result\"; toolCall: ToolCall; result: unknown }\n | { type: \"error\"; error: string }\n | {\n type: \"finish\"\n output: string\n finishReason: string\n usage: { totalTokens: number; promptTokens: number; completionTokens: number }\n toolCalls: number\n latencyMs: number\n }\n\nexport class AgentRunner {\n private config: AgentConfig\n private context: ContextManager\n private memory?: MemoryStore\n private toolCallCount = 0\n private totalPromptTokens = 0\n private totalCompletionTokens = 0\n\n constructor(config: AgentConfig, memory?: MemoryStore) {\n this.config = config\n this.context = new ContextManager({\n maxMessages: config.maxContextMessages || 50,\n })\n this.memory = memory\n }\n\n async run(options: AgentRunOptions): Promise<AgentRunResult> {\n const runId = generateId()\n const startTime = Date.now()\n this.toolCallCount = 0\n this.totalPromptTokens = 0\n this.totalCompletionTokens = 0\n\n const provider = providerRegistry.get(this.config.provider, {\n model: this.config.model,\n temperature: this.config.temperature,\n maxTokens: this.config.maxTokens,\n topP: this.config.topP,\n })\n\n const systemPrompt = buildSystemPrompt(this.config)\n\n runBeforeAgentRunHooks({\n input: options.input,\n ...this.config,\n } as any)\n\n this.context.add({ role: \"system\", content: systemPrompt })\n this.context.add({ role: \"user\", content: options.input })\n\n await globalEventBus.emit(\"agent:start\", {\n agentId: this.config.id || this.config.name,\n runId,\n config: this.config as any,\n } as any)\n\n await globalEventBus.emit(\"agent:thinking\", {\n agentId: this.config.id || this.config.name,\n runId,\n message: options.input,\n } as any)\n\n let finalContent = \"\"\n let finishReason = \"stop\"\n let iterationCount = 0\n const maxIterations = 20\n\n while (iterationCount < maxIterations) {\n iterationCount++\n\n const request = runBeforeProviderCallHooks(this.config.provider, {\n model: this.config.model,\n messages: this.context.getMessages(),\n tools: this.config.tools,\n systemPrompt: undefined,\n temperature: this.config.temperature,\n maxTokens: this.config.maxTokens,\n topP: this.config.topP,\n } as any)\n\n const response: CompletionResponse = await withRetry(\n () =>\n provider.complete({\n messages: request.messages as Message[] || this.context.getMessages(),\n tools: this.config.tools,\n systemPrompt: undefined,\n temperature: this.config.temperature,\n maxTokens: this.config.maxTokens,\n topP: this.config.topP,\n model: this.config.model,\n }),\n {\n maxRetries: this.config.maxRetries ?? 3,\n baseDelay: this.config.retryDelay ?? 1000,\n },\n this.config.name\n )\n\n runAfterProviderCallHooks(response as any)\n\n this.totalPromptTokens += response.usage.promptTokens\n this.totalCompletionTokens += response.usage.completionTokens\n\n if (response.toolCalls.length > 0) {\n this.context.add({\n role: \"assistant\",\n content: response.content || null,\n toolCalls: response.toolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\" as const,\n function: { name: tc.name, arguments: JSON.stringify(tc.args) },\n })),\n })\n } else if (response.content) {\n this.context.add({ role: \"assistant\", content: response.content })\n }\n\n if (response.toolCalls.length === 0) {\n finalContent = response.content || \"\"\n finishReason = response.finishReason\n break\n }\n\n for (const tc of response.toolCalls) {\n this.toolCallCount++\n await globalEventBus.emit(\"tool:start\", {\n agentId: this.config.id || this.config.name,\n runId,\n tool: tc.name,\n args: tc.args,\n } as any)\n\n options.onToolCall?.(tc.name, tc.args)\n\n try {\n const tool = this.config.tools?.find((t) => t.definition.name === tc.name)\n if (!tool) throw new ToolError(tc.name, `Tool \"${tc.name}\" not found on agent`)\n\n const hookArgs = runBeforeToolCallHooks(tc.name, tc.args as Record<string, unknown>)\n const result = await tool.execute(hookArgs)\n const hookResult = runAfterToolCallHooks(result)\n const resultStr = typeof hookResult === \"string\" ? hookResult : JSON.stringify(hookResult, null, 2)\n\n this.context.add({\n role: \"tool\",\n toolCallId: tc.id,\n name: tc.name,\n content: resultStr,\n })\n\n await globalEventBus.emit(\"tool:finish\", {\n agentId: this.config.id || this.config.name,\n runId,\n tool: tc.name,\n result: hookResult,\n durationMs: Date.now() - startTime,\n } as any)\n\n options.onToolResult?.(tc.name, hookResult)\n } catch (err: any) {\n this.context.add({\n role: \"tool\",\n toolCallId: tc.id,\n name: tc.name,\n content: `Error: ${err.message}`,\n })\n\n await globalEventBus.emit(\"tool:error\", {\n agentId: this.config.id || this.config.name,\n runId,\n tool: tc.name,\n error: err.message,\n } as any)\n }\n }\n }\n\n const totalLatency = Date.now() - startTime\n\n if (this.memory) {\n await this.memory.store({\n id: generateId(),\n type: \"short-term\",\n key: `agent:${this.config.name}:input:${generateId()}`,\n content: options.input,\n metadata: { runId, agentName: this.config.name },\n timestamp: Date.now(),\n } as MemoryEntry)\n\n if (finalContent) {\n await this.memory.store({\n id: generateId(),\n type: \"short-term\",\n key: `agent:${this.config.name}:output:${generateId()}`,\n content: finalContent,\n metadata: { runId, agentName: this.config.name },\n timestamp: Date.now(),\n } as MemoryEntry)\n }\n }\n\n await globalEventBus.emit(\"agent:response\", {\n agentId: this.config.id || this.config.name,\n runId,\n content: finalContent,\n tokens: this.totalCompletionTokens,\n latencyMs: totalLatency,\n } as any)\n\n runAfterAgentRunHooks({\n id: runId,\n output: finalContent,\n messages: this.context.getMessages(),\n usage: {\n totalTokens: this.totalPromptTokens + this.totalCompletionTokens,\n promptTokens: this.totalPromptTokens,\n completionTokens: this.totalCompletionTokens,\n },\n latencyMs: totalLatency,\n toolCalls: this.toolCallCount,\n finishReason,\n })\n\n await globalEventBus.emit(\"agent:complete\", {\n agentId: this.config.id || this.config.name,\n runId,\n totalTokens: this.totalPromptTokens + this.totalCompletionTokens,\n totalLatencyMs: totalLatency,\n toolCalls: this.toolCallCount,\n } as any)\n\n return {\n id: runId,\n output: finalContent,\n messages: this.context.getMessages(),\n usage: {\n totalTokens: this.totalPromptTokens + this.totalCompletionTokens,\n promptTokens: this.totalPromptTokens,\n completionTokens: this.totalCompletionTokens,\n },\n latencyMs: totalLatency,\n toolCalls: this.toolCallCount,\n finishReason,\n }\n }\n\n async *streamRun(options: AgentRunOptions): AsyncIterableIterator<AgentStreamChunk> {\n const runId = generateId()\n const startTime = Date.now()\n this.toolCallCount = 0\n this.totalPromptTokens = 0\n this.totalCompletionTokens = 0\n\n const provider = providerRegistry.get(this.config.provider, {\n model: this.config.model,\n temperature: this.config.temperature,\n maxTokens: this.config.maxTokens,\n topP: this.config.topP,\n })\n\n const systemPrompt = buildSystemPrompt(this.config)\n\n runBeforeAgentRunHooks({\n input: options.input,\n ...this.config,\n } as any)\n\n this.context.add({ role: \"system\", content: systemPrompt })\n this.context.add({ role: \"user\", content: options.input })\n\n await globalEventBus.emit(\"agent:start\", {\n agentId: this.config.id || this.config.name,\n runId,\n config: this.config as any,\n } as any)\n\n await globalEventBus.emit(\"agent:thinking\", {\n agentId: this.config.id || this.config.name,\n runId,\n message: options.input,\n } as any)\n\n let finalContent = \"\"\n let finishReason = \"stop\"\n let iterationCount = 0\n const maxIterations = 20\n\n while (iterationCount < maxIterations) {\n iterationCount++\n\n const request = runBeforeProviderCallHooks(this.config.provider, {\n model: this.config.model,\n messages: this.context.getMessages(),\n tools: this.config.tools,\n systemPrompt: undefined,\n temperature: this.config.temperature,\n maxTokens: this.config.maxTokens,\n topP: this.config.topP,\n } as any)\n\n const messages = (request.messages as Message[]) || this.context.getMessages()\n\n // stream from the provider\n const stream = provider.streamComplete({\n messages,\n tools: this.config.tools,\n systemPrompt: undefined,\n temperature: this.config.temperature,\n maxTokens: this.config.maxTokens,\n topP: this.config.topP,\n model: this.config.model,\n })\n\n let roundContent = \"\"\n let roundToolCalls: ToolCall[] = []\n\n for await (const chunk of stream) {\n if (chunk.type === \"text\") {\n roundContent += chunk.text\n yield { type: \"text\", text: chunk.text }\n } else if (chunk.type === \"tool_call\") {\n roundToolCalls.push(chunk.toolCall)\n } else if (chunk.type === \"finish\") {\n roundContent = chunk.content\n roundToolCalls = chunk.toolCalls\n this.totalPromptTokens += chunk.usage.promptTokens\n this.totalCompletionTokens += chunk.usage.completionTokens\n finishReason = chunk.finishReason\n }\n }\n\n runAfterProviderCallHooks({\n content: roundContent,\n toolCalls: roundToolCalls,\n } as any)\n\n // add assistant message to context\n if (roundToolCalls.length > 0) {\n this.context.add({\n role: \"assistant\",\n content: roundContent || null,\n toolCalls: roundToolCalls.map((tc) => ({\n id: tc.id,\n type: \"function\" as const,\n function: { name: tc.name, arguments: JSON.stringify(tc.args) },\n })),\n })\n } else if (roundContent) {\n this.context.add({ role: \"assistant\", content: roundContent })\n }\n\n if (roundToolCalls.length === 0) {\n finalContent = roundContent\n finishReason = finishReason || \"stop\"\n break\n }\n\n // execute tool calls\n for (const tc of roundToolCalls) {\n this.toolCallCount++\n await globalEventBus.emit(\"tool:start\", {\n agentId: this.config.id || this.config.name,\n runId,\n tool: tc.name,\n args: tc.args,\n } as any)\n\n options.onToolCall?.(tc.name, tc.args)\n yield { type: \"tool_call\", toolCall: tc }\n\n try {\n const tool = this.config.tools?.find((t) => t.definition.name === tc.name)\n if (!tool) throw new ToolError(tc.name, `Tool \"${tc.name}\" not found on agent`)\n\n const hookArgs = runBeforeToolCallHooks(tc.name, tc.args as Record<string, unknown>)\n const result = await tool.execute(hookArgs)\n const hookResult = runAfterToolCallHooks(result)\n const resultStr = typeof hookResult === \"string\" ? hookResult : JSON.stringify(hookResult, null, 2)\n\n this.context.add({\n role: \"tool\",\n toolCallId: tc.id,\n name: tc.name,\n content: resultStr,\n })\n\n await globalEventBus.emit(\"tool:finish\", {\n agentId: this.config.id || this.config.name,\n runId,\n tool: tc.name,\n result: hookResult,\n durationMs: Date.now() - startTime,\n } as any)\n\n options.onToolResult?.(tc.name, hookResult)\n yield { type: \"tool_result\", toolCall: tc, result: hookResult }\n } catch (err: any) {\n this.context.add({\n role: \"tool\",\n toolCallId: tc.id,\n name: tc.name,\n content: `Error: ${err.message}`,\n })\n\n await globalEventBus.emit(\"tool:error\", {\n agentId: this.config.id || this.config.name,\n runId,\n tool: tc.name,\n error: err.message,\n } as any)\n\n yield { type: \"error\", error: err.message }\n }\n }\n }\n\n const totalLatency = Date.now() - startTime\n\n if (this.memory) {\n await this.memory.store({\n id: generateId(),\n type: \"short-term\",\n key: `agent:${this.config.name}:input:${generateId()}`,\n content: options.input,\n metadata: { runId, agentName: this.config.name },\n timestamp: Date.now(),\n } as MemoryEntry)\n\n if (finalContent) {\n await this.memory.store({\n id: generateId(),\n type: \"short-term\",\n key: `agent:${this.config.name}:output:${generateId()}`,\n content: finalContent,\n metadata: { runId, agentName: this.config.name },\n timestamp: Date.now(),\n } as MemoryEntry)\n }\n }\n\n await globalEventBus.emit(\"agent:response\", {\n agentId: this.config.id || this.config.name,\n runId,\n content: finalContent,\n tokens: this.totalCompletionTokens,\n latencyMs: totalLatency,\n } as any)\n\n runAfterAgentRunHooks({\n id: runId,\n output: finalContent,\n messages: this.context.getMessages(),\n usage: {\n totalTokens: this.totalPromptTokens + this.totalCompletionTokens,\n promptTokens: this.totalPromptTokens,\n completionTokens: this.totalCompletionTokens,\n },\n latencyMs: totalLatency,\n toolCalls: this.toolCallCount,\n finishReason,\n })\n\n await globalEventBus.emit(\"agent:complete\", {\n agentId: this.config.id || this.config.name,\n runId,\n totalTokens: this.totalPromptTokens + this.totalCompletionTokens,\n totalLatencyMs: totalLatency,\n toolCalls: this.toolCallCount,\n } as any)\n\n yield {\n type: \"finish\",\n output: finalContent,\n finishReason,\n usage: {\n totalTokens: this.totalPromptTokens + this.totalCompletionTokens,\n promptTokens: this.totalPromptTokens,\n completionTokens: this.totalCompletionTokens,\n },\n toolCalls: this.toolCallCount,\n latencyMs: totalLatency,\n }\n }\n}\n","import type { Message } from \"@lupaflow/types\"\nimport { estimateTokens } from \"@lupaflow/core\"\n\nexport interface ContextConfig {\n maxMessages?: number\n maxTokens?: number\n preserveSystem?: boolean\n}\n\nexport class ContextManager {\n private messages: Message[] = []\n private config: ContextConfig\n\n constructor(config: ContextConfig = {}) {\n this.config = {\n maxMessages: config.maxMessages || 50,\n maxTokens: config.maxTokens || 4000,\n preserveSystem: config.preserveSystem ?? true,\n }\n }\n\n add(message: Message): void {\n this.messages.push(message)\n this.trim()\n }\n\n getMessages(): Message[] {\n return [...this.messages]\n }\n\n getTotalTokens(): number {\n return this.messages.reduce((sum, m) => sum + estimateTokens(m.content || \"\"), 0)\n }\n\n trim(): void {\n if (this.messages.length <= this.config.maxMessages! && this.getTotalTokens() <= this.config.maxTokens!) {\n return\n }\n\n while (\n this.messages.length > 2 &&\n (this.messages.length > this.config.maxMessages! || this.getTotalTokens() > this.config.maxTokens!)\n ) {\n const startIdx = this.config.preserveSystem && this.messages[0]?.role === \"system\" ? 1 : 0\n if (startIdx < this.messages.length) {\n this.messages.splice(startIdx, 1)\n } else {\n break\n }\n }\n }\n\n clear(): void {\n const systemMsg = this.config.preserveSystem\n ? this.messages.find((m) => m.role === \"system\")\n : undefined\n this.messages = systemMsg ? [systemMsg] : []\n }\n\n toJSON(): Message[] {\n return this.getMessages()\n }\n}\n","import { delay } from \"@lupaflow/core\"\nimport { RetryError } from \"@lupaflow/core\"\nimport { globalEventBus } from \"@lupaflow/core\"\n\nexport interface RetryConfig {\n maxRetries: number\n baseDelay: number\n maxDelay: number\n backoffFactor: number\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config: Partial<RetryConfig> = {},\n context?: string\n): Promise<T> {\n const cfg: RetryConfig = {\n maxRetries: config.maxRetries ?? 3,\n baseDelay: config.baseDelay ?? 1000,\n maxDelay: config.maxDelay ?? 30000,\n backoffFactor: config.backoffFactor ?? 2,\n }\n\n let lastError: Error | null = null\n\n for (let attempt = 0; attempt <= cfg.maxRetries; attempt++) {\n try {\n return await fn()\n } catch (err: any) {\n lastError = err\n if (attempt < cfg.maxRetries) {\n const waitTime = Math.min(cfg.baseDelay * Math.pow(cfg.backoffFactor, attempt), cfg.maxDelay)\n await globalEventBus.emit(\"agent:error\", {\n error: err.message,\n retryAttempt: attempt + 1,\n } as any)\n await delay(waitTime)\n }\n }\n }\n\n throw new RetryError(\n `${context ? `[${context}] ` : \"\"}Failed after ${cfg.maxRetries + 1} attempts`,\n cfg.maxRetries + 1,\n lastError!\n )\n}\n","import type { AgentConfig } from \"@lupaflow/types\"\nimport { ConfigError } from \"@lupaflow/core\"\n\nexport function validateAgentConfig(config: AgentConfig): void {\n if (!config.name) throw new ConfigError(\"Agent name is required\")\n if (!config.provider) throw new ConfigError(\"Provider is required for agent\")\n\n if (config.temperature !== undefined && (config.temperature < 0 || config.temperature > 2)) {\n throw new ConfigError(\"Temperature must be between 0 and 2\")\n }\n\n if (config.maxRetries !== undefined && config.maxRetries < 0) {\n throw new ConfigError(\"maxRetries must be >= 0\")\n }\n}\n\nexport function buildSystemPrompt(config: AgentConfig): string {\n const parts: string[] = []\n\n parts.push(config.systemPrompt || `You are ${config.name}, an AI assistant.`)\n\n if (config.personality) {\n const p = config.personality\n parts.push(\"\")\n parts.push(\"--- Personality ---\")\n if (p.name) parts.push(`Name: ${p.name}`)\n if (p.tone) parts.push(`Tone: ${p.tone}`)\n if (p.style) parts.push(`Style: ${p.style}`)\n if (p.traits?.length) parts.push(`Traits: ${p.traits.join(\", \")}`)\n }\n\n if (config.goals?.length) {\n parts.push(\"\")\n parts.push(\"--- Goals ---\")\n config.goals.forEach((g, i) => parts.push(`${i + 1}. ${g.description}`))\n }\n\n if (config.constraints?.length) {\n parts.push(\"\")\n parts.push(\"--- Constraints ---\")\n config.constraints.forEach((c) => parts.push(`- ${c.description}`))\n }\n\n if (config.tools?.length) {\n parts.push(\"\")\n parts.push(`You have access to these tools: ${config.tools.map((t) => t.definition.name).join(\", \")}`)\n parts.push(\"Use them when appropriate to fulfill the user's request.\")\n }\n\n return parts.join(\"\\n\")\n}\n","import type { AgentConfig, Tool, Personality, Goal, Constraint } from \"@lupaflow/types\"\nimport { MemoryStore } from \"@lupaflow/memory\"\nimport { AgentRunner, AgentRunOptions, AgentRunResult, AgentStreamChunk } from \"./runner\"\nimport { validateAgentConfig } from \"./config\"\nimport { generateId } from \"@lupaflow/core\"\nimport { toolRegistry } from \"@lupaflow/tools\"\n\nexport class Agent {\n public config: AgentConfig\n private memoryStore?: MemoryStore\n\n constructor(config: AgentConfig) {\n validateAgentConfig(config)\n this.config = {\n ...config,\n id: config.id || generateId(),\n }\n }\n\n tool(t: Tool): this {\n this.config.tools = this.config.tools || []\n this.config.tools.push(t)\n return this\n }\n\n useTool(name: string): this {\n try {\n const tool = toolRegistry.get(name)\n this.config.tools = this.config.tools || []\n this.config.tools.push(tool)\n } catch {\n throw new Error(`Tool \"${name}\" not found in registry`)\n }\n return this\n }\n\n memory(memory: MemoryStore): this {\n this.memoryStore = memory\n return this\n }\n\n personality(p: Personality): this {\n this.config.personality = p\n return this\n }\n\n goal(g: Goal): this {\n this.config.goals = this.config.goals || []\n this.config.goals.push(g)\n return this\n }\n\n constraint(c: Constraint): this {\n this.config.constraints = this.config.constraints || []\n this.config.constraints.push(c)\n return this\n }\n\n temperature(t: number): this {\n this.config.temperature = t\n return this\n }\n\n model(m: string): this {\n this.config.model = m\n return this\n }\n\n async run(input: string, options?: Partial<AgentRunOptions>): Promise<AgentRunResult> {\n const runner = new AgentRunner(this.config, this.memoryStore)\n return runner.run({\n input,\n ...options,\n })\n }\n\n async *streamRun(input: string, options?: Partial<AgentRunOptions>): AsyncIterableIterator<AgentStreamChunk> {\n const runner = new AgentRunner(this.config, this.memoryStore)\n yield* runner.streamRun({\n input,\n ...options,\n })\n }\n}\n"],"mappings":"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","names":["import_core","import_core","import_core","import_core"]}
@@ -0,0 +1,105 @@
1
+ import { Message, ToolCall, AgentConfig, Tool, Personality, Goal, Constraint } from '@lupaflow/types';
2
+ import { MemoryStore } from '@lupaflow/memory';
3
+
4
+ interface AgentRunOptions {
5
+ input: string;
6
+ sessionId?: string;
7
+ onThinking?: (message: string) => void;
8
+ onToolCall?: (tool: string, args: Record<string, unknown>) => void;
9
+ onToolResult?: (tool: string, result: unknown) => void;
10
+ }
11
+ interface AgentRunResult {
12
+ id: string;
13
+ output: string;
14
+ messages: Message[];
15
+ usage: {
16
+ totalTokens: number;
17
+ promptTokens: number;
18
+ completionTokens: number;
19
+ };
20
+ latencyMs: number;
21
+ toolCalls: number;
22
+ finishReason: string;
23
+ }
24
+ type AgentStreamChunk = {
25
+ type: "text";
26
+ text: string;
27
+ } | {
28
+ type: "tool_call";
29
+ toolCall: ToolCall;
30
+ } | {
31
+ type: "tool_result";
32
+ toolCall: ToolCall;
33
+ result: unknown;
34
+ } | {
35
+ type: "error";
36
+ error: string;
37
+ } | {
38
+ type: "finish";
39
+ output: string;
40
+ finishReason: string;
41
+ usage: {
42
+ totalTokens: number;
43
+ promptTokens: number;
44
+ completionTokens: number;
45
+ };
46
+ toolCalls: number;
47
+ latencyMs: number;
48
+ };
49
+ declare class AgentRunner {
50
+ private config;
51
+ private context;
52
+ private memory?;
53
+ private toolCallCount;
54
+ private totalPromptTokens;
55
+ private totalCompletionTokens;
56
+ constructor(config: AgentConfig, memory?: MemoryStore);
57
+ run(options: AgentRunOptions): Promise<AgentRunResult>;
58
+ streamRun(options: AgentRunOptions): AsyncIterableIterator<AgentStreamChunk>;
59
+ }
60
+
61
+ declare class Agent {
62
+ config: AgentConfig;
63
+ private memoryStore?;
64
+ constructor(config: AgentConfig);
65
+ tool(t: Tool): this;
66
+ useTool(name: string): this;
67
+ memory(memory: MemoryStore): this;
68
+ personality(p: Personality): this;
69
+ goal(g: Goal): this;
70
+ constraint(c: Constraint): this;
71
+ temperature(t: number): this;
72
+ model(m: string): this;
73
+ run(input: string, options?: Partial<AgentRunOptions>): Promise<AgentRunResult>;
74
+ streamRun(input: string, options?: Partial<AgentRunOptions>): AsyncIterableIterator<AgentStreamChunk>;
75
+ }
76
+
77
+ interface ContextConfig {
78
+ maxMessages?: number;
79
+ maxTokens?: number;
80
+ preserveSystem?: boolean;
81
+ }
82
+ declare class ContextManager {
83
+ private messages;
84
+ private config;
85
+ constructor(config?: ContextConfig);
86
+ add(message: Message): void;
87
+ getMessages(): Message[];
88
+ getTotalTokens(): number;
89
+ trim(): void;
90
+ clear(): void;
91
+ toJSON(): Message[];
92
+ }
93
+
94
+ interface RetryConfig {
95
+ maxRetries: number;
96
+ baseDelay: number;
97
+ maxDelay: number;
98
+ backoffFactor: number;
99
+ }
100
+ declare function withRetry<T>(fn: () => Promise<T>, config?: Partial<RetryConfig>, context?: string): Promise<T>;
101
+
102
+ declare function validateAgentConfig(config: AgentConfig): void;
103
+ declare function buildSystemPrompt(config: AgentConfig): string;
104
+
105
+ export { Agent, type AgentRunOptions, type AgentRunResult, AgentRunner, type AgentStreamChunk, ContextManager, buildSystemPrompt, validateAgentConfig, withRetry };
@@ -0,0 +1,105 @@
1
+ import { Message, ToolCall, AgentConfig, Tool, Personality, Goal, Constraint } from '@lupaflow/types';
2
+ import { MemoryStore } from '@lupaflow/memory';
3
+
4
+ interface AgentRunOptions {
5
+ input: string;
6
+ sessionId?: string;
7
+ onThinking?: (message: string) => void;
8
+ onToolCall?: (tool: string, args: Record<string, unknown>) => void;
9
+ onToolResult?: (tool: string, result: unknown) => void;
10
+ }
11
+ interface AgentRunResult {
12
+ id: string;
13
+ output: string;
14
+ messages: Message[];
15
+ usage: {
16
+ totalTokens: number;
17
+ promptTokens: number;
18
+ completionTokens: number;
19
+ };
20
+ latencyMs: number;
21
+ toolCalls: number;
22
+ finishReason: string;
23
+ }
24
+ type AgentStreamChunk = {
25
+ type: "text";
26
+ text: string;
27
+ } | {
28
+ type: "tool_call";
29
+ toolCall: ToolCall;
30
+ } | {
31
+ type: "tool_result";
32
+ toolCall: ToolCall;
33
+ result: unknown;
34
+ } | {
35
+ type: "error";
36
+ error: string;
37
+ } | {
38
+ type: "finish";
39
+ output: string;
40
+ finishReason: string;
41
+ usage: {
42
+ totalTokens: number;
43
+ promptTokens: number;
44
+ completionTokens: number;
45
+ };
46
+ toolCalls: number;
47
+ latencyMs: number;
48
+ };
49
+ declare class AgentRunner {
50
+ private config;
51
+ private context;
52
+ private memory?;
53
+ private toolCallCount;
54
+ private totalPromptTokens;
55
+ private totalCompletionTokens;
56
+ constructor(config: AgentConfig, memory?: MemoryStore);
57
+ run(options: AgentRunOptions): Promise<AgentRunResult>;
58
+ streamRun(options: AgentRunOptions): AsyncIterableIterator<AgentStreamChunk>;
59
+ }
60
+
61
+ declare class Agent {
62
+ config: AgentConfig;
63
+ private memoryStore?;
64
+ constructor(config: AgentConfig);
65
+ tool(t: Tool): this;
66
+ useTool(name: string): this;
67
+ memory(memory: MemoryStore): this;
68
+ personality(p: Personality): this;
69
+ goal(g: Goal): this;
70
+ constraint(c: Constraint): this;
71
+ temperature(t: number): this;
72
+ model(m: string): this;
73
+ run(input: string, options?: Partial<AgentRunOptions>): Promise<AgentRunResult>;
74
+ streamRun(input: string, options?: Partial<AgentRunOptions>): AsyncIterableIterator<AgentStreamChunk>;
75
+ }
76
+
77
+ interface ContextConfig {
78
+ maxMessages?: number;
79
+ maxTokens?: number;
80
+ preserveSystem?: boolean;
81
+ }
82
+ declare class ContextManager {
83
+ private messages;
84
+ private config;
85
+ constructor(config?: ContextConfig);
86
+ add(message: Message): void;
87
+ getMessages(): Message[];
88
+ getTotalTokens(): number;
89
+ trim(): void;
90
+ clear(): void;
91
+ toJSON(): Message[];
92
+ }
93
+
94
+ interface RetryConfig {
95
+ maxRetries: number;
96
+ baseDelay: number;
97
+ maxDelay: number;
98
+ backoffFactor: number;
99
+ }
100
+ declare function withRetry<T>(fn: () => Promise<T>, config?: Partial<RetryConfig>, context?: string): Promise<T>;
101
+
102
+ declare function validateAgentConfig(config: AgentConfig): void;
103
+ declare function buildSystemPrompt(config: AgentConfig): string;
104
+
105
+ export { Agent, type AgentRunOptions, type AgentRunResult, AgentRunner, type AgentStreamChunk, ContextManager, buildSystemPrompt, validateAgentConfig, withRetry };