Repository navigation
v0.24.0
fastagent now runs on pi 0.99: authored tools use pi's native exposure, codemode and tool_search, and a running tool reports its status line on the invoke stream and in chat previews. The session control plane can set a new conversation's model and thinking level before its first turn, describes the models a picker offers, and says how each answer ended.
Upgrading from 0.23
- Deferred tools (#679): replace
defineTool({ deferred: true })withexposure: "deferred". The model now finds such tools through pi'stool_search; the built-insearch_toolsis gone. - Model listings (#689):
availableModelsFromDirandcapabilities().allowedModelsreturnModelDescriptor[]. Read the spec from.spec. - MCP (#679): pi's MCP extension is not loaded, so
mcp.jsonhas no effect on an agent (#678).
Breaking
Tools
defineTool({ deferred }), the built-insearch_toolstool, andfastagent:tool-activationsession entries are removed; existing entries are no longer read (#679).deferredToolNameson the opened assembly anddeferredToolsininfo --jsonare replaced byindirectTools, which lists every mounted tool the model is not given up front and how it is reached (tool_search,codemode,hidden,inactive,unreachable) (#679).- A
defineToolwhoseinputfails validation returnsisError: true(#679). MountedTool.execute's optional context is pi'sExtensionToolContext(#683).
API
FastagentToolis based onMountedTool;AgentModelsgainscreateRuntimeandextensionPaths;PiAgentSessionFactoryOptions.engineis called per binding and returns only{ modelRuntime }, andmodelSpecis required (#679).RunControls.steer/followUpreturnPromise<PromptDisposition>(#683).
Session control
tool_*session events gainparentToolCallId;partialResult/contentno longer includestructuredContent(#679).update()on a session id with no record creates the record instead of answeringno_such_session;state()of such an id reports themodel,thinkingLevelandavailableThinkingLevelsits first turn would run on (#689).availableModelsFromDirandSessionCapabilities.allowedModelsreturnModelDescriptor { spec, name?, thinkingLevels, contextWindow? }[](#689).
New
- pi 0.99.2 (#679, #683):
defineTooltakes pi'sexposure(direct,model-only,codemode,deferred,hidden),defaultActive, a Zodoutputschema,annotations, andnamespace. pi'scodemodeandtool-searchbuilt-ins load for every definition and are activated by the tools that need them. Each session builds its own model runtime, so serving accepts extension providers and virtual models. - Tool orchestration (#683):
ToolContext.executeToolruns another tool through pi, keeping validation, hooks and cancellation;ToolContext.onUpdate(partial)reports progress. tool_progress(#685): a new advisory SPEC event carrying a running tool's current status line. Telegram, Feishu/Lark and Slack classic previews show it (🔧 Bash npm test … › 42 passed), andfastagent invokeprints it to stderr. A runningbashcall's last printed line is visible to everyone in the conversation; seedocs/channels.md.- Steer/follow-up disposition (#683): accepted
steer/followUpresults carrydisposition: "queued" | "handled". - New session settings (#689):
update({ model, thinkingLevel, name })works before a session's first turn, and that turn runs on them. - Answer outcome (#695):
assistantentries andmessage_finishedcarryoutcome: { status: "failed" | "aborted" | "truncated", error? }when an answer did not end normally. refreshMachineModelCatalog(options?)(#692): refreshes~/.fastagent/models-store.jsonwith the caller's credentials (authPath/credentialStore).- Sign in with ChatGPT gets its installation ID from
LoginRequest.getDeviceId(#679). Extension load warnings are logged (#683).
Fixes
- An
abort()accepted before the run's first model request now stops that request and any later run or compaction in the same invoke (#694). - A model catalog refresh replaces
models-store.jsonwhole, so a concurrent read no longer fails withmodel catalog … is not valid JSON; an empty catalog file reads as empty (#693). - Anthropic tools with integer bounds no longer fail every turn on catalogs that mark strict tool support (pi 0.99.2, #683).
- Chat excludes the same unmounted pi built-ins as serving, and keeps the user's TUI theme across
/new,/resume,/fork(#679).
Known limitations
npm audit --omit=devreportsbrace-expansion@5.0.9, pinned by pi'snpm-shrinkwrap.json; it needs an upstream pi release.
Full list: v0.23.0...v0.24.0