Repository navigation
feat(integrations): report native OMP tool and permission activity - #880
Closed
bandzalkin wants to merge 35 commits into
Closed
bandzalkin wants to merge 35 commits into
bandzalkin wants to merge 35 commits into
Conversation
Give the repeated tool-completion and privacy checks one helper, and name the ACP call record so activity identity is not a bare tuple. Co-authored-by: Cursor <cursoragent@cursor.com>
…t-activity-detail-to-the-platform-INT-1744 Keep main's BackendTurns ownership of OpenCode cancellation and register the watcher as a turn worker so activity reporting outlives the handler. Reporter unit tests move to tests/runtime/workingreporter; main's workingstate package keeps the execution-level tests. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AgnNR4uiqD787Bg3yKdZpL
…detail-to-the-platform-INT-1744' into feat/python-sdk-report-activity-detail-to-the-platform-delivery-INT-1744 Port the startup-backlog claim-failure test edit to the split tests/runtime/execution package. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AgnNR4uiqD787Bg3yKdZpL
…detail-to-the-platform-delivery-INT-1744' into feat/python-sdk-report-activity-detail-to-the-platform-producers-INT-1744 Adopt main's agno and tool test layouts and carry the producer edits into them; keep the split CrewAI/Parlant coverage guards with main's new paths. Letta streams provider events through main's BackendTurns run, and the CrewAI flow tool activity wraps main's turn-owned tool execution. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AgnNR4uiqD787Bg3yKdZpL
It runs three collect-only subprocesses, which exceeded the default per-test timeout on Windows runners. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AgnNR4uiqD787Bg3yKdZpL
…t-activity-detail-to-the-platform-INT-1744
…detail-to-the-platform-INT-1744' into feat/python-sdk-report-activity-detail-to-the-platform-delivery-INT-1744
…detail-to-the-platform-delivery-INT-1744' into feat/python-sdk-report-activity-detail-to-the-platform-producers-INT-1744
Adapters that do not report tool calls must not leak tool names through the live room indicator. The decision is taken once per turn in SimpleAdapter from the negotiated emit set and enforced at the single observer every activity reporter funnels through, so no adapter can bypass it. Permission and memory detail name no content and always report. Guards: tests/runtime/activity/test_namegate.py pins that a tool_call frame reaches the wire with Emit.TOOL_CALLS and degrades to nameless reasoning without it; fails if the wrapper is removed.
…ve OMP activity hooks
The native OMP adapter delivered only the boolean working indicator, so rooms showed plain reasoning through tool runs and approval waits. Hook the typed activity helpers into the existing toolCallId-correlated tool events and around the permission resolver wait: a running tool reports its name, a /approve or human wait reports permission, and everything returns to reasoning as they finish. Names pass through unfiltered here; the SimpleAdapter chokepoint gates them on the same Tool calls & results choice as tool narration, so a tool-reporting-off agent leaks no names and no argument text ever reaches the reporter. Guarded by tests/adapters/test_omp_activity.py, driving start/end and the approval wait with narration on and off.
bandzalkin
requested review from
AlexanderZ-Band and
amit-gazal-band
as code owners
October 20, 2026 18:37
bandzalkin
added a commit
to bandzalkin/band-sdk-python
that referenced
this pull request
Oct 20, 2026
The native adapter needs its own hooks because the activity stack covers omp_acp.py only. band-ai#880 inherits band-ai#763's branch and merges band-ai#874 for the helper API, so its own changes are the omp.py hooks and their tests.
…st split, release) into the activity producers branch
…ctivity stack via band-ai#874
bandzalkin
added a commit
to bandzalkin/band-sdk-python
that referenced
this pull request
Oct 20, 2026
The native adapter needs its own hooks because the activity stack covers omp_acp.py only. band-ai#880 inherits band-ai#763's branch and rides the activity helpers through band-ai#874, so its own changes are the omp.py hooks and their tests; after 874 keeps its main content behind the stack's forward merges, as the replay's prerequisite guard requires.
…removal composes once
bandzalkin
added a commit
to bandzalkin/band-sdk-python
that referenced
this pull request
Oct 20, 2026
band-ai#763 deletes omp_acp.py while band-ai#841 edits it, so the deletion must be computed over the stack's tree to compose once. band-ai#854, band-ai#795 and band-ai#848 rebased onto the new band-ai#763 head; band-ai#880 rides after 763 as hooks-only.
added 2 commits
October 20, 2026 22:06
bandzalkin
added a commit
to bandzalkin/band-sdk-python
that referenced
this pull request
Oct 20, 2026
Select band-ai#841 (which inherits the merged band-ai#839 and band-ai#840) and our gate band-ai#874 after it, restack band-ai#763 after band-ai#874 so its omp_acp.py removal composes once against band-ai#841's edit, and select band-ai#880 (native OMP activity hooks) after band-ai#763. The band-ai#857 source branch was rebased onto current main after the test reorg.
bandzalkin
added a commit
to bandzalkin/band-sdk-python
that referenced
this pull request
Oct 20, 2026
The hooks ride the native branch itself (contract 2026-10-20): band-ai#880 is retired and its selection entry dropped.
Contributor
Author
|
Closing: per the fork replay contract (2026-10-20), the native OMP activity hooks land on #763's own branch instead of a separate stacked PR — #763 is now restacked |
This was referenced Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
band-agent's OMP harness runs the fork-maintained native adapter (
src/band/adapters/omp.pyfrom #763), which the activity-detail stack (#839/#840/#841) does not touch — it covers onlyomp_acp.py. OMP rooms therefore keep showing plain "reasoning" through tool runs and approval waits.What changed
src/band/adapters/omp.py: activity hooks on the existingtoolCallId-correlated events —report_tool_activityontool_execution_start(before the narration gate, so the hook is narration-independent),end_tool_activityon a trackedtool_execution_end, andset_permission_waitaround the resolver await in_permission. Names pass through unfiltered here; the tool-name gate (feat: gate activity tool names on the tool-call emit choice #874, applied via theSimpleAdapterchokepoint) keeps names off the wire when tool-call narration is off. No argument text ever reaches the reporter.after 763, the feat(integrations): discover native OMP model catalogs #848 pattern). Its base-diff againstmaintherefore carries the activity stack, like feat: gate activity tool names on the tool-call emit choice #874's does, and it becomes mergeable when the stack does.omp_acp.py's activity bits from feat: Report Band tool calls as turn activity #841 are superseded here: fix(integrations): preserve native OMP lifecycle and prompt authority #763 replaces that adapter.Testing
tests/adapters/test_omp_activity.py(9 tests): tool start/end and the approval wait asserted at the reporter with narration on and off; name-only payloads; untracked ends ignored; auto-approve and non-select UI report nothing.tests/adapters/test_omp_adapter.py,tests/adapters/activity,tests/toolkit/test_omp_*,tests/integrations/test_omprpc.py,tests/runtime/{activity,workingstate,workingreporter,activityownership}— 228 passed;pyrefly check0 errors.