leonard_agent 0.1.3
leonard_agent: ^0.1.3 copied to clipboard
Web-compatible harness library.
Changelog #
0.1.3 #
HandshakeResultgains acapabilitiesfield: host-level features that are reachable but are NOT namespaced tools (so they never appear underextensions) — notablyscreenshot. The handshake parse reads the newcapabilitiesarray and is tolerant of its absence (older bindings parse to an empty list). Lets a driver listscreenshotwhere agents look instead of concluding "no such capability" from the tool manifest alone.
0.1.2 #
- Adopt dartantic as the model-backend seam: a single
DartanticModelProviderdrives any backend — swift-infer via lenny's customChatModel, Anthropic and OpenAI via stock dartantic models. The hand-rolled per-provider classes are removed; the loop keeps retry ownership and theSchemaRejectioncontract. - Anthropic backend defaults are now compatible with extended thinking: a
non-forcing
tool_choice(auto) and no temperature override. Anthropic rejects a forcingtool_choiceor any non-1temperature while thinking is enabled, so the previous defaults returned request-time400s when driving Claude. Thinking stays on; the driver's retry covers a rare prose-only turn. - Fix (Anthropic): per-turn observation context is no longer dropped. The
dartantic Anthropic mapper serializes only the
tool_resultblock of a tool-bearing user message and discards sibling text parts, so from turn 1 on the model never saw the observation — it was driven blind after the first turn (the swift-infer path is unaffected; its mapper keeps the text). The Anthropic backend now folds the observation + diff into thetool_resultbody so the model sees the live screen every turn. - Observation: expose scroll extent on scrollable nodes.
0.1.1 #
- Fix: bound runaway model output. The swift-infer provider now aborts a
response once it streams a large amount of reasoning text with no tool
call in sight, surfacing a retryable
SchemaRejectioninstead of letting weaker models ruminate all the way tomax_tokens— the "endless stream, no tool call" failure. The loop retries with a fresh sample.
0.1.0 #
Initial release.