Batch merge: PRs #43, #55, #53, #54#72
Merged
mattleaverton merged 20 commits intomainfrom Mar 31, 2026
Merged
Conversation
(cherry picked from commit c0110c630859508ce3390cf976cd11e8a06fbb6b)
(cherry picked from commit 1a57a2ca640d65457fa663e9548d41c9be22ab53)
(cherry picked from commit 23f3ce1e2329597b204b530bc23b1f817b5266c2)
(cherry picked from commit a878921adc2555db9062b721489e2ba79df618c6)
Switch one_shot mode from Complete() to Stream() with StreamAccumulator, add throttled progress emitter (100ms batched text deltas, immediate tool call events), emit AssistantMessage CXDB turns from both agent_loop and one_shot paths, and tag all progress events with backend:"api" for CLI/API parity. (cherry picked from commit 9cb2b2014b37e7d3d6c3c96ae09c29671c959e40)
(cherry picked from commit 2670b7d7933d2b238cdc884d8490bf2a221682ba)
(cherry picked from commit 72bafbf015fd60441787e9493dfbc149c03a3396)
(cherry picked from commit 200fd7afb75b7576e7c3df9d80ff1dcdd253f61f)
(cherry picked from commit ab22977e2434c77aaa827a0e8c92dd0bf9b5c890)
(cherry picked from commit 4f67b653fa83299b9f8997718121f6dfa48b73e5)
…merge/pr-batch-2 # Conflicts: # internal/attractor/engine/handlers.go
…r-catalog-refresh' into merge/pr-batch-2 # Conflicts: # internal/attractor/modeldb/pinned/openrouter_models.json
…pp-server-routing-autonomy' into merge/pr-batch-2 # Conflicts: # internal/attractor/engine/cli_only_models.go # internal/attractor/engine/cli_only_models_test.go # internal/attractor/engine/codergen_router.go # internal/attractor/engine/codergen_router_cli_only_test.go # internal/attractor/engine/provider_preflight.go # internal/attractor/engine/provider_preflight_test.go
…ng-provider-lifecycle-events' into merge/pr-batch-2 # Conflicts: # internal/attractor/engine/codergen_heartbeat_test.go # internal/attractor/engine/run_with_config_integration_test.go
- Update CXDB empty-text test to expect [tool_use] fallback (PR #58 behavior takes precedence over PR #54's skip-empty-text design) - Skip Windows-specific shell resolution tests on non-Windows platforms (filepath.Clean handles backslashes differently on macOS/Linux) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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.
Summary
Batch merge of 4 remaining contributor PRs with conflict resolution and test fixes. All tests pass, build is clean.
Included PRs (original commits preserved with author attribution)
Conflict resolution & fixes
falsefor all built-in modelsEventAssistantTextEndcase from attractor: emit AssistantMessage turns for API session events #58 (batch 1) and feat(streaming): propagate provider lifecycle events through agent and SSE #54 — kept attractor: emit AssistantMessage turns for API session events #58's more complete version with [tool_use] fallbackwriteOpenAIResponseAutohelper for streaming — accepted theirsVerification
go build ./...— cleango test ./...— all packages passCloses #43, closes #55, closes #53, closes #54