Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions site/src/content/changelog/harness/python-v1.50.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
sdk: harness
language: python
version: "1.50.0"
tag: python/v1.50.0
date: 2026-07-24
releaseUrl: https://github.com/strands-agents/harness-sdk/releases/tag/python/v1.50.0
packageUrl: https://pypi.org/project/strands-agents/1.50.0/
entries:
- { type: chore, breaking: false, scope: null, areas: [mcp, community], title: "merge strands-agents/mcp-server into monorepo", pr: 3300, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3300", commit: "7acaca8", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/7acaca8", author: zastrowm }
- { type: fix, breaking: false, scope: ci, areas: [community], title: "make the release pip-audit step actually run", pr: 3335, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3335", commit: "54124de", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/54124de", author: pgrayy }
- { type: docs, breaking: false, scope: site, areas: [], title: "replace duplicated examples guide with reference pointer", pr: 3288, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3288", commit: "41f9f59", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/41f9f59", author: yonib05 }
- { type: other, breaking: false, scope: typescript, areas: [community], title: "bump brace-expansion from 5.0.6 to 5.0.7", pr: 3370, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3370", commit: "1b5fddb", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/1b5fddb", author: "dependabot[bot]" }
- { type: refactor, breaking: false, scope: memory, areas: [], title: "refactor TestMemoryStore to use the unified storage interface", pr: 3260, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3260", commit: "41ccf5e", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/41ccf5e", author: opieter-aws }
- { type: feat, breaking: false, scope: middleware, areas: [hooks, tool], title: "add ExecuteToolStage with middleware-initiated interrupts", pr: 3233, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3233", commit: "50d76c3", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/50d76c3", author: zastrowm }
- { type: other, breaking: false, scope: typescript, areas: [community], title: "bump body-parser from 2.2.2 to 2.3.0", pr: 3387, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3387", commit: "8685e1a", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/8685e1a", author: "dependabot[bot]" }
- { type: fix, breaking: false, scope: openai, areas: [devx, model], title: "replay assistant text history as valid string-content input in Responses adapters", pr: 3399, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3399", commit: "6d1eda9", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/6d1eda9", author: agent-of-mkmeral }
- { type: other, breaking: false, scope: null, areas: [community], title: "bump actions/setup-python from 6 to 7", pr: 3352, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3352", commit: "c6e8b96", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/c6e8b96", author: "dependabot[bot]" }
- { type: feat, breaking: false, scope: py, areas: [devx, agent], title: "configurable retry exceptions (#1597)", pr: 3340, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3340", commit: "50d388e", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/50d388e", author: crazybolillo }
- { type: fix, breaking: false, scope: graph, areas: [multiagent], title: "keep fan-in node out of resume while a parallel sibling is in-flight", pr: 3390, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3390", commit: "b0ff5ef", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/b0ff5ef", author: opieter-aws }
- { type: other, breaking: false, scope: null, areas: [community], title: "bump astral-sh/setup-uv from 8.3.0 to 9.0.0", pr: 3407, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3407", commit: "ba297cf", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/ba297cf", author: "dependabot[bot]" }
- { type: feat, breaking: false, scope: bidi, areas: [bidirectional-streaming], title: "propose bidi webrtc design", pr: 3386, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3386", commit: "b7529d2", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/b7529d2", author: mehtarac }
- { type: other, breaking: false, scope: null, areas: [community], title: "bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1", pr: 3406, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3406", commit: "7b0717c", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/7b0717c", author: "dependabot[bot]" }
- { type: fix, breaking: false, scope: null, areas: [persistence], title: "reject keys for s3 storage if not configured", pr: 3411, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3411", commit: "33f5f74", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/33f5f74", author: opieter-aws }
- { type: fix, breaking: false, scope: null, areas: [community], title: "verify aws region", pr: 3412, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3412", commit: "81bccd8", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/81bccd8", author: opieter-aws }
- { type: feat, breaking: false, scope: vended-tools, areas: [tool], title: "add http_request to strands-py", pr: 3395, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3395", commit: "18484f2", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/18484f2", author: chaynabors }
- { type: fix, breaking: false, scope: models/llamacpp, areas: [model], title: "send llama.cpp sampler params at the top level, not under extra_body", pr: 3423, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3423", commit: "9c077c4", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/9c077c4", author: ebarkhordar }
- { type: feat, breaking: false, scope: vended-tools, areas: [tool, agent], title: "add stop tool", pr: 3397, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3397", commit: "767b801", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/767b801", author: chaynabors }
- { type: fix, breaking: false, scope: multiagent, areas: [context, multiagent], title: "preserve shared context and cumulative accounting across serialize/deserialize", pr: 3396, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3396", commit: "ba37a27", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/ba37a27", author: opieter-aws }
- { type: feat, breaking: false, scope: vended-tools, areas: [tool], title: "add sleep tool", pr: 3393, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3393", commit: "d9f9314", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/d9f9314", author: chaynabors }
- { type: fix, breaking: false, scope: python, areas: [model], title: "surface Responses stream failures", pr: 3427, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3427", commit: "e03f864", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/e03f864", author: strandly-the-agent }
---
29 changes: 29 additions & 0 deletions site/src/content/changelog/harness/typescript-v1.11.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
sdk: harness
language: typescript
version: "1.11.0"
tag: typescript/v1.11.0
date: 2026-07-24
releaseUrl: https://github.com/strands-agents/harness-sdk/releases/tag/typescript/v1.11.0
packageUrl: https://www.npmjs.com/package/@strands-agents/sdk/v/1.11.0
entries:
- { type: chore, breaking: false, scope: null, areas: [mcp, community], title: "merge strands-agents/mcp-server into monorepo", pr: 3300, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3300", commit: "7acaca8", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/7acaca8", author: zastrowm }
- { type: fix, breaking: false, scope: ci, areas: [community], title: "make the release pip-audit step actually run", pr: 3335, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3335", commit: "54124de", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/54124de", author: pgrayy }
- { type: refactor, breaking: false, scope: ts, areas: [devx], title: "extract shared registerNodeDefaults() to prevent src/test drift", pr: 3303, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3303", commit: "961b1b6", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/961b1b6", author: gautamsirdeshmukh }
- { type: fix, breaking: false, scope: vercel, areas: [model], title: "detect tool use from streamed content when finish_reason is non-tool", pr: 3206, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3206", commit: "d2fc508", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/d2fc508", author: maxmilian }
- { type: docs, breaking: false, scope: site, areas: [], title: "replace duplicated examples guide with reference pointer", pr: 3288, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3288", commit: "41f9f59", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/41f9f59", author: yonib05 }
- { type: fix, breaking: false, scope: openai, areas: [model], title: "surface Responses stream failures", pr: 3290, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3290", commit: "3c234b2", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/3c234b2", author: didhd }
- { type: other, breaking: false, scope: typescript, areas: [community], title: "bump brace-expansion from 5.0.6 to 5.0.7", pr: 3370, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3370", commit: "1b5fddb", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/1b5fddb", author: "dependabot[bot]" }
- { type: refactor, breaking: false, scope: memory, areas: [], title: "refactor TestMemoryStore to use the unified storage interface", pr: 3260, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3260", commit: "41ccf5e", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/41ccf5e", author: opieter-aws }
- { type: feat, breaking: false, scope: ts, areas: [language, tool], title: "add ToolExecutor class hierarchy", pr: 3268, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3268", commit: "a3f54c8", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/a3f54c8", author: gautamsirdeshmukh }
- { type: other, breaking: false, scope: typescript, areas: [community], title: "bump body-parser from 2.2.2 to 2.3.0", pr: 3387, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3387", commit: "8685e1a", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/8685e1a", author: "dependabot[bot]" }
- { type: fix, breaking: false, scope: openai, areas: [devx, model], title: "replay assistant text history as valid string-content input in Responses adapters", pr: 3399, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3399", commit: "6d1eda9", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/6d1eda9", author: agent-of-mkmeral }
- { type: other, breaking: false, scope: null, areas: [community], title: "bump actions/setup-python from 6 to 7", pr: 3352, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3352", commit: "c6e8b96", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/c6e8b96", author: "dependabot[bot]" }
- { type: other, breaking: false, scope: null, areas: [community], title: "bump astral-sh/setup-uv from 8.3.0 to 9.0.0", pr: 3407, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3407", commit: "ba297cf", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/ba297cf", author: "dependabot[bot]" }
- { type: feat, breaking: false, scope: bidi, areas: [bidirectional-streaming], title: "propose bidi webrtc design", pr: 3386, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3386", commit: "b7529d2", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/b7529d2", author: mehtarac }
- { type: other, breaking: false, scope: null, areas: [community], title: "bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1", pr: 3406, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3406", commit: "7b0717c", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/7b0717c", author: "dependabot[bot]" }
- { type: fix, breaking: false, scope: null, areas: [persistence], title: "reject keys for s3 storage if not configured", pr: 3411, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3411", commit: "33f5f74", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/33f5f74", author: opieter-aws }
- { type: fix, breaking: false, scope: null, areas: [community], title: "verify aws region", pr: 3412, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3412", commit: "81bccd8", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/81bccd8", author: opieter-aws }
- { type: feat, breaking: false, scope: vended-tools, areas: [tool, agent], title: "add stop tool", pr: 3397, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3397", commit: "767b801", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/767b801", author: chaynabors }
- { type: feat, breaking: false, scope: vended-tools, areas: [tool], title: "add sleep tool", pr: 3393, prUrl: "https://github.com/strands-agents/harness-sdk/pull/3393", commit: "d9f9314", commitUrl: "https://github.com/strands-agents/harness-sdk/commit/d9f9314", author: chaynabors }
---
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,5 @@ import { makeSleep } from '@strands-agents/sdk/vended-tools/sleep'

