Skip to content

feat(chat): batched tool-approval protocol (v2) - #617

Merged
hannessolo merged 2 commits into
mainfrom
apprvfix
Jul 31, 2026
Merged

feat(chat): batched tool-approval protocol (v2)#617
hannessolo merged 2 commits into
mainfrom
apprvfix

Conversation

@hannessolo

Copy link
Copy Markdown
Contributor

Rework the chat client's approval handling so a multi-tool approval step is answered correctly, and own the client↔agent wire contract with no external library dependency:

  • Single source of truth: tool activity lives as type:'tool' parts on assistant messages, each carrying a lifecycle state; toolCards are derived.
  • Batched approvals: decisions are recorded per part and one POST is sent only once the whole approval queue is drained (fixes one-at-a-time round-trips); sent-tracking prevents rejection resend loops.
  • Stream: consume tool-input-available / tool-approval-request / tool-output-available|error; drop approvalId, role:'tool' messages, and the orphan-stripping/virtual-message machinery.
  • migrateHistory(): best-effort v1 -> v2 for persisted conversations.
  • Point ?ref=local at the agent's native port 4002 (reconciled from 4200).
  • Docs: new approval-protocol.md (canonical contract) + chat-ui-component.md.

Please always provide the GitHub issue(s) your PR is for, as well as test URLs where your change can be observed (before and after):

Fix #

Test URLs:

Rework the chat client's approval handling so a multi-tool approval step is
answered correctly, and own the client↔agent wire contract with no external
library dependency:

- Single source of truth: tool activity lives as `type:'tool'` parts on
  assistant messages, each carrying a lifecycle `state`; toolCards are derived.
- Batched approvals: decisions are recorded per part and one POST is sent only
  once the whole approval queue is drained (fixes one-at-a-time round-trips);
  sent-tracking prevents rejection resend loops.
- Stream: consume tool-input-available / tool-approval-request /
  tool-output-available|error; drop approvalId, role:'tool' messages, and the
  orphan-stripping/virtual-message machinery.
- migrateHistory(): best-effort v1 -> v2 for persisted conversations.
- Point ?ref=local at the agent's native port 4002 (reconciled from 4200).
- Docs: new approval-protocol.md (canonical contract) + chat-ui-component.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@aem-code-sync

aem-code-sync Bot commented Jul 24, 2026

Copy link
Copy Markdown

Hello, I'm the AEM Code Sync Bot and I will run some actions to deploy your branch.
In case there are problems, just click the checkbox below to rerun the respective action.

  • Re-sync branch
Commits

@hannessolo
hannessolo requested a review from sharanyavinod July 31, 2026 11:05
@hannessolo
hannessolo marked this pull request as ready for review July 31, 2026 11:05
@hannessolo
hannessolo merged commit c86d8ff into main Jul 31, 2026
3 checks passed
@hannessolo
hannessolo deleted the apprvfix branch July 31, 2026 12:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants