2.6 KiB
Changelog
[Unreleased]
Breaking Changes
-
Transport abstraction removed:
ProviderTransport,AppTransport, andAgentTransportinterface have been removed. TheAgentclass now takes astreamFnoption directly for custom streaming implementations. -
Agent options renamed:
transport→ removed (usestreamFninstead)messageTransformer→convertToLlm(convertsAgentMessage[]to LLM-compatibleMessage[])preprocessor→transformContext(transformsAgentMessage[]beforeconvertToLlm)
-
AppMessage renamed to AgentMessage: All references to
AppMessagehave been renamed toAgentMessagefor consistency. -
Agent loop moved from pi-ai: The
agentLoop,agentLoopContinue, and related types (AgentContext,AgentEvent,AgentTool,AgentToolResult,AgentToolUpdateCallback,AgentLoopConfig) have moved from@mariozechner/pi-aito this package.
Added
-
streamFnoption: Pass a custom stream function to the Agent for proxy backends or custom implementations. Default usesstreamSimplefrom pi-ai. -
streamProxyutility: New helper function for browser apps that need to proxy through a backend server. ReplacesAppTransport. -
getApiKeyoption: Dynamic API key resolution for expiring OAuth tokens (e.g., GitHub Copilot). -
AgentLoopContextandAgentLoopConfig: Exported types for the low-level agent loop API. -
agentLoopandagentLoopContinue: Low-level functions for running the agent loop directly without theAgentclass wrapper.
Migration Guide
Before (0.30.x):
import { Agent, ProviderTransport } from '@mariozechner/pi-agent-core';
const agent = new Agent({
transport: new ProviderTransport({ apiKey: '...' }),
messageTransformer: (messages) => messages.filter(...),
preprocessor: async (messages) => compactMessages(messages)
});
After:
import { Agent } from '@mariozechner/pi-agent-core';
import { streamSimple } from '@mariozechner/pi-ai';
const agent = new Agent({
streamFn: streamSimple, // or omit for default
convertToLlm: (messages) => messages.filter(...),
transformContext: async (messages) => compactMessages(messages),
getApiKey: async (provider) => resolveApiKey(provider)
});
For proxy usage (replaces AppTransport):
import { Agent, streamProxy } from '@mariozechner/pi-agent-core';
const agent = new Agent({
streamFn: (model, context, options) => streamProxy(
'/api/agent',
model,
context,
options,
{ 'Authorization': 'Bearer ...' }
)
});