// --8<-- [start:stop_import]
import { Agent } from '@strands-agents/sdk'
import { stop } from '@strands-agents/sdk/vended-tools/stop'
import { stop } from '@strands-agents/sdk/experimental/vended-tools/stop'
// --8<-- [end:stop_import]
15 changes: 9 additions & 6 deletions site/src/content/docs/user-guide/concepts/tools/vended-tools.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ sourceLinks:
- path: strands-ts/src/vended-tools/http-request/http-request.ts
- path: strands-ts/src/vended-tools/notebook/notebook.ts
- path: strands-ts/src/vended-tools/sleep/sleep.ts
- path: strands-ts/src/vended-tools/stop/stop.ts
- path: strands-ts/src/experimental/vended-tools/stop/stop.ts
- path: strands-py/src/strands/vended_tools/http_request/http_request.py
- path: strands-py/src/strands/vended_tools/sleep/sleep.py
- path: strands-py/src/strands/vended_tools/stop/stop.py
- path: strands-py/src/strands/experimental/tools/stop/stop.py
---

Vended tools are pre-built tools included directly in the Strands SDK for common agent tasks like file operations, shell commands, HTTP requests, and persistent notes.
Expand All @@ -40,7 +40,7 @@ Each tool is imported from its own subpath under `@strands-agents/sdk/vended-too
| [Notebook](#notebook) | Manage persistent text notebooks | TypeScript (Node.js, browsers) |
| [Bash](#bash) | Execute shell commands with persistent sessions | Python, TypeScript (Node.js, Unix/Linux/macOS) |
| [Sleep](#sleep) | Pause execution for a bounded, cancellable duration | Python, TypeScript (Node.js, browsers) |
| [Stop](#stop) | Gracefully end the agent loop when the task is complete | Python, TypeScript (Node.js, browsers) |
| [Stop](#stop-experimental) | Gracefully end the agent loop when the task is complete | Python, TypeScript (Node.js, browsers) |

### File Editor

Expand Down Expand Up @@ -269,7 +269,10 @@ agent = Agent(tools=[short_sleep])

---

### Stop
### Stop (Experimental)

> This tool is experimental and subject to change in future
> revisions without notice.

Lets the model gracefully end the agent loop with an optional final message. The default loop already terminates when the model returns without any tool call; the stop tool is useful when you want an explicit "I am done" affordance, when a workflow enforces that termination is a deliberate model decision, or when a sub-agent needs to signal completion back to a coordinator via the loop's last assistant message.

Expand All @@ -295,7 +298,7 @@ The two SDKs shim onto different loop-termination primitives, which produces a s

```python
from strands import Agent
from strands.vended_tools import stop
from strands.experimental.tools import stop

