31 KiB
Changelog
[Unreleased]
Breaking Changes
AgentTooltakes any JSON Schema object asparameters(AgentTool<TParameters extends object>) and typesparamsandprepareArgumentsthrough@earendil-works/pi-schema(AgentToolParams<TParameters>): pi-schema's builders give their static type, TypeBox schemas give TypeBox's static type for the common kinds (String, Number, Integer, Boolean, Null, Literal, Array, Object with optional and readonly properties, Union, Record, Unsafe, Unknown, Any; other kinds such as Enum, Tuple and Intersect giveunknown), other schemas giveunknown,AgentTool<any>staysany.outputSchemais any JSON Schema object.typeboxis no longer a dependency. Migration: build parameters with pi-schema (obj({ path: str() })instead ofType.Object({ path: Type.String() })), or keep TypeBox schemas (narrowparamsyourself only where they use other kinds).
Fixed
- Fixed
streamProxy()re-parsing the accumulated tool-call arguments on every delta and keeping their raw text on the partial content block (#9265)
[1.4.0] - 2026-10-21
Added
- Added
AgentOptions.identityandAgent.identity(a pi-aiClientIdentity) to set theUser-Agentand provider attribution of agent loop requests.
[1.3.0] - 2026-10-15
[1.2.0] - 2026-10-12
[1.1.0] - 2026-10-07
Added
- Added
durationMsto tool result messages,AgentToolCallOutcome, andtool_execution_endevents: how longexecute()took, measured with a monotonic clock and excluding hooks. Calls that did not run have none (#10549)
Changed
streamProxy()returns anAssistantMessageEventStream, so proxied responses getdurationMslike direct ones
[1.0.4] - 2026-10-05
[1.0.3] - 2026-10-05
[1.0.2] - 2026-10-04
[1.0.1] - 2026-10-03
[1.0.0] - 2026-10-01
Breaking Changes
- Removed the experimental harness from
@earendil-works/pi-agent-core:AgentHarness, sessions and session storage, the durable runtime, pico3, harness tools, compaction, skills, prompt templates, system prompt helpers, telemetry schemas, the search service types, and theuuidv7and pi-telemetry re-exports. The./node,./harness/*, and./experimental/pico3subpath exports are gone. The package now contains onlyAgent, the agent loop, the proxy stream, and their types. Use@earendil-works/pi-durablefor durable sessions.
[0.99.2] - 2026-09-30
[0.99.1] - 2026-09-29
[0.99.0] - 2026-09-29
Added
- Added the
onProviderStreamEventagent option, which is passed to provider streams to observe parsed provider events before normalization (#9784, #9901 by @davidbrai). - The agent loop now records the requested thinking level as
thinkingLevelon each assistant message.
[0.87.1] - 2026-09-22
[0.87.0] - 2026-09-21
Breaking Changes
-
Removed
AgentOptions.shouldStopAfterTurnandAgentLoopConfig.shouldStopAfterTurn. UsefinishTurnand return{ action: "end" }to stop after the completed turn:// Before shouldStopAfterTurn: async (turn, signal) => await shouldStop(turn, signal), // After finishTurn: async (turn, signal) => { // shouldStopAfterTurn previously ran only for normal responses. if (turn.message.stopReason === "error" || turn.message.stopReason === "aborted") return; return (await shouldStop(turn, signal)) ? { action: "end" } : undefined; },finishTurnruns after the assistant and all tool results are finalized but beforeturn_end; its decision is applied afterturn_end. It also runs for error and aborted responses, whose decisions are ignored because those responses remain hard exits. The guard in the migration preserves the old hook's normal-response-only invocation, including avoiding predicate side effects on hard exits. Returning{ action: "end" }leaves steering and follow-up queues untouched and skipsprepareNextTurn.
Added
- Added
prepareRequest, which runs before every provider request, including the first. For example, return{ context: { ...context, messages: persistedMessages } }to install canonical context after already-selected input is emitted without introducing another queue poll. - Added
finishTurn, which runs after assistant/tool-result finalization and beforeturn_endfor normal, error, and aborted responses. Return{ action: "end" }to end a normal run afterturn_end, orundefinedto preserve normal scheduling.{ action: "continue" }ensures one next provider request: existing tool-result, steering, or follow-up scheduling can satisfy that request without adding another one; otherwise the loop makes one context-only request. Error and aborted responses remain hard exits. - Added
Agent.peekQueuedMessages()to preview the next queue-selected batch without consuming it.
Fixed
- Fixed harness reads misclassifying text files beginning with
GIFas images (#9755).
[0.86.1] - 2026-09-20
[0.86.0] - 2026-09-19
[0.85.1] - 2026-09-05
[0.85.0] - 2026-09-04
Fixed
- Fixed proxied assistant responses dropping persisted provider-native thinking levels.
- Fixed the write tool reporting UTF-16 code-unit counts as byte counts by removing the misleading count (#8979).
[0.84.4] - 2026-08-28
Breaking Changes
- Changed
prepareNextTurnandprepareNextTurnWithContextto run only aftershouldStopAfterTurnand queued-message checks determine that the agent loop will start another assistant turn. They no longer run after final or terminating turns; move end-of-run work toagent_endhandling (#6879).
Fixed
- Fixed Windows
NodeExecutionEnvaborts crashing whentaskkill.exeis unavailable onPATH(#6596).
Removed
- Removed the withdrawn manual-drive configuration, action inspection methods, action outcomes, and snapshot action field from
AgentHarness.
[0.84.3] - 2026-08-24
Fixed
- Fixed single-object
edittool inputs failing validation by accepting them as one-edit arrays (#7835). - Fixed root Markdown files such as
README.mdandAGENTS.mdin skill directories being reported as broken skills unless they declare valid skill frontmatter (#7805).
[0.84.2] - 2026-08-14
Fixed
- Fixed
streamProxy()dropping finalized tool-call metadata such as OpenAI Responses namespaces (#7709).
[0.84.1] - 2026-08-07
Added
- Added
BeforeToolCallResult.terminateso blocked tool calls can participate in the existing batch early-termination rule (#7715 by @muyiyr).
Fixed
- Fixed
Agent.reset()clearing transcript and runtime state during active runs; it now rejects until the agent is idle (#7717 by @wesleyzhangwq).
[0.84.0] - 2026-08-06
Breaking Changes
- Replaced the legacy harness session model with the v4 lane-based
Session,SessionStorage, andSessionRepoAPIs, including durable operation records, global facts, shared sequence numbers, and tree-scoped lane views. - Promoted the v2 session and
AgentHarnessAPI from the experimental entrypoint to the default package export and removed the experimental subpaths. - Removed the legacy JSONL and in-memory repository APIs. Use the v4
JsonlSessionRepoorInMemorySessionRepo, both implementing the newSessionRepocontract. - Added the required
FileSystem.renameFile()operation to harness execution environments for atomic JSONL publication; custom file-system implementations must provide same-filesystem replacement semantics (#7707 by @davidbrai).
Added
- Added typed AI-request and harness telemetry schemas, their combined schema tuple, callback helpers, and a generated schema reference.
- Added bounded
Session.findEntriesOnBranch()andfindEntryOnBranch()queries with explicit traversal, filtering, ordering, and limit options. - Added a compile-complete
AgentHarnessv2 scaffold; unfinished operation paths reject withHarnessNotImplementedwhile durable execution is implemented. - Added
JsonlSessionRepo, a v4 append-only JSONL session repository with metadata validation and shared storage semantics (#7611 by @davidbrai). - Added indexed
Session.findOpenOperations()recovery queries andRecordQuery.operationKindfiltering (#7646). - Added
AgentOptions.shouldStopAfterTurnfor gracefully stopping after a completed turn before queued messages or another model call are processed. See Agent Options (#7367 by @acmerfight). - Added proxy forwarding for arbitrary OpenAI-compatible
samplingParams(#7568 by @mrexodia).
Fixed
- Fixed Windows path handling for
NodeExecutionEnvfile basenames, recursive skill loading, and prompt template names. - Fixed
JsonlSessionRepoenforcing session IDs globally across working directories; IDs are now unique within each working directory. - Fixed JSONL session forks and torn-tail repairs to publish atomically, avoiding partially written or corrupted sessions after interrupted writes (#7707 by @davidbrai).
[0.83.0] - 2026-07-29
[0.82.1] - 2026-07-25
[0.82.0] - 2026-07-24
Breaking Changes
- Replaced
AgentHarness'sExecutionEnvdependency and context-freeAgentToolinputs with application-definedtoolContextvalues and context-awareAgentHarnessTooldefinitions.
Added
- Added context-aware
read,write,edit, andbashharness tools backed byExecutionEnv, including async bash execution preparation.
Changed
- Aligned harness tool path handling, edit serialization, shell output capture, explicit non-inherited environments, and cross-platform process cleanup with coding-agent behavior.
Fixed
- Fixed compaction and branch-summary requests to use fresh routing session IDs with prompt caching disabled where supported (#6618 by @tmustier).
[0.81.1] - 2026-07-21
Added
- Added retry policy support and lifecycle events for compaction and branch-summary operations in
AgentHarness(#6901 by @davidbrai).
Fixed
- Restored the
AgentstreamFnoption and host-configurable fallback for omitted agent-loop stream functions without reintroducing api-ai/compatdependency (#6915).
[0.81.0] - 2026-07-21
Breaking Changes
- Changed
SessionStorageto usegetPathToRootOrCompaction(), require session name and statistics methods, support cursor-based entry reads, and store retained compaction tails as self-contained checkpoints (#6594 by @cristinaponcela). - Moved the
uuidv7export to@earendil-works/pi-ai(#6834 by @xl0). - Replaced the optional
AgentstreamFnfallback with a requiredstreamFunctionand made low-level loop stream functions required, preventing@earendil-works/pi-ai/compatand all built-in providers from entering selective-provider bundles (#6851).
Added
- Added usage metadata to tool results, compaction entries, and branch summaries in the agent harness (#6671 by @davidbrai).
[0.80.10] - 2026-07-16
[0.80.9] - 2026-07-16
[0.80.8] - 2026-07-16
[0.80.7] - 2026-07-14
Added
- Added
AgentToolResult.addedToolNamespropagation toToolResultMessageso tools introduced by a result can be loaded from that transcript point onward (#6474).
[0.80.6] - 2026-07-09
Added
- Added the
maxmodel thinking level afterxhigh.
[0.80.5] - 2026-07-09
[0.80.4] - 2026-07-09
Added
- Added configurable harness session context entry transforms and custom-entry message projectors.
- Added custom metadata support in JSONL session headers (#6417 by @ArcadiaLin).
- Exported
InMemorySessionStorageandJsonlSessionStorage(#6435).
Fixed
- Fixed harness split-turn compaction to serialize summary requests so single-concurrency providers are not asked to run overlapping generations (#5536).
- Fixed harness tool calls from length-truncated assistant messages to fail instead of waiting for missing tool results (#6285).
- Fixed harness session ingestion to normalize
nullmessage content before context projection, avoiding crashes on lax imported transcripts (#6343). - Fixed non-positive or oversized harness shell execution timeouts to fail with a clear validation error instead of being clamped to an immediate timeout (#6181).
- Fixed harness session storage short entry ids to use the random tail of the generated uuidv7 instead of the timestamp prefix, which was nearly constant between calls (#6242).
[0.80.3] - 2026-06-30
Added
- Added
prepareNextTurnWithContextforAgentusers that need the next-turn loop context.
Fixed
- Fixed
Agent.prepareNextTurnto keep receiving the run abort signal instead of the next-turn context.
[0.80.2] - 2026-06-23
Changed
- Renamed the public harness shell execution options type from
ExecutionEnvExecOptionstoShellExecOptions.
[0.80.1] - 2026-06-23
[0.80.0] - 2026-06-23
Breaking Changes
AgentHarnessOptions.modelsis required and is the only auth path: the harness streams turns, compaction, and branch summarization through the providedModelsinstance (models.streamSimple()/completeSimple()), resolving auth through the providers.AgentHarnessOptions.getApiKeyAndHeadersis removed — apps that resolved keys per request now express that as provider auth (ApiKeyAuth/OAuthAuth) on the providers in theModelscollection. Build one withcreateModels()+ provider factories (orbuiltinModels()from@earendil-works/pi-ai/providers/all); tests usefauxProvider().compact(),generateSummary(), andgenerateBranchSummary()take aModelsparameter and no longer accept explicitapiKey/headers.StreamFnis defined structurally ((model, context, options?) => AssistantMessageEventStream | Promise<...>);Models.streamSimplesatisfies it.- Removed the
@earendil-works/pi-agent-core/baseselective-provider entrypoint; use the root package with an explicitModelsinstance instead.
Fixed
- Fixed harness session names to normalize newline characters before storing labels (#5999 by @haoqixu).
- Fixed harness compaction estimates to ignore malformed all-zero assistant usage after truncated responses (#5526 by @dmmulroy).
[0.79.10] - 2026-06-22
[0.79.9] - 2026-06-20
Fixed
- Fixed Node execution environment commands through legacy WSL
bash.exeto pass scripts over stdin so shell variables expand in the target bash (#5893).
[0.79.8] - 2026-06-19
Added
- Added
@earendil-works/pi-agent-core/basefor bundlers that want to pair the agent core with selective@earendil-works/pi-ai/baseprovider registration (#5348 by @FredKSchott).
[0.79.7] - 2026-06-18
[0.79.6] - 2026-06-16
[0.79.5] - 2026-06-16
[0.79.4] - 2026-06-15
[0.79.3] - 2026-06-13
[0.79.2] - 2026-06-12
Fixed
- Fixed late tool progress callbacks after tool settlement to be ignored instead of emitting stale
tool_execution_updateevents (#5573).
[0.79.1] - 2026-06-09
[0.79.0] - 2026-06-08
Fixed
- Fixed the compaction summarization system prompt to use neutral AI assistant wording for non-coding agents (#5401).
[0.78.1] - 2026-06-04
[0.78.0] - 2026-05-29
[0.77.0] - 2026-05-28
Breaking Changes
- Renamed agent harness
model_selectandthinking_level_selectevents tomodel_updateandthinking_level_update.
Added
- Added agent harness tool registry APIs,
tools_updateevents, branch-scoped active-tool persistence, and duplicate tool validation.
[0.76.0] - 2026-05-27
Fixed
- Fixed context token estimates to count user image attachments consistently with tool result images (#4983).
[0.75.5] - 2026-05-23
[0.75.4] - 2026-05-20
Changed
- Changed source syntax to avoid TypeScript constructs that require JavaScript emit, keeping the package compatible with Node.js strip-only TypeScript checks.
- Removed the package-level development watch script now that the root TypeScript check validates strip-only-compatible sources.
Fixed
- Fixed tool-call preflight to stop preparing sibling tool calls after the run is aborted (#4276).
- Fixed tail truncation for oversized single-line output that ends with a trailing newline (#4715).
- Fixed Windows Node execution environment command spawns to hide helper console windows from background processes (#4699).
[0.75.3] - 2026-05-18
[0.75.2] - 2026-05-18
[0.75.1] - 2026-05-18
[0.75.0] - 2026-05-17
Breaking Changes
- Raised the minimum supported Node.js version to 22.19.0.
[0.74.1] - 2026-05-16
[0.74.0] - 2026-05-07
[0.73.1] - 2026-05-07
[0.73.0] - 2026-05-04
[0.72.1] - 2026-05-02
Changed
- Changed the default agent transport to
autoso providers can use their best available transport by default (#4083).
[0.72.0] - 2026-05-01
Added
- Added
shouldStopAfterTurnto the low-level agent loop config for gracefully exiting after a completed turn before polling queued messages or starting another LLM call.
[0.71.1] - 2026-05-01
[0.71.0] - 2026-04-30
[0.70.6] - 2026-04-28
[0.70.5] - 2026-04-27
[0.70.4] - 2026-04-27
[0.70.3] - 2026-04-27
[0.70.2] - 2026-04-24
[0.70.1] - 2026-04-24
[0.70.0] - 2026-04-23
[0.69.0] - 2026-04-22
Breaking Changes
- Migrated public TypeBox-facing types and examples from
@sinclair/typebox0.34.x totypebox1.x. Install and import fromtypeboxinstead of relying on@sinclair/typeboxtransitively (#3112)
Added
- Added
terminate: truetool-result hints to skip the automatic follow-up LLM call when every finalized tool result in the current batch opts into early termination (#3525)
[0.68.1] - 2026-04-22
Fixed
- Fixed
streamProxy()to preserve the proxy-safe serializable subset of stream options, including session, transport, retry-delay, metadata, header, cache-retention, and thinking-budget settings (#3512) - Fixed parallel tool execution to emit
tool_execution_endas soon as each tool is finalized, while still emitting persisted tool-result messages in assistant source order (#3503)
[0.68.0] - 2026-04-20
Changed
- Clarified parallel tool execution ordering docs to specify that final tool lifecycle and tool-result artifacts are emitted in tool completion order.
[0.67.68] - 2026-04-17
[0.67.67] - 2026-04-17
Fixed
- Fixed parallel tool-call finalization to convert
afterToolCallhook throws into error tool results instead of aborting the batch (#3084)
[0.67.6] - 2026-04-16
[0.67.5] - 2026-04-16
[0.67.4] - 2026-04-16
[0.67.3] - 2026-04-15
[0.67.2] - 2026-04-14
[0.67.1] - 2026-04-13
[0.67.0] - 2026-04-13
[0.66.1] - 2026-04-08
[0.66.0] - 2026-04-08
[0.65.2] - 2026-04-06
[0.65.1] - 2026-04-05
[0.65.0] - 2026-04-03
Breaking Changes
AgentStatehas been reshaped:streamMessagewas renamed tostreamingMessageerrorwas renamed toerrorMessageisStreaming,streamingMessage,pendingToolCalls, anderrorMessageare now readonly in the public APIpendingToolCallsis now typed asReadonlySet<string>toolsandmessagesare now accessor properties, and assigning either field copies the provided top-level array instead of preserving array identity
AgentOptions.initialStateno longer accepts runtime-owned fields. RemoveisStreaming,streamingMessage,pendingToolCalls, anderrorMessagefrominitialStatevalues.- Removed
Agentmutator methods in favor of direct property access:agent.setSystemPrompt(value)->agent.state.systemPrompt = valueagent.setModel(model)->agent.state.model = modelagent.setThinkingLevel(level)->agent.state.thinkingLevel = levelagent.setTools(tools)->agent.state.tools = toolsagent.replaceMessages(messages)->agent.state.messages = messagesagent.appendMessage(message)->agent.state.messages.push(message)agent.clearMessages()->agent.state.messages = []agent.setToolExecution(mode)->agent.toolExecution = modeagent.setBeforeToolCall(fn)->agent.beforeToolCall = fnagent.setAfterToolCall(fn)->agent.afterToolCall = fnagent.setTransport(transport)->agent.transport = transport
- Removed queue mode getter/setter methods in favor of properties:
agent.setSteeringMode(mode)->agent.steeringMode = modeagent.getSteeringMode()->agent.steeringModeagent.setFollowUpMode(mode)->agent.followUpMode = modeagent.getFollowUpMode()->agent.followUpMode
Agent.subscribe()listeners are now awaited and receive the activeAbortSignal:agent.subscribe((event) => { ... })->agent.subscribe(async (event, signal) => { ... })agent_endis now the final emitted event for a run, but not the idle boundaryagent.waitForIdle(),agent.prompt(...), andagent.continue()now settle only after awaitedagent_endlisteners finishagent.state.isStreamingremainstrueuntil that settlement completes
[0.64.0] - 2026-03-29
Added
- Added
AgentTool.prepareArgumentshook to prepare raw tool call arguments before schema validation, enabling compatibility shims for resumed sessions with outdated tool schemas
[0.63.2] - 2026-03-29
Added
- Added
Agent.signalto expose the active abort signal for the current turn, allowing callers to forward cancellation into nested async work (#2660)
[0.63.1] - 2026-03-27
[0.63.0] - 2026-03-27
[0.62.0] - 2026-03-23
[0.61.1] - 2026-03-20
[0.61.0] - 2026-03-20
[0.60.0] - 2026-03-18
[0.59.0] - 2026-03-17
[0.58.4] - 2026-03-16
Fixed
- Fixed steering messages to wait until the current assistant message's tool-call batch fully finishes instead of skipping pending tool calls.
[0.58.3] - 2026-03-15
[0.58.2] - 2026-03-15
[0.58.1] - 2026-03-14
[0.58.0] - 2026-03-14
Added
- Added
beforeToolCallandafterToolCallhooks toAgentOptionsandAgentLoopConfigfor preflight blocking and post-execution tool result mutation.
Changed
- Added configurable tool execution mode to
AgentandagentLoopviatoolExecution: "parallel" | "sequential", withparallelas the default. Parallel mode preflights tool calls sequentially, executes allowed tools concurrently, and emits final tool results in assistant source order.
[0.57.1] - 2026-03-07
[0.57.0] - 2026-03-07
[0.56.3] - 2026-03-06
[0.56.2] - 2026-03-05
[0.56.1] - 2026-03-05
[0.56.0] - 2026-03-04
[0.55.4] - 2026-03-02
[0.55.3] - 2026-02-27
[0.55.2] - 2026-02-27
[0.55.1] - 2026-02-26
[0.55.0] - 2026-02-24
[0.54.2] - 2026-02-23
[0.54.1] - 2026-02-22
[0.54.0] - 2026-02-19
[0.53.1] - 2026-02-19
[0.53.0] - 2026-02-17
[0.52.12] - 2026-02-13
Added
- Added
transporttoAgentOptionsandAgentLoopConfigforwarding, allowing stream transport preference ("sse","websocket","auto") to flow into provider calls.
[0.52.11] - 2026-02-13
[0.52.10] - 2026-02-12
[0.52.9] - 2026-02-08
[0.52.8] - 2026-02-07
[0.52.7] - 2026-02-06
Fixed
- Fixed
continue()to resume queued steering/follow-up messages when context currently ends in an assistant message, and preserved one-at-a-time steering ordering during assistant-tail resumes (#1312 by @ferologics)
[0.52.6] - 2026-02-05
[0.52.5] - 2026-02-05
[0.52.4] - 2026-02-05
[0.52.3] - 2026-02-05
[0.52.2] - 2026-02-05
[0.52.1] - 2026-02-05
[0.52.0] - 2026-02-05
[0.51.6] - 2026-02-04
[0.51.5] - 2026-02-04
[0.51.4] - 2026-02-03
[0.51.3] - 2026-02-03
[0.51.2] - 2026-02-03
[0.51.1] - 2026-02-02
[0.51.0] - 2026-02-01
[0.50.9] - 2026-02-01
[0.50.8] - 2026-02-01
Added
- Added
maxRetryDelayMsoption toAgentOptionsto cap server-requested retry delays. Passed through to the underlying stream function. (#1123)
[0.50.7] - 2026-01-31
[0.50.6] - 2026-01-30
[0.50.5] - 2026-01-30
[0.50.3] - 2026-01-29
[0.50.2] - 2026-01-29
[0.50.1] - 2026-01-26
[0.50.0] - 2026-01-26
[0.49.3] - 2026-01-22
[0.49.2] - 2026-01-19
[0.49.1] - 2026-01-18
[0.49.0] - 2026-01-17
[0.48.0] - 2026-01-16
[0.47.0] - 2026-01-16
[0.46.0] - 2026-01-15
[0.45.7] - 2026-01-13
[0.45.6] - 2026-01-13
[0.45.5] - 2026-01-13
[0.45.4] - 2026-01-13
[0.45.3] - 2026-01-13
[0.45.2] - 2026-01-13
[0.45.1] - 2026-01-13
[0.45.0] - 2026-01-13
[0.44.0] - 2026-01-12
[0.43.0] - 2026-01-11
[0.42.5] - 2026-01-11
[0.42.4] - 2026-01-10
[0.42.3] - 2026-01-10
[0.42.2] - 2026-01-10
[0.42.1] - 2026-01-09
[0.42.0] - 2026-01-09
[0.41.0] - 2026-01-09
[0.40.1] - 2026-01-09
[0.40.0] - 2026-01-08
[0.39.1] - 2026-01-08
[0.39.0] - 2026-01-08
[0.38.0] - 2026-01-08
Added
thinkingBudgetsoption onAgentandAgentOptionsto customize token budgets per thinking level (#529 by @melihmucuk)
[0.37.8] - 2026-01-07
[0.37.7] - 2026-01-07
[0.37.6] - 2026-01-06
[0.37.5] - 2026-01-06
[0.37.4] - 2026-01-06
[0.37.3] - 2026-01-06
Added
sessionIdoption onAgentto forward session identifiers to LLM providers for session-based caching.
[0.37.2] - 2026-01-05
[0.37.1] - 2026-01-05
[0.37.0] - 2026-01-05
Fixed
minimalthinking level now maps tominimalreasoning effort instead of being treated aslow.
[0.36.0] - 2026-01-05
[0.35.0] - 2026-01-05
[0.34.2] - 2026-01-04
[0.34.1] - 2026-01-04
[0.34.0] - 2026-01-04
[0.33.0] - 2026-01-04
[0.32.3] - 2026-01-03
[0.32.2] - 2026-01-03
[0.32.1] - 2026-01-03
[0.32.0] - 2026-01-03
Breaking Changes
- Queue API replaced with steer/followUp: The
queueMessage()method has been split into two methods with different delivery semantics (#403):steer(msg): Interrupts the agent mid-run. Delivered after current tool execution, skips remaining tools.followUp(msg): Waits until the agent finishes. Delivered only when there are no more tool calls or steering messages.
- Queue mode renamed:
queueModeoption renamed tosteeringMode. Added newfollowUpModeoption. Both control whether messages are delivered one-at-a-time or all at once. - AgentLoopConfig callbacks renamed:
getQueuedMessagessplit intogetSteeringMessagesandgetFollowUpMessages. - Agent methods renamed:
queueMessage()→steer()andfollowUp()clearMessageQueue()→clearSteeringQueue(),clearFollowUpQueue(),clearAllQueues()setQueueMode()/getQueueMode()→setSteeringMode()/getSteeringMode()andsetFollowUpMode()/getFollowUpMode()
Fixed
prompt()andcontinue()now throw if called while the agent is already streaming, preventing race conditions and corrupted state. Usesteer()orfollowUp()to queue messages during streaming, orawaitthe previous call.
[0.31.1] - 2026-01-02
[0.31.0] - 2026-01-02
Breaking Changes
-
Transport abstraction removed:
ProviderTransport,AppTransport, andAgentTransportinterface have been removed. Use thestreamFnoption directly for custom streaming implementations. -
Agent options renamed:
transport→ removed (usestreamFninstead)messageTransformer→convertToLlmpreprocessor→transformContext
-
AppMessagerenamed toAgentMessage: All references toAppMessagehave been renamed toAgentMessagefor consistency. -
CustomMessagesrenamed toCustomAgentMessages: The declaration merging interface has been renamed. -
UserMessageWithAttachmentsandAttachmenttypes removed: Attachment handling is now the responsibility of theconvertToLlmfunction. -
Agent loop moved from
@mariozechner/pi-ai: TheagentLoop,agentLoopContinue, and related types have moved to this package. Import from@mariozechner/pi-agent-coreinstead.
Added
-
streamFnoption onAgentfor custom stream implementations. Default usesstreamSimplefrom pi-ai. -
streamProxy()utility function for browser apps that need to proxy LLM calls through a backend server. Replaces the removedAppTransport. -
getApiKeyoption for dynamic API key resolution (useful for expiring OAuth tokens like GitHub Copilot). -
agentLoop()andagentLoopContinue()low-level functions for running the agent loop without theAgentclass wrapper. -
New exported types:
AgentLoopConfig,AgentContext,AgentTool,AgentToolResult,AgentToolUpdateCallback,StreamFn.
Changed
-
Agentconstructor now has all options optional (empty options use defaults). -
queueMessage()is now synchronous (no longer returns a Promise).