Skip to content

v0.24.0

Choose a tag to compare

@kid7st kid7st released this 03 Oct 11:45
e2e5ba6

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

  1. Deferred tools (#679): replace defineTool({ deferred: true }) with exposure: "deferred". The model now finds such tools through pi's tool_search; the built-in search_tools is gone.
  2. Model listings (#689): availableModelsFromDir and capabilities().allowedModels return ModelDescriptor[]. Read the spec from .spec.
  3. MCP (#679): pi's MCP extension is not loaded, so mcp.json has no effect on an agent (#678).

Breaking

Tools

  • defineTool({ deferred }), the built-in search_tools tool, and fastagent:tool-activation session entries are removed; existing entries are no longer read (#679).
  • deferredToolNames on the opened assembly and deferredTools in info --json are replaced by indirectTools, 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 defineTool whose input fails validation returns isError: true (#679).
  • MountedTool.execute's optional context is pi's ExtensionToolContext (#683).

API

  • FastagentTool is based on MountedTool; AgentModels gains createRuntime and extensionPaths; PiAgentSessionFactoryOptions.engine is called per binding and returns only { modelRuntime }, and modelSpec is required (#679).
  • RunControls.steer/followUp return Promise<PromptDisposition> (#683).

Session control

  • tool_* session events gain parentToolCallId; partialResult/content no longer include structuredContent (#679).
  • update() on a session id with no record creates the record instead of answering no_such_session; state() of such an id reports the model, thinkingLevel and availableThinkingLevels its first turn would run on (#689).
  • availableModelsFromDir and SessionCapabilities.allowedModels return ModelDescriptor { spec, name?, thinkingLevels, contextWindow? }[] (#689).

New

  • pi 0.99.2 (#679, #683): defineTool takes pi's exposure (direct, model-only, codemode, deferred, hidden), defaultActive, a Zod output schema, annotations, and namespace. pi's codemode and tool-search built-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.executeTool runs 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), and fastagent invoke prints it to stderr. A running bash call's last printed line is visible to everyone in the conversation; see docs/channels.md.
  • Steer/follow-up disposition (#683): accepted steer/followUp results carry disposition: "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): assistant entries and message_finished carry outcome: { status: "failed" | "aborted" | "truncated", error? } when an answer did not end normally.
  • refreshMachineModelCatalog(options?) (#692): refreshes ~/.fastagent/models-store.json with 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.json whole, so a concurrent read no longer fails with model 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=dev reports brace-expansion@5.0.9, pinned by pi's npm-shrinkwrap.json; it needs an upstream pi release.

Full list: v0.23.0...v0.24.0