Skip to content

Releases: danny-avila/agents

v3.1.72

Choose a tag to compare

@danny-avila danny-avila released this 26 Apr 20:39
2ebfab3

What's Changed

Full Changelog: v3.1.71...v3.1.72

v3.1.71

Choose a tag to compare

@danny-avila danny-avila released this 26 Apr 05:51
644ec2d

What's Changed

  • fix: tolerate trailing tool_use without a thinking block by @danny-avila in #116
  • 🪢 feat: Reference Previous Tool Outputs in Subsequent Calls by @danny-avila in #114
  • refactor: lazy-annotate tool output refs at LLM request time by @danny-avila in #117

Full Changelog: v3.1.70...v3.1.71

v3.1.70

Choose a tag to compare

@danny-avila danny-avila released this 23 Apr 17:23
7df6ad1

What's Changed

  • 🗝️ feat: Make CODE_API_KEY optional for sandbox tools by @danny-avila in #113
  • feat: agent skills, subagents, & hooks initial support by @danny-avila in #98

Full Changelog: v3.1.68...v3.1.70

v3.1.68

Choose a tag to compare

@danny-avila danny-avila released this 21 Apr 13:43
b749483

What's Changed

  • 🔊 fix: warn when summarization.trigger.type is unrecognized by @danny-avila in #108
  • 🔊 fix: surface provider, model, and status in summarization error logs by @danny-avila in #109
  • 🛡️ fix: validate edge agent refs early in MultiAgentGraph by @danny-avila in #111
  • fix(summarization): log and recover from model init errors by @danny-avila in #112

Full Changelog: v3.1.67...v3.1.68

v3.1.67

Choose a tag to compare

@danny-avila danny-avila released this 17 Apr 02:27
1c7fccd

What's Changed

  • 🧠 chore: Widen AnthropicClientOptions Thinking for Opus 4.7 Display by @danny-avila in #106

Full Changelog: v3.1.66...v3.1.67

v3.1.66

Choose a tag to compare

@danny-avila danny-avila released this 17 Apr 02:16
b64a649

What's Changed

  • 🔍 fix: exclude deferred tools from instruction token accounting by @danny-avila in #105

Full Changelog: v3.1.65...v3.1.66

v3.1.65

Choose a tag to compare

@danny-avila danny-avila released this 13 Apr 19:29
689f9a1

What's Changed

Full Changelog: v3.1.64...v3.1.65

v3.1.64

Choose a tag to compare

@danny-avila danny-avila released this 09 Apr 23:17
c564fec

What's Changed

Full Changelog: v3.1.63...v3.1.64

v3.1.63

Choose a tag to compare

@danny-avila danny-avila released this 31 Mar 18:15
4188d9c

What's Changed

  • 🪗 feat: Staged Context Compaction Pipeline with LLM Summarization by @danny-avila in #72
  • 🤖 feat: add agentName to Langfuse trace metadata by @dustinhealy in #80
  • 📦 chore: bump dependabot packages by @danny-avila in #81
  • 📦 chore: pin exact axios version @1.13.6, bump agents SDK by @danny-avila in #82

Full Changelog: v3.1.56...v3.1.63

v3.1.56

Choose a tag to compare

@danny-avila danny-avila released this 16 Mar 03:32

What's Changed

Fix: ensureThinkingBlockInMessages now scoped to trailing sequence only (#75)

Before: The function iterated all messages from index 0, converting every AI→Tool sequence that lacked a thinking block into a HumanMessage — including already-accepted history from prior turns. This corrupted prompt caching and added unnecessary token overhead on every multi-turn request.

After: The function finds the last HumanMessage in the array, preserves everything before it untouched, and only validates/converts the trailing AI→Tool sequence that will actually be sent to the provider. Earlier history is never re-examined.


Fix: Image blocks preserved in ensureThinkingBlockInMessages — prevents 174× token amplification (#71)

Before: When converting AI→Tool sequences to a buffer string for thinking-block compatibility, base64-encoded image content was serialized as plain text. A single modest image could inflate token counts by 174× or more.

After: Introduced buildToolSequenceContent / appendMessageContent / flushTextChunks helpers that walk the message content array and route each block type correctly: image blocks (image_url, image) are shallow-copied into the structured content array as-is, tool_use blocks are serialized as text annotations, and tool_calls metadata is only appended when the content array contains no tool_use blocks (preventing double serialization). Binary image data never becomes text tokens.

A chainHasThinkingBlock helper was also added to detect Bedrock-style multi-turn reasoning chains where follow-up AI messages emit content: "" with tool_calls only — these are correctly identified as continuations of a thinking-enabled turn and are not converted.


Feat: auth and expires_at fields on ToolCall structures (#74)

ToolCallDelta, ToolCallPart, and PartMetadata now carry optional auth?: string and expires_at?: number fields. createContentAggregator propagates these fields through ON_RUN_STEP_DELTA events and merges them into the final ToolCallContent part during aggregation. This enables downstream consumers to surface authentication URLs and expiration timestamps for tool calls that require user interaction (e.g., OAuth flows).


Refactor: Replace js-tiktoken with ai-tokenizer (#69)

js-tiktoken (a WASM-backed port) has been replaced with the lighter ai-tokenizer package. Key changes:

  • getTokenizer() now uses dynamic import() for encoding data (o200k_base or claude), so encoding tables are only loaded when needed.
  • createTokenCounter is now async and awaits tokenizer initialization.
  • A TokenEncoderManager.reset() method clears cached tokenizer instances for memory management.
  • encodingForModel() selects claude encoding for Claude model names, o200k_base otherwise.
  • All legacy Tiktoken implementation code removed.

CI: ESLint and TypeScript type-checking added to workflows

ESLint is now run against src/**/*.ts in both the PR (ci.yml) and publish (publish.yml) workflows. The publish workflow additionally runs tsc --noEmit before building, ensuring type errors cannot reach a published package.


Chore: npm audit fix

Resolved flagged dependency vulnerabilities in package-lock.json with no API surface changes.


Full Changelog: v3.1.55...v3.1.56