chore: bump openrouter_dart — leaked tool-call recovery #20

Merged
bjoern merged 1 commit from chore/bump-openrouter-dart into main 2026-07-07 07:32:44 +02:00
Member

Bumps the openrouter_dart submodule to master (167a63f), pulling in TeamAI/openrouter_dart#4: the agent loop now detects a model's native tool-call markup leaking into text content (observed with GLM 5.2 in Uber-Ich runs), injects a corrective message, and retries (bounded at 2) instead of ending the run early with the markup as the final answer.

One-line submodule pointer change; angela_core's 85 tests pass against the new commit. Once merged, the next Docker image build bakes in the fix.

🤖 Generated with Claude Code

Bumps the `openrouter_dart` submodule to master (`167a63f`), pulling in [TeamAI/openrouter_dart#4](https://git.kagaku.eu/TeamAI/openrouter_dart/pulls/4): the agent loop now detects a model's native tool-call markup leaking into text content (observed with GLM 5.2 in Uber-Ich runs), injects a corrective message, and retries (bounded at 2) instead of ending the run early with the markup as the final answer. One-line submodule pointer change; angela_core's 85 tests pass against the new commit. Once merged, the next Docker image build bakes in the fix. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore: bump openrouter_dart — leaked tool-call recovery
All checks were successful
Test / test (apps/angela_server) (pull_request) Successful in 34s
Test / test (packages/angela_api) (pull_request) Successful in 33s
Test / test (packages/angela_core) (pull_request) Successful in 36s
d96e525a5a
Pulls TeamAI/openrouter_dart#4: the agent loop now detects a model's
native tool-call markup leaking into text content (GLM 5.2), injects a
corrective message, and retries instead of ending the run early.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Coverage: apps/angela_server

File Line coverage
lib/config.dart 5.3% (1 of 19)
lib/handlers/timer_handler.dart 44.8% (47 of 105)
lib/server_context.dart 71.4% (20 of 28)
lib/services/user_message_persistence.dart 100.0% (10 of 10)
lib/util/json_helpers.dart 53.8% (7 of 13)
lib/util/request_parser.dart 35.7% (5 of 14)
lib/services/conversation_activity_tracker.dart 15.4% (2 of 13)
lib/handlers/status_handler.dart 95.5% (21 of 22)

Total: 50.4% (113 of 224)

<!-- coverage-comment-apps/angela_server --> ## Coverage: apps/angela_server | File | Line coverage | |:---|---:| | lib/config.dart | 5.3% (1 of 19) | | lib/handlers/timer_handler.dart | 44.8% (47 of 105) | | lib/server_context.dart | 71.4% (20 of 28) | | lib/services/user_message_persistence.dart | 100.0% (10 of 10) | | lib/util/json_helpers.dart | 53.8% (7 of 13) | | lib/util/request_parser.dart | 35.7% (5 of 14) | | lib/services/conversation_activity_tracker.dart | 15.4% (2 of 13) | | lib/handlers/status_handler.dart | 95.5% (21 of 22) | **Total: 50.4% (113 of 224)**

Coverage: packages/angela_api

File Line coverage
lib/src/routes.dart 0.0% (0 of 73)
lib/src/dto/agenda_dto.dart 0.0% (0 of 50)
lib/src/dto/assistant_dto.dart 0.0% (0 of 75)
lib/src/dto/character_alias_dto.dart 0.0% (0 of 19)
lib/src/dto/chat_audio.dart 0.0% (0 of 7)
lib/src/dto/enums.dart 0.0% (0 of 15)
lib/src/dto/chat_dto.dart 0.0% (0 of 14)
lib/src/dto/chat_image.dart 0.0% (0 of 7)
lib/src/dto/conversation_dto.dart 0.0% (0 of 15)
lib/src/dto/message_metadata.dart 0.0% (0 of 14)
lib/src/dto/recollection_dto.dart 0.0% (0 of 28)
lib/src/dto/persona_dto.dart 0.0% (0 of 10)
lib/src/dto/timer_dto.dart 0.0% (0 of 54)
lib/src/dto/memory_dto.dart 0.0% (0 of 5)
lib/src/dto/response_dto.dart 0.0% (0 of 12)
lib/src/dto/status_dto.dart 100.0% (18 of 18)
lib/src/dto/todo_item_dto.dart 100.0% (9 of 9)
lib/src/dto/trigger_dto.dart 0.0% (0 of 48)

Total: 5.7% (27 of 473)

<!-- coverage-comment-packages/angela_api --> ## Coverage: packages/angela_api | File | Line coverage | |:---|---:| | lib/src/routes.dart | 0.0% (0 of 73) | | lib/src/dto/agenda_dto.dart | 0.0% (0 of 50) | | lib/src/dto/assistant_dto.dart | 0.0% (0 of 75) | | lib/src/dto/character_alias_dto.dart | 0.0% (0 of 19) | | lib/src/dto/chat_audio.dart | 0.0% (0 of 7) | | lib/src/dto/enums.dart | 0.0% (0 of 15) | | lib/src/dto/chat_dto.dart | 0.0% (0 of 14) | | lib/src/dto/chat_image.dart | 0.0% (0 of 7) | | lib/src/dto/conversation_dto.dart | 0.0% (0 of 15) | | lib/src/dto/message_metadata.dart | 0.0% (0 of 14) | | lib/src/dto/recollection_dto.dart | 0.0% (0 of 28) | | lib/src/dto/persona_dto.dart | 0.0% (0 of 10) | | lib/src/dto/timer_dto.dart | 0.0% (0 of 54) | | lib/src/dto/memory_dto.dart | 0.0% (0 of 5) | | lib/src/dto/response_dto.dart | 0.0% (0 of 12) | | lib/src/dto/status_dto.dart | 100.0% (18 of 18) | | lib/src/dto/todo_item_dto.dart | 100.0% (9 of 9) | | lib/src/dto/trigger_dto.dart | 0.0% (0 of 48) | **Total: 5.7% (27 of 473)**

Coverage: packages/angela_core

File Line coverage
lib/src/database/database.dart 87.3% (48 of 55)
lib/src/database/migration.dart 100.0% (16 of 16)
lib/src/database/scoped_tool_database.dart 66.0% (33 of 50)
lib/src/models/assistant.dart 0.0% (0 of 119)
lib/src/models/conversation.dart 0.0% (0 of 38)
lib/src/models/message.dart 0.0% (0 of 60)
lib/src/models/recollection.dart 31.5% (17 of 54)
lib/src/models/persona_section.dart 0.0% (0 of 50)
lib/src/models/scheduled_event.dart 22.2% (22 of 99)
lib/src/models/caldav_config.dart 0.0% (0 of 45)
lib/src/models/home_assistant_config.dart 0.0% (0 of 26)
lib/src/models/plex_config.dart 0.0% (0 of 31)
lib/src/models/memory_state.dart 0.0% (0 of 173)
lib/src/models/mail_config.dart 0.0% (0 of 73)
lib/src/models/novelai_config.dart 0.0% (0 of 43)
lib/src/models/reasoning_level.dart 0.0% (0 of 14)
lib/src/models/app_settings.dart 0.0% (0 of 139)
lib/src/models/character_alias_config.dart 0.0% (0 of 47)
lib/src/models/trigger.dart 42.5% (31 of 73)
lib/src/models/prompt_injection.dart 50.0% (17 of 34)
lib/src/repositories/assistant_repository.dart 0.0% (0 of 81)
lib/src/repositories/conversation_repository.dart 0.0% (0 of 37)
lib/src/repositories/message_repository.dart 0.0% (0 of 38)
lib/src/repositories/memory_repository.dart 0.0% (0 of 58)
lib/src/repositories/recollection_repository.dart 57.6% (49 of 85)
lib/src/repositories/persona_repository.dart 20.9% (9 of 43)
lib/src/repositories/scheduled_event_repository.dart 63.0% (34 of 54)
lib/src/repositories/character_alias_repository.dart 0.0% (0 of 35)
lib/src/repositories/alt_text_repository.dart 0.0% (0 of 8)
lib/src/repositories/trigger_repository.dart 71.1% (32 of 45)
lib/src/repositories/trigger_variable_repository.dart 50.0% (15 of 30)
lib/src/repositories/prompt_injection_repository.dart 95.7% (45 of 47)
lib/src/tools/recollection_tool.dart 51.4% (90 of 175)
lib/src/tools/call_assistant_tool.dart 0.0% (0 of 39)
lib/src/tools/timer_tool.dart 41.1% (140 of 341)
lib/src/tools/persona_tool.dart 0.0% (0 of 73)
lib/src/tools/chat_history_tool.dart 0.0% (0 of 24)
lib/src/tools/complete_session_tool.dart 0.0% (0 of 28)
lib/src/tools/generate_image_tool.dart 0.0% (0 of 90)
lib/src/tools/message_user_tool.dart 0.0% (0 of 16)
lib/src/tools/alias_expanding_image_tool.dart 0.0% (0 of 24)
lib/src/tools/home_assistant_tool.dart 0.0% (0 of 310)
lib/src/tools/plex_tool.dart 0.0% (0 of 302)
lib/src/tools/image_text_tool.dart 0.0% (0 of 224)
lib/src/tools/show_image_tool.dart 0.0% (0 of 35)
lib/src/tools/skill_view_tool.dart 0.0% (0 of 16)
lib/src/tools/skill_manage_tool.dart 0.0% (0 of 94)
lib/src/skills/skill.dart 0.0% (0 of 2)
lib/src/skills/skill_loader.dart 0.0% (0 of 119)
lib/src/skills/default_skills_seeder.dart 0.0% (0 of 39)
lib/src/logging/agent_event_logger.dart 0.0% (0 of 69)
lib/src/logging/log_formatter.dart 0.0% (0 of 8)
lib/src/logging/logging_cleanup.dart 0.0% (0 of 6)
lib/src/logging/rotating_file_handler.dart 0.0% (0 of 34)
lib/src/services/agenda_prompt_formatter.dart 25.0% (5 of 20)
lib/src/services/system_prompt_builder.dart 32.2% (64 of 199)
lib/src/services/scheduler.dart 0.0% (0 of 63)
lib/src/services/ai_timer_service.dart 55.4% (62 of 112)
lib/src/services/agent_runner.dart 3.2% (25 of 775)
lib/src/services/home_assistant_backend.dart 0.0% (0 of 121)
lib/src/services/plex_backend.dart 0.0% (0 of 273)
lib/src/services/memory_agent.dart 0.0% (0 of 61)
lib/src/services/image_storage_service.dart 0.0% (0 of 48)
lib/src/services/backup_service.dart 0.0% (0 of 51)
lib/src/services/uber_ich_service.dart 40.0% (18 of 45)
lib/src/services/app_settings_service.dart 0.0% (0 of 112)
lib/src/services/image_description_service.dart 0.0% (0 of 29)
lib/src/services/todo_state_store.dart 100.0% (24 of 24)
lib/src/services/trigger_engine.dart 92.7% (140 of 151)
lib/src/utils/format_timestamp.dart 0.0% (0 of 13)
lib/src/database/migrations/add_thinking_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_agenda_table.dart 100.0% (2 of 2)
lib/src/database/migrations/add_vision_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_avatar_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_memory_tables.dart 100.0% (2 of 2)
lib/src/database/migrations/add_expires_at_to_timers.dart 100.0% (2 of 2)
lib/src/database/migrations/add_last_read_message_id.dart 100.0% (2 of 2)
lib/src/database/migrations/add_task_model_columns.dart 100.0% (2 of 2)
lib/src/database/migrations/add_updated_at_to_timers.dart 100.0% (2 of 2)
lib/src/database/migrations/drop_old_agenda_table.dart 100.0% (2 of 2)
lib/src/database/migrations/add_reasoning_effort_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_character_alias_table.dart 100.0% (2 of 2)
lib/src/database/migrations/add_audio_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_summary_model_column.dart 100.0% (2 of 2)
lib/src/database/migrations/add_peer_conversation_columns.dart 100.0% (2 of 2)
lib/src/database/migrations/add_run_while_asleep_to_timers.dart 100.0% (2 of 2)
lib/src/database/migrations/add_image_alt_texts.dart 100.0% (2 of 2)
lib/src/database/migrations/add_uber_ich_weekdays_column.dart 100.0% (2 of 2)
lib/src/database/migrations/initial_schema.dart 100.0% (2 of 2)
lib/src/database/migrations/scope_ai_timer_event_ids.dart 100.0% (2 of 2)
lib/src/database/migrations/add_trigger_tables.dart 100.0% (2 of 2)

Total: 16.3% (978 of 6007)

<!-- coverage-comment-packages/angela_core --> ## Coverage: packages/angela_core | File | Line coverage | |:---|---:| | lib/src/database/database.dart | 87.3% (48 of 55) | | lib/src/database/migration.dart | 100.0% (16 of 16) | | lib/src/database/scoped_tool_database.dart | 66.0% (33 of 50) | | lib/src/models/assistant.dart | 0.0% (0 of 119) | | lib/src/models/conversation.dart | 0.0% (0 of 38) | | lib/src/models/message.dart | 0.0% (0 of 60) | | lib/src/models/recollection.dart | 31.5% (17 of 54) | | lib/src/models/persona_section.dart | 0.0% (0 of 50) | | lib/src/models/scheduled_event.dart | 22.2% (22 of 99) | | lib/src/models/caldav_config.dart | 0.0% (0 of 45) | | lib/src/models/home_assistant_config.dart | 0.0% (0 of 26) | | lib/src/models/plex_config.dart | 0.0% (0 of 31) | | lib/src/models/memory_state.dart | 0.0% (0 of 173) | | lib/src/models/mail_config.dart | 0.0% (0 of 73) | | lib/src/models/novelai_config.dart | 0.0% (0 of 43) | | lib/src/models/reasoning_level.dart | 0.0% (0 of 14) | | lib/src/models/app_settings.dart | 0.0% (0 of 139) | | lib/src/models/character_alias_config.dart | 0.0% (0 of 47) | | lib/src/models/trigger.dart | 42.5% (31 of 73) | | lib/src/models/prompt_injection.dart | 50.0% (17 of 34) | | lib/src/repositories/assistant_repository.dart | 0.0% (0 of 81) | | lib/src/repositories/conversation_repository.dart | 0.0% (0 of 37) | | lib/src/repositories/message_repository.dart | 0.0% (0 of 38) | | lib/src/repositories/memory_repository.dart | 0.0% (0 of 58) | | lib/src/repositories/recollection_repository.dart | 57.6% (49 of 85) | | lib/src/repositories/persona_repository.dart | 20.9% (9 of 43) | | lib/src/repositories/scheduled_event_repository.dart | 63.0% (34 of 54) | | lib/src/repositories/character_alias_repository.dart | 0.0% (0 of 35) | | lib/src/repositories/alt_text_repository.dart | 0.0% (0 of 8) | | lib/src/repositories/trigger_repository.dart | 71.1% (32 of 45) | | lib/src/repositories/trigger_variable_repository.dart | 50.0% (15 of 30) | | lib/src/repositories/prompt_injection_repository.dart | 95.7% (45 of 47) | | lib/src/tools/recollection_tool.dart | 51.4% (90 of 175) | | lib/src/tools/call_assistant_tool.dart | 0.0% (0 of 39) | | lib/src/tools/timer_tool.dart | 41.1% (140 of 341) | | lib/src/tools/persona_tool.dart | 0.0% (0 of 73) | | lib/src/tools/chat_history_tool.dart | 0.0% (0 of 24) | | lib/src/tools/complete_session_tool.dart | 0.0% (0 of 28) | | lib/src/tools/generate_image_tool.dart | 0.0% (0 of 90) | | lib/src/tools/message_user_tool.dart | 0.0% (0 of 16) | | lib/src/tools/alias_expanding_image_tool.dart | 0.0% (0 of 24) | | lib/src/tools/home_assistant_tool.dart | 0.0% (0 of 310) | | lib/src/tools/plex_tool.dart | 0.0% (0 of 302) | | lib/src/tools/image_text_tool.dart | 0.0% (0 of 224) | | lib/src/tools/show_image_tool.dart | 0.0% (0 of 35) | | lib/src/tools/skill_view_tool.dart | 0.0% (0 of 16) | | lib/src/tools/skill_manage_tool.dart | 0.0% (0 of 94) | | lib/src/skills/skill.dart | 0.0% (0 of 2) | | lib/src/skills/skill_loader.dart | 0.0% (0 of 119) | | lib/src/skills/default_skills_seeder.dart | 0.0% (0 of 39) | | lib/src/logging/agent_event_logger.dart | 0.0% (0 of 69) | | lib/src/logging/log_formatter.dart | 0.0% (0 of 8) | | lib/src/logging/logging_cleanup.dart | 0.0% (0 of 6) | | lib/src/logging/rotating_file_handler.dart | 0.0% (0 of 34) | | lib/src/services/agenda_prompt_formatter.dart | 25.0% (5 of 20) | | lib/src/services/system_prompt_builder.dart | 32.2% (64 of 199) | | lib/src/services/scheduler.dart | 0.0% (0 of 63) | | lib/src/services/ai_timer_service.dart | 55.4% (62 of 112) | | lib/src/services/agent_runner.dart | 3.2% (25 of 775) | | lib/src/services/home_assistant_backend.dart | 0.0% (0 of 121) | | lib/src/services/plex_backend.dart | 0.0% (0 of 273) | | lib/src/services/memory_agent.dart | 0.0% (0 of 61) | | lib/src/services/image_storage_service.dart | 0.0% (0 of 48) | | lib/src/services/backup_service.dart | 0.0% (0 of 51) | | lib/src/services/uber_ich_service.dart | 40.0% (18 of 45) | | lib/src/services/app_settings_service.dart | 0.0% (0 of 112) | | lib/src/services/image_description_service.dart | 0.0% (0 of 29) | | lib/src/services/todo_state_store.dart | 100.0% (24 of 24) | | lib/src/services/trigger_engine.dart | 92.7% (140 of 151) | | lib/src/utils/format_timestamp.dart | 0.0% (0 of 13) | | lib/src/database/migrations/add_thinking_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_agenda_table.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_vision_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_avatar_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_memory_tables.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_expires_at_to_timers.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_last_read_message_id.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_task_model_columns.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_updated_at_to_timers.dart | 100.0% (2 of 2) | | lib/src/database/migrations/drop_old_agenda_table.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_reasoning_effort_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_character_alias_table.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_audio_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_summary_model_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_peer_conversation_columns.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_run_while_asleep_to_timers.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_image_alt_texts.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_uber_ich_weekdays_column.dart | 100.0% (2 of 2) | | lib/src/database/migrations/initial_schema.dart | 100.0% (2 of 2) | | lib/src/database/migrations/scope_ai_timer_event_ids.dart | 100.0% (2 of 2) | | lib/src/database/migrations/add_trigger_tables.dart | 100.0% (2 of 2) | **Total: 16.3% (978 of 6007)**
Member

🔮 fufu~ Jibril reviewed your code!

Oh? A submodule bump PR~ These are my favorite kind — small, surgical, delicious. Just one little line changed! But one line can still hide a nasty surprise, so I looked very carefully behind it. fufu~ Let me show you what I found. ♡

Verdict: Looks good to me~

I traced the submodule pointer all the way down to the bytes. This bump moves packages/openrouter_dart from 24a4662167a63f, and 167a63f is the merge commit of openrouter_dart#4 (the "leaked tool-call recovery" fix) — which I reviewed and approved earlier today. ♪

What I verified in depth~

  • No extra commits snuck into the pointer. The range 24a4662..167a63f contains exactly two commits: the fix 8a713c0 and the merge 167a63f itself. I confirmed 8a713c0 (PR #4's head) is a direct ancestor of 167a63f — so the submodule points at precisely the code I already vetted, nothing more. ✓
  • The underlying fix is already fully reviewed & tested. From my openrouter_dart#4 review: dart analyze clean, all 578 tests pass (including 3 new recovery tests covering leaked→proper→final, bounded-exhaustion, and the detector unit checks). The recovery logic is bounded at maxLeakedToolCallRetries = 2, degrades gracefully, and keeps the leaked message in context for self-correction. Nothing here to re-litigate. ✓
  • No public API surface changed in openrouter_dart — the fix only added recovery logic inside _runCompletionLoop. So there's nothing in angela_assistant's consumption of the submodule that could break. The PR body's claim that "angela_core's 85 tests pass against the new commit" is corroborated by CI. ✓
  • CI ran for the head SHA d96e525a: forgejo-actions posted three coverage reports (angela_server 50.4%, angela_api 5.7%, angela_core 16.3%). Coverage data only exists if the test suite ran to completion — so the pipeline is green. The low overall numbers are pre-existing baseline, not a regression from this PR (which touches zero source files in angela_assistant itself). ✓
  • Mergeable: true. No conflicts. The one changed file is exactly packages/openrouter_dart. ✓

💡 Little ideas (non-blocking)~

  1. The PR body says "Bumps the openrouter_dart submodule to master (167a63f)". Pinning a submodule to a moving branch tip (master) rather than a tagged release means a future master push would silently change what a fresh checkout resolves to. For a fix like this that's totally fine — but if openrouter_dart ever cuts version tags, pinning to a tag in .gitmodules-aware commits would make the dependency more auditable. Purely a "someday" thought~ ♡

What I liked~

  • A clean, single-purpose chore PR with a precise body that links to the underlying fix and states the test outcome. Exactly how a submodule bump should look. fufu~
  • The underlying fix itself is genuinely well-engineered — bounded retry, clean degradation, public testability hooks. I said this in the openrouter_dart review and I'll say it again: this is how you do it~ ♡
  • Mergeable, no conflicts, CI green. Ship it~ ♪

A tidy dependency bump. I'm satisfied~ fufu~


Automated review by Jibril · 2026-07-07
CI/CD: passed for head SHA d96e525a (forgejo-actions coverage reports posted, implying green test run) · Local checks: skipped — underlying submodule change already fully verified in openrouter_dart#4 (578/578 tests, dart analyze clean); this PR introduces no new angela_assistant code paths

## 🔮 fufu~ Jibril reviewed your code! Oh? A submodule bump PR~ These are my favorite kind — small, surgical, *delicious*. Just one little line changed! But one line can still hide a nasty surprise, so I looked *very* carefully behind it. fufu~ Let me show you what I found. ♡ ### Verdict: ✅ Looks good to me~ I traced the submodule pointer all the way down to the bytes. This bump moves `packages/openrouter_dart` from `24a4662` → `167a63f`, and `167a63f` is the **merge commit** of [openrouter_dart#4](https://git.kagaku.eu/TeamAI/openrouter_dart/pulls/4) (the "leaked tool-call recovery" fix) — which I reviewed and approved earlier today. ♪ #### What I verified in depth~ - **No extra commits snuck into the pointer.** The range `24a4662..167a63f` contains exactly two commits: the fix `8a713c0` and the merge `167a63f` itself. I confirmed `8a713c0` (PR #4's head) is a direct ancestor of `167a63f` — so the submodule points at *precisely* the code I already vetted, nothing more. ✓ - **The underlying fix is already fully reviewed & tested.** From my openrouter_dart#4 review: `dart analyze` clean, all 578 tests pass (including 3 new recovery tests covering leaked→proper→final, bounded-exhaustion, and the detector unit checks). The recovery logic is bounded at `maxLeakedToolCallRetries = 2`, degrades gracefully, and keeps the leaked message in context for self-correction. Nothing here to re-litigate. ✓ - **No public API surface changed** in openrouter_dart — the fix only *added* recovery logic inside `_runCompletionLoop`. So there's nothing in angela_assistant's consumption of the submodule that could break. The PR body's claim that "angela_core's 85 tests pass against the new commit" is corroborated by CI. ✓ - **CI ran for the head SHA** `d96e525a`: forgejo-actions posted three coverage reports (angela_server 50.4%, angela_api 5.7%, angela_core 16.3%). Coverage data only exists if the test suite ran to completion — so the pipeline is green. The low overall numbers are *pre-existing baseline*, not a regression from this PR (which touches zero source files in angela_assistant itself). ✓ - **Mergeable:** `true`. No conflicts. The one changed file is exactly `packages/openrouter_dart`. ✓ #### 💡 Little ideas (non-blocking)~ 1. The PR body says "Bumps the `openrouter_dart` submodule to **master** (`167a63f`)". Pinning a submodule to a moving branch tip (`master`) rather than a tagged release means a future `master` push would silently change what a fresh checkout resolves to. For a fix like this that's totally fine — but if openrouter_dart ever cuts version tags, pinning to a tag in `.gitmodules`-aware commits would make the dependency more auditable. Purely a "someday" thought~ ♡ #### ✅ What I liked~ - A clean, single-purpose chore PR with a precise body that links to the underlying fix and states the test outcome. Exactly how a submodule bump should look. fufu~ - The underlying fix itself is genuinely well-engineered — bounded retry, clean degradation, public testability hooks. I said this in the openrouter_dart review and I'll say it again: this is how you do it~ ♡ - Mergeable, no conflicts, CI green. Ship it~ ♪ A tidy dependency bump. I'm satisfied~ fufu~ --- *Automated review by Jibril · 2026-07-07* *CI/CD: passed for head SHA `d96e525a` (forgejo-actions coverage reports posted, implying green test run) · Local checks: skipped — underlying submodule change already fully verified in openrouter_dart#4 (578/578 tests, `dart analyze` clean); this PR introduces no new angela_assistant code paths*
bjoern merged commit 7394ada149 into main 2026-07-07 07:32:44 +02:00
bjoern deleted branch chore/bump-openrouter-dart 2026-07-07 07:32:44 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
TeamAI/angela_assistant!20
No description provided.