@providerprotocol/agents 0.0.3 → 0.0.5

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/execution/react.ts","../../src/execution/plan.ts","../../src/execution/tool-ordering.ts"],"names":["UserMessage"],"mappings":"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","file":"index.js","sourcesContent":["import type { Turn, StreamEvent } from '@providerprotocol/ai';\nimport { UserMessage } from '@providerprotocol/ai';\nimport type {\n ExecutionStrategy,\n ExecutionContext,\n ExecutionResult,\n ReactOptions,\n AgentStreamResult,\n AgentStreamEvent,\n} from './types.ts';\n\nconst DEFAULT_REACT_OPTIONS: Required<ReactOptions> = {\n maxSteps: Infinity,\n reasoningPrompt: 'Think step by step about what you need to do next. Consider the current state, what tools are available, and what action would be most helpful.',\n};\n\n/**\n * Create a ReAct (Reason-Act-Observe) execution strategy.\n *\n * Behavior:\n * 1. Reason: LLM outputs reasoning about what to do next\n * 2. Act: LLM selects and executes tool(s)\n * 3. Observe: Tool results are formatted as observations\n * 4. Repeat until stop condition, no more actions, or maxSteps\n *\n * @param options - ReAct configuration options\n * @returns ExecutionStrategy\n */\nexport function react(options: ReactOptions = {}): ExecutionStrategy {\n const opts = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n return {\n name: 'react',\n\n async execute(context: ExecutionContext): Promise<ExecutionResult> {\n const { llm, input, state, strategy, signal } = context;\n\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n while (true) {\n step++;\n currentState = currentState.withStep(step);\n\n if (signal?.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n // REASON PHASE: Ask LLM to think about what to do\n const reasoningMessages = [\n ...messages,\n new UserMessage(opts.reasoningPrompt),\n ];\n\n const reasoningTurn = await llm.generate(reasoningMessages);\n\n const reasoning = reasoningTurn.response.text;\n currentState = currentState.withReasoning(reasoning);\n strategy.onReason?.(step, reasoning);\n\n // Add reasoning to conversation\n messages.push(...reasoningTurn.messages);\n\n // ACT PHASE: Execute with tools\n const actionPrompt = new UserMessage(\n 'Based on your reasoning, take the appropriate action. Use tools if needed, or provide a final answer.',\n );\n messages.push(actionPrompt);\n\n const actionTurn = await llm.generate(messages);\n finalTurn = actionTurn;\n\n // Update messages with action response\n messages.push(...actionTurn.messages);\n currentState = currentState.withMessages(actionTurn.messages);\n\n // Handle tool calls\n if (actionTurn.response.hasToolCalls) {\n strategy.onAct?.(step, actionTurn.response.toolCalls ?? []);\n }\n\n // OBSERVE PHASE: Process tool results\n if (actionTurn.toolExecutions && actionTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, actionTurn.toolExecutions);\n }\n\n strategy.onStepEnd?.(step, { turn: actionTurn, state: currentState });\n\n // Check stop conditions\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n\n // No more tool calls means we're done\n if (!actionTurn.response.hasToolCalls) {\n break;\n }\n\n // Check step limit\n if (opts.maxSteps !== Infinity && step >= opts.maxSteps) {\n break;\n }\n }\n\n if (!finalTurn) {\n throw new Error('No turn generated');\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n\n return result;\n },\n\n stream(context: ExecutionContext): AgentStreamResult {\n const { llm, input, state, strategy, signal } = context;\n const agentId = context.agent.id;\n\n let aborted = false;\n const abortController = new AbortController();\n\n if (signal) {\n signal.addEventListener('abort', () => abortController.abort());\n }\n\n let resolveResult: (result: ExecutionResult) => void;\n let rejectResult: (error: Error) => void;\n\n const resultPromise = new Promise<ExecutionResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n async function* generateEvents(): AsyncGenerator<AgentStreamEvent> {\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n try {\n while (!aborted) {\n step++;\n currentState = currentState.withStep(step);\n\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_start',\n step,\n agentId,\n data: { phase: 'reasoning' },\n },\n };\n\n // REASON PHASE\n const reasoningMessages = [\n ...messages,\n new UserMessage(opts.reasoningPrompt),\n ];\n\n const reasoningStream = llm.stream(reasoningMessages);\n let reasoningText = '';\n\n for await (const event of reasoningStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n\n if (event.type === 'text_delta' && event.delta.text) {\n reasoningText += event.delta.text;\n }\n }\n\n const reasoningTurn = await reasoningStream.turn;\n currentState = currentState.withReasoning(reasoningText || reasoningTurn.response.text);\n strategy.onReason?.(step, reasoningText || reasoningTurn.response.text);\n\n yield {\n source: 'uap',\n uap: {\n type: 'reasoning',\n step,\n agentId,\n data: { reasoning: reasoningText || reasoningTurn.response.text },\n },\n };\n\n messages.push(...reasoningTurn.messages);\n\n // ACT PHASE\n const actionPrompt = new UserMessage(\n 'Based on your reasoning, take the appropriate action. Use tools if needed, or provide a final answer.',\n );\n messages.push(actionPrompt);\n\n const actionStream = llm.stream(messages);\n\n for await (const event of actionStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n }\n\n const actionTurn = await actionStream.turn;\n finalTurn = actionTurn;\n\n messages.push(...actionTurn.messages);\n currentState = currentState.withMessages(actionTurn.messages);\n\n if (actionTurn.response.hasToolCalls) {\n strategy.onAct?.(step, actionTurn.response.toolCalls ?? []);\n\n yield {\n source: 'uap',\n uap: {\n type: 'action',\n step,\n agentId,\n data: { toolCalls: actionTurn.response.toolCalls },\n },\n };\n }\n\n if (actionTurn.toolExecutions && actionTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, actionTurn.toolExecutions);\n\n yield {\n source: 'uap',\n uap: {\n type: 'observation',\n step,\n agentId,\n data: { observations: actionTurn.toolExecutions },\n },\n };\n }\n\n strategy.onStepEnd?.(step, { turn: actionTurn, state: currentState });\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_end',\n step,\n agentId,\n data: { phase: 'complete' },\n },\n };\n\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n\n if (!actionTurn.response.hasToolCalls) {\n break;\n }\n\n if (opts.maxSteps !== Infinity && step >= opts.maxSteps) {\n break;\n }\n }\n\n if (!finalTurn) {\n throw new Error('No turn generated');\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n resolveResult(result);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n strategy.onError?.(err, currentState);\n rejectResult(err);\n throw err;\n }\n }\n\n const iterator = generateEvents();\n\n return {\n [Symbol.asyncIterator]() {\n return iterator;\n },\n result: resultPromise,\n abort() {\n aborted = true;\n abortController.abort();\n },\n };\n },\n };\n}\n","import type { Turn, StreamEvent } from '@providerprotocol/ai';\nimport { UserMessage } from '@providerprotocol/ai';\nimport type { PlanStep } from '../state/index.ts';\nimport { generateUUID } from '../utils/uuid.ts';\nimport type {\n ExecutionStrategy,\n ExecutionContext,\n ExecutionResult,\n PlanOptions,\n AgentStreamResult,\n AgentStreamEvent,\n} from './types.ts';\n\nconst DEFAULT_PLAN_OPTIONS: Required<PlanOptions> = {\n maxPlanSteps: Infinity,\n allowReplan: true,\n planSchema: {\n type: 'object',\n properties: {\n steps: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Unique step identifier' },\n description: { type: 'string', description: 'What this step does' },\n tool: { type: 'string', description: 'Tool to use (if applicable)' },\n dependsOn: {\n type: 'array',\n items: { type: 'string' },\n description: 'IDs of steps this depends on',\n },\n },\n required: ['id', 'description', 'dependsOn'],\n },\n },\n },\n required: ['steps'],\n },\n};\n\nconst PLAN_PROMPT = `Create a detailed execution plan to accomplish the task.\nBreak it down into clear steps, specifying which tool to use for each step if applicable.\nInclude dependencies between steps (which steps must complete before others can start).\nReturn your plan as a JSON object with a \"steps\" array.`;\n\n/**\n * Create a plan-then-execute strategy.\n *\n * Behavior:\n * 1. Plan: LLM generates structured plan with steps and dependencies\n * 2. Execute: Execute each plan step respecting dependency order\n * 3. Replan: If a step fails and allowReplan is true, generate new plan\n *\n * @param options - Plan configuration options\n * @returns ExecutionStrategy\n */\nexport function plan(options: PlanOptions = {}): ExecutionStrategy {\n const opts = { ...DEFAULT_PLAN_OPTIONS, ...options };\n\n return {\n name: 'plan',\n\n async execute(context: ExecutionContext): Promise<ExecutionResult> {\n const { llm, input, state, strategy, signal } = context;\n\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n // PLANNING PHASE\n step++;\n currentState = currentState.withStep(step);\n\n if (signal?.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n // Generate the plan\n const planMessages = [\n ...messages,\n new UserMessage(PLAN_PROMPT),\n ];\n\n const planTurn = await llm.generate(planMessages);\n\n // Parse the plan from the response\n let planData: { steps: Array<{ id: string; description: string; tool?: string; dependsOn: string[] }> };\n\n try {\n if (planTurn.data) {\n planData = planTurn.data as typeof planData;\n } else {\n // Try to parse from text\n const jsonMatch = planTurn.response.text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n planData = JSON.parse(jsonMatch[0]) as typeof planData;\n } else {\n throw new Error('Could not parse plan from response');\n }\n }\n } catch (err) {\n throw new Error(`Failed to parse execution plan: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Convert to PlanStep format\n let planSteps: PlanStep[] = planData.steps.map((s) => ({\n id: s.id || generateUUID(),\n description: s.description,\n tool: s.tool,\n dependsOn: s.dependsOn || [],\n status: 'pending' as const,\n }));\n\n // Apply maxPlanSteps limit\n if (opts.maxPlanSteps !== Infinity && planSteps.length > opts.maxPlanSteps) {\n planSteps = planSteps.slice(0, opts.maxPlanSteps);\n }\n\n currentState = currentState.withPlan(planSteps);\n messages.push(...planTurn.messages);\n\n strategy.onStepEnd?.(step, { turn: planTurn, state: currentState });\n\n // EXECUTION PHASE\n const completedSteps = new Set<string>();\n\n // Execute steps in topological order\n while (planSteps.some((s) => s.status === 'pending')) {\n // Find next executable step (all dependencies completed)\n const nextStep = planSteps.find(\n (s) => s.status === 'pending'\n && s.dependsOn.every((depId) => completedSteps.has(depId)),\n );\n\n if (!nextStep) {\n // No step can be executed - either done or cyclic dependency\n break;\n }\n\n step++;\n currentState = currentState.withStep(step);\n\n if (signal?.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n // Update step status to in_progress\n nextStep.status = 'in_progress';\n currentState = currentState.withPlan([...planSteps]);\n\n // Execute the step\n const stepPrompt = new UserMessage(\n `Execute step \"${nextStep.id}\": ${nextStep.description}${nextStep.tool ? ` using the ${nextStep.tool} tool` : ''}`,\n );\n messages.push(stepPrompt);\n\n try {\n const stepTurn = await llm.generate(messages);\n finalTurn = stepTurn;\n\n messages.push(...stepTurn.messages);\n currentState = currentState.withMessages(stepTurn.messages);\n\n if (stepTurn.response.hasToolCalls) {\n strategy.onAct?.(step, stepTurn.response.toolCalls ?? []);\n }\n\n if (stepTurn.toolExecutions && stepTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, stepTurn.toolExecutions);\n }\n\n // Mark step as completed\n nextStep.status = 'completed';\n completedSteps.add(nextStep.id);\n currentState = currentState.withPlan([...planSteps]);\n\n strategy.onStepEnd?.(step, { turn: stepTurn, state: currentState });\n } catch (err) {\n nextStep.status = 'failed';\n currentState = currentState.withPlan([...planSteps]);\n\n if (opts.allowReplan) {\n // Could implement replanning here\n // For now, just continue and let the error propagate\n }\n\n throw err;\n }\n\n // Check stop condition\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n }\n\n if (!finalTurn) {\n finalTurn = planTurn; // Use plan turn if no execution happened\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n\n return result;\n },\n\n stream(context: ExecutionContext): AgentStreamResult {\n const { llm, input, state, strategy, signal } = context;\n const agentId = context.agent.id;\n\n let aborted = false;\n const abortController = new AbortController();\n\n if (signal) {\n signal.addEventListener('abort', () => abortController.abort());\n }\n\n let resolveResult: (result: ExecutionResult) => void;\n let rejectResult: (error: Error) => void;\n\n const resultPromise = new Promise<ExecutionResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n async function* generateEvents(): AsyncGenerator<AgentStreamEvent> {\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n try {\n // PLANNING PHASE\n step++;\n currentState = currentState.withStep(step);\n\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_start',\n step,\n agentId,\n data: { phase: 'planning' },\n },\n };\n\n const planMessages = [\n ...messages,\n new UserMessage(PLAN_PROMPT),\n ];\n\n const planStream = llm.stream(planMessages);\n\n for await (const event of planStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n }\n\n const planTurn = await planStream.turn;\n\n let planData: { steps: Array<{ id: string; description: string; tool?: string; dependsOn: string[] }> };\n\n try {\n if (planTurn.data) {\n planData = planTurn.data as typeof planData;\n } else {\n const jsonMatch = planTurn.response.text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n planData = JSON.parse(jsonMatch[0]) as typeof planData;\n } else {\n throw new Error('Could not parse plan from response');\n }\n }\n } catch (err) {\n throw new Error(`Failed to parse execution plan: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n let planSteps: PlanStep[] = planData.steps.map((s) => ({\n id: s.id || generateUUID(),\n description: s.description,\n tool: s.tool,\n dependsOn: s.dependsOn || [],\n status: 'pending' as const,\n }));\n\n if (opts.maxPlanSteps !== Infinity && planSteps.length > opts.maxPlanSteps) {\n planSteps = planSteps.slice(0, opts.maxPlanSteps);\n }\n\n currentState = currentState.withPlan(planSteps);\n messages.push(...planTurn.messages);\n\n yield {\n source: 'uap',\n uap: {\n type: 'plan_created',\n step,\n agentId,\n data: { plan: planSteps },\n },\n };\n\n strategy.onStepEnd?.(step, { turn: planTurn, state: currentState });\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_end',\n step,\n agentId,\n data: { phase: 'planning' },\n },\n };\n\n // EXECUTION PHASE\n const completedSteps = new Set<string>();\n\n while (planSteps.some((s) => s.status === 'pending') && !aborted) {\n const nextStep = planSteps.find(\n (s) => s.status === 'pending'\n && s.dependsOn.every((depId) => completedSteps.has(depId)),\n );\n\n if (!nextStep) {\n break;\n }\n\n step++;\n currentState = currentState.withStep(step);\n\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n yield {\n source: 'uap',\n uap: {\n type: 'plan_step_start',\n step,\n agentId,\n data: { planStep: nextStep },\n },\n };\n\n nextStep.status = 'in_progress';\n currentState = currentState.withPlan([...planSteps]);\n\n const stepPrompt = new UserMessage(\n `Execute step \"${nextStep.id}\": ${nextStep.description}${nextStep.tool ? ` using the ${nextStep.tool} tool` : ''}`,\n );\n messages.push(stepPrompt);\n\n const stepStream = llm.stream(messages);\n\n for await (const event of stepStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n }\n\n const stepTurn = await stepStream.turn;\n finalTurn = stepTurn;\n\n messages.push(...stepTurn.messages);\n currentState = currentState.withMessages(stepTurn.messages);\n\n if (stepTurn.response.hasToolCalls) {\n strategy.onAct?.(step, stepTurn.response.toolCalls ?? []);\n\n yield {\n source: 'uap',\n uap: {\n type: 'action',\n step,\n agentId,\n data: { toolCalls: stepTurn.response.toolCalls },\n },\n };\n }\n\n if (stepTurn.toolExecutions && stepTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, stepTurn.toolExecutions);\n\n yield {\n source: 'uap',\n uap: {\n type: 'observation',\n step,\n agentId,\n data: { observations: stepTurn.toolExecutions },\n },\n };\n }\n\n nextStep.status = 'completed';\n completedSteps.add(nextStep.id);\n currentState = currentState.withPlan([...planSteps]);\n\n strategy.onStepEnd?.(step, { turn: stepTurn, state: currentState });\n\n yield {\n source: 'uap',\n uap: {\n type: 'plan_step_end',\n step,\n agentId,\n data: { planStep: nextStep },\n },\n };\n\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n }\n\n if (!finalTurn) {\n finalTurn = planTurn;\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n resolveResult(result);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n strategy.onError?.(err, currentState);\n rejectResult(err);\n throw err;\n }\n }\n\n const iterator = generateEvents();\n\n return {\n [Symbol.asyncIterator]() {\n return iterator;\n },\n result: resultPromise,\n abort() {\n aborted = true;\n abortController.abort();\n },\n };\n },\n };\n}\n","import type { Tool, ToolCall } from '@providerprotocol/ai';\nimport type { ToolWithDependencies, OrderedToolCall } from './types.ts';\n\n/**\n * Execution group - a set of tool calls that can execute in parallel.\n */\nexport interface ExecutionGroup {\n /** Tool calls in this group */\n calls: ToolCall[];\n /** Whether this group contains a sequential tool (acts as barrier) */\n isBarrier: boolean;\n}\n\n/**\n * Build a map of tool definitions by name for quick lookup.\n */\nfunction buildToolMap(tools: Tool[]): Map<string, ToolWithDependencies> {\n const map = new Map<string, ToolWithDependencies>();\n for (const tool of tools) {\n map.set(tool.name, tool as ToolWithDependencies);\n }\n return map;\n}\n\n/**\n * Check if a tool call has an explicit dependency via model hint.\n */\nfunction getModelDependencies(call: ToolCall): string[] {\n const orderedCall = call as OrderedToolCall;\n return orderedCall.after ?? [];\n}\n\n/**\n * Order tool calls into execution groups respecting dependencies.\n *\n * This function takes a list of tool calls and the available tools,\n * then groups them for execution while respecting:\n * 1. Tool-level `sequential` flag (creates execution barriers)\n * 2. Tool-level `dependsOn` array (tool must wait for named tools)\n * 3. Model-driven `after` array on tool calls (call must wait for specific calls)\n *\n * @param toolCalls - Tool calls from the model response\n * @param tools - Tool definitions (may include dependency options)\n * @returns Ordered array of execution groups\n *\n * @example\n * ```typescript\n * const groups = orderToolCalls(turn.response.toolCalls, agent.tools);\n *\n * for (const group of groups) {\n * if (group.isBarrier) {\n * // Execute sequentially\n * for (const call of group.calls) {\n * await executeTool(call);\n * }\n * } else {\n * // Execute in parallel\n * await Promise.all(group.calls.map(executeTool));\n * }\n * }\n * ```\n */\nexport function orderToolCalls(\n toolCalls: ToolCall[],\n tools: Tool[],\n): ExecutionGroup[] {\n if (toolCalls.length === 0) {\n return [];\n }\n\n const toolMap = buildToolMap(tools);\n const groups: ExecutionGroup[] = [];\n\n // Track completed tool calls and tool names\n const completedCallIds = new Set<string>();\n const completedToolNames = new Set<string>();\n\n // Create a queue of pending calls\n const pending = [...toolCalls];\n\n while (pending.length > 0) {\n const readyForExecution: ToolCall[] = [];\n let hasSequential = false;\n\n // Find all calls that can execute now\n const stillPending: ToolCall[] = [];\n\n for (const call of pending) {\n const tool = toolMap.get(call.toolName);\n const toolDependsOn = tool?.dependsOn ?? [];\n const modelDependsOn = getModelDependencies(call);\n\n // Check if tool-level dependencies are satisfied\n const toolDepsOk = toolDependsOn.every(\n (depName) => completedToolNames.has(depName),\n );\n\n // Check if model-level dependencies are satisfied\n const modelDepsOk = modelDependsOn.every(\n (depId) => completedCallIds.has(depId),\n );\n\n if (toolDepsOk && modelDepsOk) {\n readyForExecution.push(call);\n if (tool?.sequential) {\n hasSequential = true;\n }\n } else {\n stillPending.push(call);\n }\n }\n\n // If nothing is ready but we have pending items, there's a cycle\n if (readyForExecution.length === 0 && stillPending.length > 0) {\n // Break the cycle by executing remaining items\n // This is a fallback - ideally dependencies should be acyclic\n groups.push({\n calls: stillPending,\n isBarrier: false,\n });\n break;\n }\n\n // If we have sequential tools, they form a barrier\n // Process them one at a time\n if (hasSequential) {\n for (const call of readyForExecution) {\n const tool = toolMap.get(call.toolName);\n groups.push({\n calls: [call],\n isBarrier: tool?.sequential ?? false,\n });\n completedCallIds.add(call.toolCallId);\n completedToolNames.add(call.toolName);\n }\n } else {\n // Non-sequential tools can be grouped for parallel execution\n groups.push({\n calls: readyForExecution,\n isBarrier: false,\n });\n for (const call of readyForExecution) {\n completedCallIds.add(call.toolCallId);\n completedToolNames.add(call.toolName);\n }\n }\n\n // Update pending list\n pending.length = 0;\n pending.push(...stillPending);\n }\n\n return groups;\n}\n\n/**\n * Check if any tools have execution dependencies defined.\n *\n * @param tools - Tool definitions to check\n * @returns true if any tool has sequential or dependsOn set\n */\nexport function hasToolDependencies(tools: Tool[]): boolean {\n for (const tool of tools) {\n const t = tool as ToolWithDependencies;\n if (t.sequential || (t.dependsOn && t.dependsOn.length > 0)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Check if any tool calls have model-driven dependencies.\n *\n * @param toolCalls - Tool calls to check\n * @returns true if any call has the `after` field set\n */\nexport function hasCallDependencies(toolCalls: ToolCall[]): boolean {\n for (const call of toolCalls) {\n const ordered = call as OrderedToolCall;\n if (ordered.after && ordered.after.length > 0) {\n return true;\n }\n }\n return false;\n}\n"]}
1
+ {"version":3,"sources":["../../src/execution/react.ts","../../src/execution/plan.ts","../../src/execution/tool-ordering.ts"],"names":["UserMessage"],"mappings":"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","file":"index.js","sourcesContent":["import type { Turn, StreamEvent } from '@providerprotocol/ai';\nimport { UserMessage } from '@providerprotocol/ai';\nimport type {\n ExecutionStrategy,\n ExecutionContext,\n ExecutionResult,\n ReactOptions,\n AgentStreamResult,\n AgentStreamEvent,\n} from './types.ts';\n\nconst DEFAULT_REACT_OPTIONS: Required<ReactOptions> = {\n maxSteps: Infinity,\n reasoningPrompt: 'Think step by step about what you need to do next. Consider the current state, what tools are available, and what action would be most helpful.',\n};\n\n/**\n * Create a ReAct (Reason-Act-Observe) execution strategy.\n *\n * Behavior:\n * 1. Reason: LLM outputs reasoning about what to do next\n * 2. Act: LLM selects and executes tool(s)\n * 3. Observe: Tool results are formatted as observations\n * 4. Repeat until stop condition, no more actions, or maxSteps\n *\n * @param options - ReAct configuration options\n * @returns ExecutionStrategy\n */\nexport function react(options: ReactOptions = {}): ExecutionStrategy {\n const opts = { ...DEFAULT_REACT_OPTIONS, ...options };\n\n return {\n name: 'react',\n\n async execute(context: ExecutionContext): Promise<ExecutionResult> {\n const { llm, input, state, strategy, signal } = context;\n\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n while (true) {\n step++;\n currentState = currentState.withStep(step);\n\n if (signal?.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n // REASON PHASE: Ask LLM to think about what to do\n const reasoningMessages = [\n ...messages,\n new UserMessage(opts.reasoningPrompt),\n ];\n\n const reasoningTurn = await llm.generate(reasoningMessages);\n\n const reasoning = reasoningTurn.response.text;\n currentState = currentState.withReasoning(reasoning);\n strategy.onReason?.(step, reasoning);\n\n // Add reasoning to conversation\n messages.push(...reasoningTurn.messages);\n\n // ACT PHASE: Execute with tools\n const actionPrompt = new UserMessage(\n 'Based on your reasoning, take the appropriate action. Use tools if needed, or provide a final answer.',\n );\n messages.push(actionPrompt);\n\n const actionTurn = await llm.generate(messages);\n finalTurn = actionTurn;\n\n // Update messages with action response\n messages.push(...actionTurn.messages);\n currentState = currentState.withMessages(actionTurn.messages);\n\n // Handle tool calls\n if (actionTurn.response.hasToolCalls) {\n strategy.onAct?.(step, actionTurn.response.toolCalls ?? []);\n }\n\n // OBSERVE PHASE: Process tool results\n if (actionTurn.toolExecutions && actionTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, actionTurn.toolExecutions);\n }\n\n strategy.onStepEnd?.(step, { turn: actionTurn, state: currentState });\n\n // Check stop conditions\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n\n // No more tool calls means we're done\n if (!actionTurn.response.hasToolCalls) {\n break;\n }\n\n // Check step limit\n if (opts.maxSteps !== Infinity && step >= opts.maxSteps) {\n break;\n }\n }\n\n if (!finalTurn) {\n throw new Error('No turn generated');\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n\n return result;\n },\n\n stream(context: ExecutionContext): AgentStreamResult {\n const { llm, input, state, strategy, signal } = context;\n const agentId = context.agent.id;\n\n let aborted = false;\n const abortController = new AbortController();\n\n if (signal) {\n signal.addEventListener('abort', () => abortController.abort());\n }\n\n let resolveResult: (result: ExecutionResult) => void;\n let rejectResult: (error: Error) => void;\n\n const resultPromise = new Promise<ExecutionResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n async function* generateEvents(): AsyncGenerator<AgentStreamEvent> {\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n try {\n while (!aborted) {\n step++;\n currentState = currentState.withStep(step);\n\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_start',\n step,\n agentId,\n data: { phase: 'reasoning' },\n },\n };\n\n // REASON PHASE\n const reasoningMessages = [\n ...messages,\n new UserMessage(opts.reasoningPrompt),\n ];\n\n const reasoningStream = llm.stream(reasoningMessages);\n let reasoningText = '';\n\n for await (const event of reasoningStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n\n if (event.type === 'text_delta' && event.delta.text) {\n reasoningText += event.delta.text;\n }\n }\n\n const reasoningTurn = await reasoningStream.turn;\n currentState = currentState.withReasoning(reasoningText || reasoningTurn.response.text);\n strategy.onReason?.(step, reasoningText || reasoningTurn.response.text);\n\n yield {\n source: 'uap',\n uap: {\n type: 'reasoning',\n step,\n agentId,\n data: { reasoning: reasoningText || reasoningTurn.response.text },\n },\n };\n\n messages.push(...reasoningTurn.messages);\n\n // ACT PHASE\n const actionPrompt = new UserMessage(\n 'Based on your reasoning, take the appropriate action. Use tools if needed, or provide a final answer.',\n );\n messages.push(actionPrompt);\n\n const actionStream = llm.stream(messages);\n\n for await (const event of actionStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n }\n\n const actionTurn = await actionStream.turn;\n finalTurn = actionTurn;\n\n messages.push(...actionTurn.messages);\n currentState = currentState.withMessages(actionTurn.messages);\n\n if (actionTurn.response.hasToolCalls) {\n strategy.onAct?.(step, actionTurn.response.toolCalls ?? []);\n\n yield {\n source: 'uap',\n uap: {\n type: 'action',\n step,\n agentId,\n data: { toolCalls: actionTurn.response.toolCalls },\n },\n };\n }\n\n if (actionTurn.toolExecutions && actionTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, actionTurn.toolExecutions);\n\n yield {\n source: 'uap',\n uap: {\n type: 'observation',\n step,\n agentId,\n data: { observations: actionTurn.toolExecutions },\n },\n };\n }\n\n strategy.onStepEnd?.(step, { turn: actionTurn, state: currentState });\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_end',\n step,\n agentId,\n data: { phase: 'complete' },\n },\n };\n\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n\n if (!actionTurn.response.hasToolCalls) {\n break;\n }\n\n if (opts.maxSteps !== Infinity && step >= opts.maxSteps) {\n break;\n }\n }\n\n if (!finalTurn) {\n throw new Error('No turn generated');\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n resolveResult(result);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n strategy.onError?.(err, currentState);\n rejectResult(err);\n throw err;\n }\n }\n\n const iterator = generateEvents();\n\n return {\n [Symbol.asyncIterator]() {\n return iterator;\n },\n result: resultPromise,\n abort() {\n aborted = true;\n abortController.abort();\n },\n };\n },\n };\n}\n","import type { Turn, StreamEvent } from '@providerprotocol/ai';\nimport { UserMessage } from '@providerprotocol/ai';\nimport type { PlanStep } from '../state/index.ts';\nimport { generateUUID } from '../utils/uuid.ts';\nimport type {\n ExecutionStrategy,\n ExecutionContext,\n ExecutionResult,\n PlanOptions,\n AgentStreamResult,\n AgentStreamEvent,\n} from './types.ts';\n\nconst DEFAULT_PLAN_OPTIONS: Required<PlanOptions> = {\n maxPlanSteps: Infinity,\n allowReplan: true,\n planSchema: {\n type: 'object',\n properties: {\n steps: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n id: { type: 'string', description: 'Unique step identifier' },\n description: { type: 'string', description: 'What this step does' },\n tool: { type: 'string', description: 'Tool to use (if applicable)' },\n dependsOn: {\n type: 'array',\n items: { type: 'string' },\n description: 'IDs of steps this depends on',\n },\n },\n required: ['id', 'description', 'dependsOn'],\n },\n },\n },\n required: ['steps'],\n },\n};\n\nconst PLAN_PROMPT = `Create a detailed execution plan to accomplish the task.\nBreak it down into clear steps, specifying which tool to use for each step if applicable.\nInclude dependencies between steps (which steps must complete before others can start).\nReturn your plan as a JSON object with a \"steps\" array.`;\n\n/**\n * Create a plan-then-execute strategy.\n *\n * Behavior:\n * 1. Plan: LLM generates structured plan with steps and dependencies\n * 2. Execute: Execute each plan step respecting dependency order\n * 3. Replan: If a step fails and allowReplan is true, generate new plan\n *\n * @param options - Plan configuration options\n * @returns ExecutionStrategy\n */\nexport function plan(options: PlanOptions = {}): ExecutionStrategy {\n const opts = { ...DEFAULT_PLAN_OPTIONS, ...options };\n\n return {\n name: 'plan',\n\n async execute(context: ExecutionContext): Promise<ExecutionResult> {\n const { llm, input, state, strategy, signal } = context;\n\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n // PLANNING PHASE\n step++;\n currentState = currentState.withStep(step);\n\n if (signal?.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n // Generate the plan\n const planMessages = [\n ...messages,\n new UserMessage(PLAN_PROMPT),\n ];\n\n const planTurn = await llm.generate(planMessages);\n\n // Parse the plan from the response\n let planData: { steps: Array<{ id: string; description: string; tool?: string; dependsOn: string[] }> };\n\n try {\n if (planTurn.data) {\n planData = planTurn.data as typeof planData;\n } else {\n // Try to parse from text\n const jsonMatch = planTurn.response.text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n planData = JSON.parse(jsonMatch[0]) as typeof planData;\n } else {\n throw new Error('Could not parse plan from response');\n }\n }\n } catch (err) {\n throw new Error(`Failed to parse execution plan: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Convert to PlanStep format\n let planSteps: PlanStep[] = planData.steps.map((s) => ({\n id: s.id || generateUUID(),\n description: s.description,\n tool: s.tool,\n dependsOn: s.dependsOn || [],\n status: 'pending' as const,\n }));\n\n // Apply maxPlanSteps limit\n if (opts.maxPlanSteps !== Infinity && planSteps.length > opts.maxPlanSteps) {\n planSteps = planSteps.slice(0, opts.maxPlanSteps);\n }\n\n currentState = currentState.withPlan(planSteps);\n messages.push(...planTurn.messages);\n\n strategy.onStepEnd?.(step, { turn: planTurn, state: currentState });\n\n // EXECUTION PHASE\n const completedSteps = new Set<string>();\n\n // Execute steps in topological order\n while (planSteps.some((s) => s.status === 'pending')) {\n // Find next executable step (all dependencies completed)\n const nextStep = planSteps.find(\n (s) => s.status === 'pending'\n && s.dependsOn.every((depId) => completedSteps.has(depId)),\n );\n\n if (!nextStep) {\n // No step can be executed - either done or cyclic dependency\n break;\n }\n\n step++;\n currentState = currentState.withStep(step);\n\n if (signal?.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n // Update step status to in_progress\n nextStep.status = 'in_progress';\n currentState = currentState.withPlan([...planSteps]);\n\n // Execute the step\n const stepPrompt = new UserMessage(\n `Execute step \"${nextStep.id}\": ${nextStep.description}${nextStep.tool ? ` using the ${nextStep.tool} tool` : ''}`,\n );\n messages.push(stepPrompt);\n\n try {\n const stepTurn = await llm.generate(messages);\n finalTurn = stepTurn;\n\n messages.push(...stepTurn.messages);\n currentState = currentState.withMessages(stepTurn.messages);\n\n if (stepTurn.response.hasToolCalls) {\n strategy.onAct?.(step, stepTurn.response.toolCalls ?? []);\n }\n\n if (stepTurn.toolExecutions && stepTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, stepTurn.toolExecutions);\n }\n\n // Mark step as completed\n nextStep.status = 'completed';\n completedSteps.add(nextStep.id);\n currentState = currentState.withPlan([...planSteps]);\n\n strategy.onStepEnd?.(step, { turn: stepTurn, state: currentState });\n } catch (err) {\n nextStep.status = 'failed';\n currentState = currentState.withPlan([...planSteps]);\n\n if (opts.allowReplan) {\n // Could implement replanning here\n // For now, just continue and let the error propagate\n }\n\n throw err;\n }\n\n // Check stop condition\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n }\n\n if (!finalTurn) {\n finalTurn = planTurn; // Use plan turn if no execution happened\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n\n return result;\n },\n\n stream(context: ExecutionContext): AgentStreamResult {\n const { llm, input, state, strategy, signal } = context;\n const agentId = context.agent.id;\n\n let aborted = false;\n const abortController = new AbortController();\n\n if (signal) {\n signal.addEventListener('abort', () => abortController.abort());\n }\n\n let resolveResult: (result: ExecutionResult) => void;\n let rejectResult: (error: Error) => void;\n\n const resultPromise = new Promise<ExecutionResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n async function* generateEvents(): AsyncGenerator<AgentStreamEvent> {\n // Add input message to state and set agentId in metadata\n // This ensures checkpoints include the full conversation\n let currentState = state\n .withMessage(input)\n .withMetadata('agentId', context.agent.id);\n let step = 0;\n let finalTurn: Turn | undefined;\n\n // Messages for LLM generation (includes input we just added)\n const messages = [...currentState.messages];\n\n try {\n // PLANNING PHASE\n step++;\n currentState = currentState.withStep(step);\n\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_start',\n step,\n agentId,\n data: { phase: 'planning' },\n },\n };\n\n const planMessages = [\n ...messages,\n new UserMessage(PLAN_PROMPT),\n ];\n\n const planStream = llm.stream(planMessages);\n\n for await (const event of planStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n }\n\n const planTurn = await planStream.turn;\n\n let planData: { steps: Array<{ id: string; description: string; tool?: string; dependsOn: string[] }> };\n\n try {\n if (planTurn.data) {\n planData = planTurn.data as typeof planData;\n } else {\n const jsonMatch = planTurn.response.text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n planData = JSON.parse(jsonMatch[0]) as typeof planData;\n } else {\n throw new Error('Could not parse plan from response');\n }\n }\n } catch (err) {\n throw new Error(`Failed to parse execution plan: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n let planSteps: PlanStep[] = planData.steps.map((s) => ({\n id: s.id || generateUUID(),\n description: s.description,\n tool: s.tool,\n dependsOn: s.dependsOn || [],\n status: 'pending' as const,\n }));\n\n if (opts.maxPlanSteps !== Infinity && planSteps.length > opts.maxPlanSteps) {\n planSteps = planSteps.slice(0, opts.maxPlanSteps);\n }\n\n currentState = currentState.withPlan(planSteps);\n messages.push(...planTurn.messages);\n\n yield {\n source: 'uap',\n uap: {\n type: 'plan_created',\n step,\n agentId,\n data: { plan: planSteps },\n },\n };\n\n strategy.onStepEnd?.(step, { turn: planTurn, state: currentState });\n\n yield {\n source: 'uap',\n uap: {\n type: 'step_end',\n step,\n agentId,\n data: { phase: 'planning' },\n },\n };\n\n // EXECUTION PHASE\n const completedSteps = new Set<string>();\n\n while (planSteps.some((s) => s.status === 'pending') && !aborted) {\n const nextStep = planSteps.find(\n (s) => s.status === 'pending'\n && s.dependsOn.every((depId) => completedSteps.has(depId)),\n );\n\n if (!nextStep) {\n break;\n }\n\n step++;\n currentState = currentState.withStep(step);\n\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n strategy.onStepStart?.(step, currentState);\n\n yield {\n source: 'uap',\n uap: {\n type: 'plan_step_start',\n step,\n agentId,\n data: { planStep: nextStep },\n },\n };\n\n nextStep.status = 'in_progress';\n currentState = currentState.withPlan([...planSteps]);\n\n const stepPrompt = new UserMessage(\n `Execute step \"${nextStep.id}\": ${nextStep.description}${nextStep.tool ? ` using the ${nextStep.tool} tool` : ''}`,\n );\n messages.push(stepPrompt);\n\n const stepStream = llm.stream(messages);\n\n for await (const event of stepStream as AsyncIterable<StreamEvent>) {\n if (abortController.signal.aborted) {\n throw new Error('Execution aborted');\n }\n\n yield { source: 'upp', upp: event };\n }\n\n const stepTurn = await stepStream.turn;\n finalTurn = stepTurn;\n\n messages.push(...stepTurn.messages);\n currentState = currentState.withMessages(stepTurn.messages);\n\n if (stepTurn.response.hasToolCalls) {\n strategy.onAct?.(step, stepTurn.response.toolCalls ?? []);\n\n yield {\n source: 'uap',\n uap: {\n type: 'action',\n step,\n agentId,\n data: { toolCalls: stepTurn.response.toolCalls },\n },\n };\n }\n\n if (stepTurn.toolExecutions && stepTurn.toolExecutions.length > 0) {\n strategy.onObserve?.(step, stepTurn.toolExecutions);\n\n yield {\n source: 'uap',\n uap: {\n type: 'observation',\n step,\n agentId,\n data: { observations: stepTurn.toolExecutions },\n },\n };\n }\n\n nextStep.status = 'completed';\n completedSteps.add(nextStep.id);\n currentState = currentState.withPlan([...planSteps]);\n\n strategy.onStepEnd?.(step, { turn: stepTurn, state: currentState });\n\n yield {\n source: 'uap',\n uap: {\n type: 'plan_step_end',\n step,\n agentId,\n data: { planStep: nextStep },\n },\n };\n\n const shouldStop = await strategy.stopCondition?.(currentState);\n if (shouldStop) {\n break;\n }\n }\n\n if (!finalTurn) {\n finalTurn = planTurn;\n }\n\n // Include sessionId in state metadata if checkpointing is enabled\n let finalState = currentState;\n if (context.sessionId) {\n finalState = currentState.withMetadata('sessionId', context.sessionId);\n }\n\n const result: ExecutionResult = {\n turn: finalTurn,\n state: finalState,\n };\n\n strategy.onComplete?.(result);\n resolveResult(result);\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n strategy.onError?.(err, currentState);\n rejectResult(err);\n throw err;\n }\n }\n\n const iterator = generateEvents();\n\n return {\n [Symbol.asyncIterator]() {\n return iterator;\n },\n result: resultPromise,\n abort() {\n aborted = true;\n abortController.abort();\n },\n };\n },\n };\n}\n","import type { Tool, ToolCall } from '@providerprotocol/ai';\nimport type { ToolWithDependencies, OrderedToolCall } from './types.ts';\n\n/**\n * Execution group - a set of tool calls that can execute in parallel.\n */\nexport interface ExecutionGroup {\n /** Tool calls in this group */\n calls: ToolCall[];\n /** Whether this group contains a sequential tool (acts as barrier) */\n isBarrier: boolean;\n}\n\n/**\n * Build a map of tool definitions by name for quick lookup.\n */\nfunction buildToolMap(tools: Tool[]): Map<string, ToolWithDependencies> {\n const map = new Map<string, ToolWithDependencies>();\n for (const tool of tools) {\n map.set(tool.name, tool as ToolWithDependencies);\n }\n return map;\n}\n\n/**\n * Check if a tool call has an explicit dependency via model hint.\n */\nfunction getModelDependencies(call: ToolCall): string[] {\n const orderedCall = call as OrderedToolCall;\n return orderedCall.after ?? [];\n}\n\n/**\n * Order tool calls into execution groups respecting dependencies.\n *\n * This function takes a list of tool calls and the available tools,\n * then groups them for execution while respecting:\n * 1. Tool-level `sequential` flag (creates execution barriers)\n * 2. Tool-level `dependsOn` array (tool must wait for named tools)\n * 3. Model-driven `after` array on tool calls (call must wait for specific calls)\n *\n * @param toolCalls - Tool calls from the model response\n * @param tools - Tool definitions (may include dependency options)\n * @returns Ordered array of execution groups\n *\n * @example\n * ```typescript\n * const groups = orderToolCalls(turn.response.toolCalls, agent.tools);\n *\n * for (const group of groups) {\n * if (group.isBarrier) {\n * // Execute sequentially\n * for (const call of group.calls) {\n * await executeTool(call);\n * }\n * } else {\n * // Execute in parallel\n * await Promise.all(group.calls.map(executeTool));\n * }\n * }\n * ```\n */\nexport function orderToolCalls(\n toolCalls: ToolCall[],\n tools: Tool[],\n): ExecutionGroup[] {\n if (toolCalls.length === 0) {\n return [];\n }\n\n const toolMap = buildToolMap(tools);\n const groups: ExecutionGroup[] = [];\n\n // Track completed tool calls and tool names\n const completedCallIds = new Set<string>();\n const completedToolNames = new Set<string>();\n\n // Create a queue of pending calls\n const pending = [...toolCalls];\n\n while (pending.length > 0) {\n const readyForExecution: ToolCall[] = [];\n let hasSequential = false;\n\n // Find all calls that can execute now\n const stillPending: ToolCall[] = [];\n\n for (const call of pending) {\n const tool = toolMap.get(call.toolName);\n const toolDependsOn = tool?.dependsOn ?? [];\n const modelDependsOn = getModelDependencies(call);\n\n // Check if tool-level dependencies are satisfied\n const toolDepsOk = toolDependsOn.every(\n (depName) => completedToolNames.has(depName),\n );\n\n // Check if model-level dependencies are satisfied\n const modelDepsOk = modelDependsOn.every(\n (depId) => completedCallIds.has(depId),\n );\n\n if (toolDepsOk && modelDepsOk) {\n readyForExecution.push(call);\n if (tool?.sequential) {\n hasSequential = true;\n }\n } else {\n stillPending.push(call);\n }\n }\n\n // If nothing is ready but we have pending items, there's a cycle\n if (readyForExecution.length === 0 && stillPending.length > 0) {\n // Break the cycle by executing remaining items\n // This is a fallback - ideally dependencies should be acyclic\n groups.push({\n calls: stillPending,\n isBarrier: false,\n });\n break;\n }\n\n // If we have sequential tools, they form a barrier\n // Process them one at a time\n if (hasSequential) {\n for (const call of readyForExecution) {\n const tool = toolMap.get(call.toolName);\n groups.push({\n calls: [call],\n isBarrier: tool?.sequential ?? false,\n });\n completedCallIds.add(call.toolCallId);\n completedToolNames.add(call.toolName);\n }\n } else {\n // Non-sequential tools can be grouped for parallel execution\n groups.push({\n calls: readyForExecution,\n isBarrier: false,\n });\n for (const call of readyForExecution) {\n completedCallIds.add(call.toolCallId);\n completedToolNames.add(call.toolName);\n }\n }\n\n // Update pending list\n pending.length = 0;\n pending.push(...stillPending);\n }\n\n return groups;\n}\n\n/**\n * Check if any tools have execution dependencies defined.\n *\n * @param tools - Tool definitions to check\n * @returns true if any tool has sequential or dependsOn set\n */\nexport function hasToolDependencies(tools: Tool[]): boolean {\n for (const tool of tools) {\n const t = tool as ToolWithDependencies;\n if (t.sequential || (t.dependsOn && t.dependsOn.length > 0)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Check if any tool calls have model-driven dependencies.\n *\n * @param toolCalls - Tool calls to check\n * @returns true if any call has the `after` field set\n */\nexport function hasCallDependencies(toolCalls: ToolCall[]): boolean {\n for (const call of toolCalls) {\n const ordered = call as OrderedToolCall;\n if (ordered.after && ordered.after.length > 0) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Result of executing a tool call.\n */\nexport interface ToolExecutionResult {\n /** The tool call that was executed */\n call: ToolCall;\n /** The result from the tool */\n result: unknown;\n /** Whether the tool threw an error */\n isError: boolean;\n /** Error message if isError is true */\n error?: string;\n /** Execution duration in milliseconds */\n duration: number;\n}\n\n/**\n * Function type for executing a single tool call.\n */\nexport type ToolExecutor = (call: ToolCall, tool: Tool) => Promise<unknown>;\n\n/**\n * Execute tool calls respecting dependency ordering.\n *\n * This function takes tool calls, orders them using `orderToolCalls()`,\n * and executes them respecting barriers (sequential tools) and\n * dependencies (dependsOn, after).\n *\n * Per UAP-1.0 Sections 8.5 and 8.6:\n * - Tools with `sequential: true` execute alone (barrier)\n * - Tools with `dependsOn` wait for named tools to complete\n * - Tool calls with `after` wait for specific call IDs to complete\n *\n * @param toolCalls - Tool calls from the model response\n * @param tools - Tool definitions with potential dependencies\n * @param executor - Function to execute a single tool call\n * @returns Array of execution results in completion order\n *\n * @example\n * ```typescript\n * import { executeOrderedToolCalls } from '@providerprotocol/agents/execution';\n *\n * // Define tools with dependencies\n * const readTool: ToolWithDependencies = {\n * name: 'read_file',\n * sequential: true, // Must complete before others\n * run: async (params) => readFile(params.path),\n * };\n *\n * const processTool: ToolWithDependencies = {\n * name: 'process',\n * dependsOn: ['read_file'], // Wait for read_file\n * run: async (params) => process(params.data),\n * };\n *\n * // Execute with ordering\n * const results = await executeOrderedToolCalls(\n * turn.response.toolCalls,\n * [readTool, processTool],\n * async (call, tool) => tool.run(call.arguments),\n * );\n * ```\n */\nexport async function executeOrderedToolCalls(\n toolCalls: ToolCall[],\n tools: Tool[],\n executor: ToolExecutor,\n): Promise<ToolExecutionResult[]> {\n if (toolCalls.length === 0) {\n return [];\n }\n\n const toolMap = new Map<string, Tool>();\n for (const tool of tools) {\n toolMap.set(tool.name, tool);\n }\n\n const groups = orderToolCalls(toolCalls, tools);\n const results: ToolExecutionResult[] = [];\n\n for (const group of groups) {\n if (group.isBarrier) {\n // Sequential execution - one at a time\n for (const call of group.calls) {\n const tool = toolMap.get(call.toolName);\n if (!tool) {\n results.push({\n call,\n result: null,\n isError: true,\n error: `Tool not found: ${call.toolName}`,\n duration: 0,\n });\n continue;\n }\n\n const result = await executeOne(call, tool, executor);\n results.push(result);\n }\n } else {\n // Parallel execution\n const groupResults = await Promise.all(\n group.calls.map(async (call) => {\n const tool = toolMap.get(call.toolName);\n if (!tool) {\n return {\n call,\n result: null,\n isError: true,\n error: `Tool not found: ${call.toolName}`,\n duration: 0,\n };\n }\n return executeOne(call, tool, executor);\n }),\n );\n results.push(...groupResults);\n }\n }\n\n return results;\n}\n\n/**\n * Execute a single tool call with timing and error handling.\n */\nasync function executeOne(\n call: ToolCall,\n tool: Tool,\n executor: ToolExecutor,\n): Promise<ToolExecutionResult> {\n const startTime = Date.now();\n\n try {\n const result = await executor(call, tool);\n return {\n call,\n result,\n isError: false,\n duration: Date.now() - startTime,\n };\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n return {\n call,\n result: null,\n isError: true,\n error: err.message,\n duration: Date.now() - startTime,\n };\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
- import { LLMOptions, ModelReference, LLMInstance, Tool, Message, Turn } from '@providerprotocol/ai';
1
+ import { LLMOptions, ModelReference, LLMInstance, Tool, Message, Turn, JSONSchema } from '@providerprotocol/ai';
2
2
  import { A as AgentState } from './index-qsPwbY86.js';
3
- import { E as ExecutionStrategy, A as AgentStrategy, G as GenerateResult, a as AgentStreamResult } from './types-DR02gtFv.js';
4
- export { b as AgentStreamEvent, O as OnSubagentEvent, f as SubagentEndEvent, g as SubagentEvent, c as SubagentEventBase, S as SubagentEventType, e as SubagentInnerEvent, d as SubagentStartEvent, U as UAPEventType } from './types-DR02gtFv.js';
5
- import { M as Middleware } from './types-NGQMdnaD.js';
6
- import { C as CheckpointStore } from './types-BhX9uD_d.js';
7
- export { b as CheckpointData, a as CheckpointMetadata, F as FileCheckpointOptions } from './types-BhX9uD_d.js';
3
+ import { E as ExecutionStrategy, A as AgentStrategy, G as GenerateResult, a as AgentStreamResult, T as ToolExecutionContext } from './types-DC8XeoaI.js';
4
+ export { b as AgentStreamEvent, C as ContextAwareToolRun, O as OnSubagentEvent, f as SubagentEndEvent, g as SubagentEvent, c as SubagentEventBase, S as SubagentEventType, e as SubagentInnerEvent, d as SubagentStartEvent, U as UAPEventType } from './types-DC8XeoaI.js';
5
+ import { M as Middleware } from './types-B9VuAOo6.js';
6
+ import { C as CheckpointStore } from './types-DChRdQoX.js';
7
+ export { b as CheckpointData, a as CheckpointMetadata, F as FileCheckpointOptions } from './types-DChRdQoX.js';
8
8
  export { ThreadNode, ThreadNodeJSON, ThreadTree, ThreadTreeJSON } from './thread-tree/index.js';
9
+ export { I as InjectToolContextOptions, i as injectToolContext, a as isContextAwareTool, w as withToolContext } from './tool-context-Cc_qNVud.js';
9
10
  export { A as AgentStateInterface, a as AgentStateJSON, P as PlanStep, b as PlanStepStatus, S as SubagentExecutionTrace, c as SubagentExecutionTraceJSON, T as ToolExecutionTrace } from './types-2Vsthzyu.js';
10
11
 
11
12
  /**
@@ -98,4 +99,121 @@ interface Agent {
98
99
  */
99
100
  declare function agent(options: AgentOptions): Agent;
100
101
 
101
- export { type Agent, type AgentOptions, AgentState, AgentStrategy, AgentStreamResult, CheckpointStore, GenerateResult, agent };
102
+ /**
103
+ * Sub-agent tool creation utilities.
104
+ *
105
+ * Per UAP-1.0 Section 8.7, implementations SHOULD provide helper utilities
106
+ * for creating sub-agent tools with event propagation.
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * import { agent } from '@providerprotocol/agents';
111
+ * import { createSubAgentTool } from '@providerprotocol/agents/subagent';
112
+ *
113
+ * // Create a sub-agent
114
+ * const explorer = agent({
115
+ * model: anthropic('claude-haiku-4-20250514'),
116
+ * tools: [Glob, Grep, Read],
117
+ * system: 'You explore codebases.',
118
+ * });
119
+ *
120
+ * // Wrap as a tool with event propagation
121
+ * const explorerTool = createSubAgentTool({
122
+ * agent: explorer,
123
+ * name: 'explore_codebase',
124
+ * description: 'Explore and find relevant code',
125
+ * parameters: {
126
+ * type: 'object',
127
+ * properties: {
128
+ * query: { type: 'string', description: 'What to find' },
129
+ * },
130
+ * required: ['query'],
131
+ * },
132
+ * buildPrompt: (params) => `Find: ${params.query}`,
133
+ * subagentType: 'explorer',
134
+ * });
135
+ *
136
+ * // Use in parent agent
137
+ * const coder = agent({
138
+ * model: anthropic('claude-sonnet-4-20250514'),
139
+ * tools: [Bash, Write, explorerTool],
140
+ * });
141
+ * ```
142
+ *
143
+ * @packageDocumentation
144
+ */
145
+
146
+ /**
147
+ * Options for creating a sub-agent tool.
148
+ */
149
+ interface CreateSubAgentToolOptions {
150
+ /** The sub-agent to expose as a tool */
151
+ agent: Agent;
152
+ /** Tool name (must be unique within parent agent's tools) */
153
+ name: string;
154
+ /** Tool description for the model */
155
+ description: string;
156
+ /** JSON Schema for tool parameters */
157
+ parameters: JSONSchema;
158
+ /** Convert tool parameters to a prompt for the sub-agent */
159
+ buildPrompt: (params: Record<string, unknown>) => string;
160
+ /**
161
+ * Identifier for the sub-agent type (used in events).
162
+ * Defaults to the tool name.
163
+ */
164
+ subagentType?: string;
165
+ /**
166
+ * Whether to stream the sub-agent execution.
167
+ * When true, inner events are forwarded to parent.
168
+ * Default: true
169
+ */
170
+ stream?: boolean;
171
+ }
172
+ /**
173
+ * Create a UPP Tool from a UAP Agent with full event propagation.
174
+ *
175
+ * Per UAP-1.0 Section 8.7, this helper:
176
+ * 1. Emits `subagent_start` before execution begins
177
+ * 2. Forwards inner events during streaming execution
178
+ * 3. Emits `subagent_end` after completion (success or failure)
179
+ * 4. Provides execution context to sub-agent for tracing
180
+ *
181
+ * The created tool accepts an optional `ToolExecutionContext` as a second
182
+ * parameter, which is injected by `injectToolContext()` during execution.
183
+ *
184
+ * @param options - Configuration for the sub-agent tool
185
+ * @returns A Tool that executes the sub-agent and propagates events
186
+ *
187
+ * @example
188
+ * ```typescript
189
+ * const summarizer = agent({
190
+ * model: anthropic('claude-haiku-4-20250514'),
191
+ * system: 'You summarize text concisely.',
192
+ * });
193
+ *
194
+ * const summarizerTool = createSubAgentTool({
195
+ * agent: summarizer,
196
+ * name: 'summarize',
197
+ * description: 'Summarize the given text',
198
+ * parameters: {
199
+ * type: 'object',
200
+ * properties: {
201
+ * text: { type: 'string', description: 'Text to summarize' },
202
+ * maxLength: { type: 'number', description: 'Max summary length' },
203
+ * },
204
+ * required: ['text'],
205
+ * },
206
+ * buildPrompt: (params) =>
207
+ * `Summarize this in ${params.maxLength ?? 100} words:\n\n${params.text}`,
208
+ * subagentType: 'summarizer',
209
+ * });
210
+ * ```
211
+ */
212
+ declare function createSubAgentTool(options: CreateSubAgentToolOptions): Tool;
213
+ /**
214
+ * Type for the run function of a sub-agent tool.
215
+ * Accepts params and optional execution context.
216
+ */
217
+ type SubAgentToolRun = (params: Record<string, unknown>, context?: ToolExecutionContext) => Promise<string>;
218
+
219
+ export { type Agent, type AgentOptions, AgentState, AgentStrategy, AgentStreamResult, CheckpointStore, type CreateSubAgentToolOptions, GenerateResult, type SubAgentToolRun, ToolExecutionContext, agent, createSubAgentTool };
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
- import { loop } from './chunk-4ESYN66B.js';
2
- import { AgentState } from './chunk-PHI5ULBV.js';
3
- export { AgentState, ThreadNode, ThreadTree } from './chunk-PHI5ULBV.js';
1
+ import { loop } from './chunk-CEHXAE4Z.js';
2
+ export { injectToolContext, isContextAwareTool, withToolContext } from './chunk-CEHXAE4Z.js';
3
+ import { AgentState } from './chunk-T47B3VAF.js';
4
+ export { AgentState, ThreadNode, ThreadTree } from './chunk-T47B3VAF.js';
4
5
  import { generateUUID } from './chunk-EKRXMSDX.js';
5
6
  import { llm, UserMessage } from '@providerprotocol/ai';
6
7
 
@@ -185,24 +186,7 @@ function agent(options) {
185
186
  };
186
187
  },
187
188
  async ask(input, state) {
188
- const normalizedInput = normalizeInput(input);
189
- const result = await agentInstance.generate(normalizedInput, state);
190
- const responseMessages = result.state.messages.slice(state.messages.length);
191
- const finalState = state.withMessage(normalizedInput).withMessages(responseMessages).withStep(result.state.step);
192
- let stateWithMetadata = finalState;
193
- for (const [key, value] of Object.entries(result.state.metadata)) {
194
- stateWithMetadata = stateWithMetadata.withMetadata(key, value);
195
- }
196
- for (const reasoning of result.state.reasoning) {
197
- stateWithMetadata = stateWithMetadata.withReasoning(reasoning);
198
- }
199
- if (result.state.plan) {
200
- stateWithMetadata = stateWithMetadata.withPlan([...result.state.plan]);
201
- }
202
- return {
203
- turn: result.turn,
204
- state: stateWithMetadata
205
- };
189
+ return agentInstance.generate(input, state);
206
190
  },
207
191
  async query(input) {
208
192
  const initialState = AgentState.initial();
@@ -213,6 +197,123 @@ function agent(options) {
213
197
  return agentInstance;
214
198
  }
215
199
 
216
- export { agent };
200
+ // src/subagent/index.ts
201
+ function createSubAgentTool(options) {
202
+ const {
203
+ agent: agent2,
204
+ name,
205
+ description,
206
+ parameters,
207
+ buildPrompt,
208
+ subagentType = name,
209
+ stream: shouldStream = true
210
+ } = options;
211
+ return {
212
+ name,
213
+ description,
214
+ parameters,
215
+ run: async (params, context) => {
216
+ const subagentId = generateUUID();
217
+ const toolCallId = context?.toolCallId ?? generateUUID();
218
+ const emit = context?.onSubagentEvent;
219
+ const prompt = buildPrompt(params);
220
+ const startTime = Date.now();
221
+ const startEvent = {
222
+ type: "subagent_start",
223
+ subagentId,
224
+ subagentType,
225
+ parentToolCallId: toolCallId,
226
+ prompt,
227
+ timestamp: startTime
228
+ };
229
+ emit?.(startEvent);
230
+ try {
231
+ if (shouldStream) {
232
+ return await executeWithStreaming(
233
+ agent2,
234
+ prompt,
235
+ subagentId,
236
+ subagentType,
237
+ toolCallId,
238
+ emit
239
+ );
240
+ }
241
+ return await executeWithoutStreaming(
242
+ agent2,
243
+ prompt,
244
+ subagentId,
245
+ subagentType,
246
+ toolCallId,
247
+ emit
248
+ );
249
+ } catch (error) {
250
+ const err = error instanceof Error ? error : new Error(String(error));
251
+ const endEvent = {
252
+ type: "subagent_end",
253
+ subagentId,
254
+ subagentType,
255
+ parentToolCallId: toolCallId,
256
+ success: false,
257
+ error: err.message,
258
+ timestamp: Date.now()
259
+ };
260
+ emit?.(endEvent);
261
+ throw err;
262
+ }
263
+ }
264
+ };
265
+ }
266
+ async function executeWithStreaming(agent2, prompt, subagentId, subagentType, toolCallId, emit) {
267
+ const stream = agent2.stream(prompt, AgentState.initial());
268
+ for await (const event of stream) {
269
+ emit?.({
270
+ type: "subagent_event",
271
+ subagentId,
272
+ subagentType,
273
+ parentToolCallId: toolCallId,
274
+ innerEvent: event
275
+ });
276
+ }
277
+ const result = await stream.result;
278
+ const endEvent = {
279
+ type: "subagent_end",
280
+ subagentId,
281
+ subagentType,
282
+ parentToolCallId: toolCallId,
283
+ success: true,
284
+ result: result.turn.response.text,
285
+ timestamp: Date.now(),
286
+ toolExecutions: result.turn.toolExecutions?.map((te) => ({
287
+ toolName: te.toolName,
288
+ arguments: te.arguments,
289
+ result: String(te.result)
290
+ })),
291
+ usage: result.turn.usage
292
+ };
293
+ emit?.(endEvent);
294
+ return result.turn.response.text;
295
+ }
296
+ async function executeWithoutStreaming(agent2, prompt, subagentId, subagentType, toolCallId, emit) {
297
+ const result = await agent2.generate(prompt, AgentState.initial());
298
+ const endEvent = {
299
+ type: "subagent_end",
300
+ subagentId,
301
+ subagentType,
302
+ parentToolCallId: toolCallId,
303
+ success: true,
304
+ result: result.turn.response.text,
305
+ timestamp: Date.now(),
306
+ toolExecutions: result.turn.toolExecutions?.map((te) => ({
307
+ toolName: te.toolName,
308
+ arguments: te.arguments,
309
+ result: String(te.result)
310
+ })),
311
+ usage: result.turn.usage
312
+ };
313
+ emit?.(endEvent);
314
+ return result.turn.response.text;
315
+ }
316
+
317
+ export { agent, createSubAgentTool };
217
318
  //# sourceMappingURL=index.js.map
218
319
  //# sourceMappingURL=index.js.map