agent = Agent(
tools=[stop],
Expand All @@ -307,7 +310,7 @@ result = agent("Summarize the changes in ./CHANGELOG.md")
</Tab>
</Tabs>

📖 [Full API Reference](https://github.com/strands-agents/harness-sdk/blob/main/strands-ts/src/vended-tools/stop/README.md)
📖 [Full API Reference](https://github.com/strands-agents/harness-sdk/blob/main/strands-ts/src/experimental/vended-tools/stop/README.md)

---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { notebook } from '@strands-agents/sdk/vended-tools/notebook'
// --8<-- [end:basic_import]
import { SessionManager, FileStorage } from '@strands-agents/sdk'
import { sleep, makeSleep } from '@strands-agents/sdk/vended-tools/sleep'
import { stop } from '@strands-agents/sdk/vended-tools/stop'
import { stop } from '@strands-agents/sdk/experimental/vended-tools/stop'

// Agent with vended tools example
async function agentWithVendedToolsExample() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import logging
from dataclasses import replace
from typing import TYPE_CHECKING, Literal
from typing import Literal

from ...._middleware.stages import InvokeModelContext
from ...._middleware.types import MiddlewareInputHandler
Expand All @@ -26,9 +26,6 @@
from ....types.exceptions import ContextWindowOverflowException
from ....types.tools import ToolContext

if TYPE_CHECKING:
from ....models.model import Model

logger = logging.getLogger(__name__)

# Default number of recent messages to preserve verbatim during summarization or truncation.
Expand Down Expand Up @@ -286,15 +283,13 @@ def _matches_pin_filter(message: Message, filter: Literal["user", "assistant", "
return True # type: ignore[unreachable]


def create_token_usage_middleware(model: "Model") -> MiddlewareInputHandler:
def create_token_usage_middleware() -> MiddlewareInputHandler:
"""Create middleware that appends a ``<context-status>`` block to the last message.

The block reports projected input-token usage against the model's context window limit so the
model can decide when to compress. The original messages are not mutated; the last message is
copied and the status text appended to the copy.

Args:
model: The model whose context window limit is reported.
The block reports projected input-token usage against the context window limit of the
model that will actually handle the call (``context.model``), so guidance stays correct
even when middleware has redirected the call to a different model. The original messages
are not mutated; the last message is copied and the status text appended to the copy.

Returns:
An async ``MiddlewareInputHandler`` for the ``InvokeModelStage.Input`` phase.
Expand All @@ -305,7 +300,7 @@ async def middleware(context: InvokeModelContext) -> InvokeModelContext:
if projected_input_tokens is None:
return context

context_window_limit = model.context_window_limit or DEFAULT_CONTEXT_WINDOW_LIMIT
context_window_limit = context.model.context_window_limit or DEFAULT_CONTEXT_WINDOW_LIMIT
remaining = max(0, context_window_limit - projected_input_tokens)
percent_used = (projected_input_tokens / context_window_limit) * 100

Expand Down
Loading
Loading