Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
d1419b7
fix: Keep working-state reporting alive through provider turns
AlexanderZ-Band Oct 18, 2026
8ec26b3
fix: Preserve standalone worker binding across tool wrappers
AlexanderZ-Band Oct 18, 2026
1476457
test: Avoid the E2E peer fixture reservation in runtime tests
AlexanderZ-Band Oct 18, 2026
8bfeac0
style: Format the renamed activity platform fixture
AlexanderZ-Band Oct 18, 2026
a397d8c
test: Use real time for randomized scheduler grace controls
AlexanderZ-Band Oct 18, 2026
0342d96
feat: Deliver compatible activity detail through the working-state re…
AlexanderZ-Band Oct 18, 2026
d76f571
style: Format detail ownership fixture parameters
AlexanderZ-Band Oct 18, 2026
1842638
test: Avoid reserved peer fixtures in activity wire tests
AlexanderZ-Band Oct 18, 2026
06d8124
test: Preserve backlog ordering across valid recovery retries
AlexanderZ-Band Oct 18, 2026
2d69703
feat: Map provider and Band tool progress to room activity
AlexanderZ-Band Oct 18, 2026
64de362
test: Validate activity producers through real execution boundaries
AlexanderZ-Band Oct 18, 2026
831b851
refactor: Consolidate activity reset and streaming usage ownership
AlexanderZ-Band Oct 18, 2026
9d7fc64
test: Register live activity cells and disambiguate runtime fixtures
AlexanderZ-Band Oct 18, 2026
eb7326e
fix: Fence housekeeping activity and clean up cancelled tool starts
AlexanderZ-Band Oct 18, 2026
a674b67
refactor: Share activity observation records and assertions
AlexanderZ-Band Oct 18, 2026
1249060
Merge remote-tracking branch 'origin/main' into feat/python-sdk-repor…
AlexanderZ-Band Oct 20, 2026
1ff4c54
Merge remote-tracking branch 'origin/feat/python-sdk-report-activity-…
AlexanderZ-Band Oct 20, 2026
c139bc2
Merge remote-tracking branch 'origin/feat/python-sdk-report-activity-…
AlexanderZ-Band Oct 20, 2026
2d8c903
test: give the Strands/NOOA job coverage guard a longer timeout
AlexanderZ-Band Oct 20, 2026
f2ff776
Merge remote-tracking branch 'origin/main' into feat/python-sdk-repor…
AlexanderZ-Band Oct 20, 2026
2f4082e
Merge remote-tracking branch 'origin/feat/python-sdk-report-activity-…
AlexanderZ-Band Oct 20, 2026
36ba9a1
Merge remote-tracking branch 'origin/feat/python-sdk-report-activity-…
AlexanderZ-Band Oct 20, 2026
3d52a13
feat: gate activity tool names on the tool-call emit choice
bandzalkin Oct 20, 2026
c211c32
fix(omp): use native RPC lifecycle and migrated permission coverage
bandzalkin Oct 15, 2026
38a110e
refactor(omp): separate room cleanup enumeration from aggregation
bandzalkin Oct 19, 2026
7e195f8
feat(omp): resolve ambient servers at owned connection startup
bandzalkin Oct 15, 2026
57941da
test(omp): retain room custody after resource close failure
bandzalkin Oct 19, 2026
05fe894
fix(omp): preserve resource custody across composed native cleanup
bandzalkin Oct 19, 2026
a6b1f02
test(omp): scope cleanup proof to native process custody
bandzalkin Oct 19, 2026
650f8d7
Merge remote-tracking branch 'origin/main' into feat/python-sdk-repor…
AlexanderZ-Band Oct 20, 2026
6a62878
refactor: Flatten the activity compatibility retry
AlexanderZ-Band Oct 20, 2026
4a04046
fix: Learn activity detail support from response headers
AlexanderZ-Band Oct 20, 2026
eac1fdd
fix: Forward activity detail through the baseline ControlLink
AlexanderZ-Band Oct 20, 2026
9a1430b
refactor: Keep one detail reset and one ownership recheck in the repo…
AlexanderZ-Band Oct 20, 2026
435ae73
test: Scope the recovery-jitter patch to resync's random reference
AlexanderZ-Band Oct 20, 2026
90bc52a
fix: Log a content-free cause when activity detail is downgraded
AlexanderZ-Band Oct 20, 2026
3c665de
refactor: Drop the unreachable cycle token and pin reporter guards
AlexanderZ-Band Oct 20, 2026
2c4a9f7
test: Share one activity-support isolation helper
AlexanderZ-Band Oct 20, 2026
cd3c6aa
sim840
Oct 20, 2026
11420ba
Merge upstream main (815 settlement details, 839 squash, websocket te…
bandzalkin Oct 20, 2026
f7c6416
Merge #841 head carrying upstream main (activity stack re-merge)
Oct 20, 2026
5992fb6
Merge #874 (activity stack on current main) so the omp_acp.py removal…
bandzalkin Oct 20, 2026
a576044
Merge #763 restacked on the activity stack (#874)
Oct 20, 2026
b2c9ea5
Merge #874 tip (re-merged with main incl. #877) to keep the after-874…
Oct 20, 2026
f47a98a
Merge #763 (activity stack re-merged with main #877)
Oct 20, 2026
f4576ab
Merge upstream main into the activity producers branch
bandzalkin Oct 20, 2026
04c259b
Merge prerequisite head (activity stack re-merged with current main)
Oct 20, 2026
8c1622e
Merge #874 (activity stack on main through #838 test reorg)
bandzalkin Oct 20, 2026
823eeca
Merge upstream main through #838 into the activity delivery branch
Oct 20, 2026
2bc0340
Merge #840 delivery head (main through #838 + X-API-Version and Contr…
bandzalkin Oct 20, 2026
fdaecf6
Merge #841 carrying #840's X-API-Version learning and ControlLink fix
Oct 20, 2026
ef5d6b9
fix(activity): clip over-long tool names before the platform rejects …
bandzalkin Oct 20, 2026
1f95b78
feat(omp): report native tool and permission activity in rooms
bandzalkin Oct 20, 2026
8247cad
style(acp): format transport contract after #763 lifecycle edits
bandzalkin Oct 20, 2026
441025d
Merge #874 (gate + I-08 clamp on the #840 delivery fixes)
bandzalkin Oct 20, 2026
bc5a294
Merge simulation commit landed on this branch; content already supers…
bandzalkin Oct 20, 2026
22165bf
Merge #874 (final gate lineage incl. reconciliation)
bandzalkin Oct 20, 2026
1a8441e
Merge updated prerequisite (final activity stack lineage)
Oct 20, 2026
a476c3a
test: Accept room event posts in the activity peer
bandzalkin Oct 20, 2026
0d8cbd0
Merge #841 fix: running-room event echo in the activity peer
bandzalkin Oct 20, 2026
4f471d2
Merge #874 (event-echo fix on the activity stack)
bandzalkin Oct 20, 2026
58c44d7
Merge #763 (event-echo fix through the stack)
bandzalkin Oct 20, 2026
77e8e14
fix(omp): keep Band tool activity reporting on the shared tools surface
bandzalkin Oct 20, 2026
219fd49
Merge #763 (tool activity reporting restored on the native branch)
bandzalkin Oct 20, 2026
d697f43
style: drop merge-seam blank lines from the reporter files
bandzalkin Oct 20, 2026
89dab59
Merge #841 (format fix on the activity stack)
bandzalkin Oct 20, 2026
2dc539a
Merge #874 (format fix through the activity stack)
bandzalkin Oct 20, 2026
3bd7f14
Merge #763 (format fix through the stack)
bandzalkin Oct 20, 2026
41fb96e
fix(omp): keep tool activity behind the narration switch
Oct 21, 2026
2cf7482
Merge #763 (activity emit-gate fix) into #854
Oct 21, 2026
d764959
fix(activity): consult the tool-name gate at report time
bandzalkin Oct 21, 2026
3098914
Merge #874 (live tool-name gate) into #763
bandzalkin Oct 21, 2026
45a012b
Merge #763 (tool-activity gate cascade) into #854
bandzalkin Oct 21, 2026
ddcaa94
test(activity): guard the continuation paths of the tool-name gate
bandzalkin Oct 21, 2026
0b834e7
Merge #763 (continuation gate guard) into #854
bandzalkin Oct 21, 2026
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 .github/scripts/setup-omp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
# Install Bun and pin OMP (@oh-my-pi/pi-coding-agent) for the `backends` e2e lane.
set -euo pipefail

OMP_PACKAGE="${OMP_PACKAGE:-@oh-my-pi/pi-coding-agent@18.2.8}"
OMP_MIN_BUN="${OMP_MIN_BUN:-1.3.14}"
OMP_PACKAGE="${OMP_PACKAGE:-$(uv run python -c 'from band.integrations.omp import OMP_PINNED_PACKAGE; print(OMP_PINNED_PACKAGE)')}"
OMP_MIN_BUN="${OMP_MIN_BUN:-$(uv run python -c 'from band.integrations.omp import OMP_MIN_BUN; print(OMP_MIN_BUN)')}"

if ! command -v bun >/dev/null 2>&1; then
curl -fsSL https://bun.sh/install | bash
Expand Down Expand Up @@ -31,6 +31,6 @@ fi
bun --version
bun install -g "${OMP_PACKAGE}"
omp --version
omp acp --help >/dev/null
omp --mode rpc --help >/dev/null

echo "OMP ready (package=${OMP_PACKAGE}, min Bun=${OMP_MIN_BUN})"
20 changes: 18 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,11 @@ jobs:
BAND_ALLOW_MISSING_FRAMEWORKS: "1"
run: uv run --all-packages pytest tests/e2e/baseline/ --collect-only -q --no-cov

- name: Run CrewAI activity tests
env:
BAND_ALLOW_MISSING_FRAMEWORKS: "1"
run: uv run --all-packages pytest tests/integrations/crewai/activity/

- name: Run crewai tests
env:
# dev-crewai venv lacks langgraph/anthropic/parlant/pydantic-ai/etc.;
Expand All @@ -171,7 +176,7 @@ jobs:
# Only the tests that *need* this venv. Every other crewai test fakes the
# package through sys.modules, so the `test` job above already runs it and
# a second pass here would add no signal — just a path to forget.
# tests/framework_conformance/test_crewai_job_coverage.py keeps this honest.
# tests/framework_conformance/crewaicoverage/ keeps this honest.
run: |
uv run --all-packages pytest \
tests/adapters/test_crewai_flow_phase3.py \
Expand Down Expand Up @@ -233,6 +238,12 @@ jobs:
BAND_TEST_EXTRA: "dev-strands-nooa"
run: uv run --all-packages pytest tests/e2e/baseline/ --collect-only -q --no-cov

- name: Run Strands activity tests
env:
BAND_ALLOW_MISSING_FRAMEWORKS: "1"
BAND_TEST_EXTRA: "dev-strands-nooa"
run: uv run --all-packages pytest tests/adapters/strands/activity/

- name: Run Strands and NOOA tests
env:
# dev-strands-nooa lacks modern framework packages;
Expand Down Expand Up @@ -302,6 +313,11 @@ jobs:
BAND_ALLOW_MISSING_FRAMEWORKS: "1"
run: uv run --all-packages pytest tests/e2e/baseline/ --collect-only -q --no-cov

- name: Run Parlant activity tests
env:
BAND_ALLOW_MISSING_FRAMEWORKS: "1"
run: uv run --all-packages pytest tests/integrations/parlant/activity/

- name: Run parlant tests
env:
# dev-parlant venv lacks langgraph/anthropic-adapter/pydantic-ai/etc.;
Expand All @@ -310,7 +326,7 @@ jobs:
# Only the tests that *need* this venv. Every other parlant test fakes the
# package through sys.modules, so the `test` job above already runs it and
# a second pass here would add no signal — just a path to forget.
# tests/framework_conformance/test_parlant_job_coverage.py keeps this honest.
# tests/framework_conformance/parlantcoverage/ keeps this honest.
run: |
uv run --all-packages pytest \
tests/integrations/parlant/test_catalog.py \
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ jobs:
path: ~/.cursor-agent-*
key: ${{ steps.cursor-cli-cache.outputs.cache-primary-key }}

- name: Install Bun and OMP (omp_acp)
- name: Install Bun and OMP (omp)
if: matrix.lane == 'backends'
run: bash .github/scripts/setup-omp.sh

Expand Down
10 changes: 7 additions & 3 deletions .github/workflows/python-core-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,14 @@ concurrency:

jobs:
coverage:
# Dependabot cannot read repository Actions secrets, so it cannot check
# out the private Core repository with this workflow's token.
# Fork pull requests and Dependabot cannot read repository Actions secrets.
# Validate fork revisions through a reviewed upstream branch and manual dispatch.
# Drafts get no CI; ready_for_review above fires the first real run.
if: github.actor != 'dependabot[bot]' && (github.event_name != 'pull_request' || github.event.pull_request.draft == false)
if: >-
github.actor != 'dependabot[bot]' &&
(github.event_name != 'pull_request' ||
(github.event.pull_request.draft == false &&
github.event.pull_request.head.repo.full_name == github.repository))
runs-on: ubuntu-latest
timeout-minutes: 30
env:
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,8 @@ LangGraph supports the built-in Band platform tools, custom LangChain tools thro
| ------------ | ------------- | ------------------------------------ | --------------------------------------------- |
| A2A bridge | `a2a` | `A2AAdapter` | [examples](examples/a2a_bridge/) |
| A2A gateway | `a2a_gateway` | `A2AGatewayAdapter` | [examples](examples/a2a_gateway/) |
| ACP | `acp` | `ACPClientAdapter`, `CopilotACPAdapter`, `OmpACPAdapter`, `ACPServer`, `BandACPServerAdapter` | [examples](examples/acp/) |
| ACP | `acp` | `ACPClientAdapter`, `CopilotACPAdapter`, `ACPServer`, `BandACPServerAdapter` | [examples](examples/acp/) |
| OMP native RPC | `omp` | `OmpAdapter` | [example](examples/omp.py), [setup](docs/acp.md#omp-native-rpc) |
| Slack | `slack` | `SlackAdapter` | [examples](examples/slack/) |

> **Other languages:** The Band SDK is also available for [TypeScript](https://github.com/thenvoi/thenvoi-sdk-typescript).
Expand All @@ -497,7 +498,7 @@ Additional bridge extras exist for specialized deployments: `a2a_gateway_demo` s

Agents using the Band SDK can receive built-in tools for interacting with Band. **Chat tools are always enabled**, and cannot be disabled. Contact and memory tools are opt-in capabilities, configured via `capabilities=` on the adapters that support them, and are disabled unless you explicitly enable them.

The table below is the agent tool surface exposed to LLM adapters. Framework adapters in [Supported Adapters](#supported-adapters) support `Capability.CONTACTS` and `Capability.MEMORY`; the A2A adapters (`A2AAdapter`, `A2AGatewayAdapter`) and the ACP server adapter (`BandACPServerAdapter`) declare no capabilities, so `capabilities=` has nothing to enable there. `ACPClientAdapter` and the Copilot, Cursor and OMP backends built on it accept them.
The table below is the agent tool surface exposed to LLM adapters. Framework adapters in [Supported Adapters](#supported-adapters) support `Capability.CONTACTS` and `Capability.MEMORY`; the A2A adapters (`A2AAdapter`, `A2AGatewayAdapter`) and the ACP server adapter (`BandACPServerAdapter`) declare no capabilities, so `capabilities=` has nothing to enable there. `ACPClientAdapter`, its Copilot and Cursor backends, and the native `OmpAdapter` accept them.

| Category | Tool Names | What They Enable |
| ------------ | ---------- | ---------------- |
Expand Down
Loading
Loading