gemcode 0.3.45__tar.gz → 0.3.46__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gemcode-0.3.45/src/gemcode.egg-info → gemcode-0.3.46}/PKG-INFO +1 -1
- {gemcode-0.3.45 → gemcode-0.3.46}/pyproject.toml +1 -1
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tui/scrollback.py +29 -0
- {gemcode-0.3.45 → gemcode-0.3.46/src/gemcode.egg-info}/PKG-INFO +1 -1
- {gemcode-0.3.45 → gemcode-0.3.46}/LICENSE +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/MANIFEST.in +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/README.md +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/setup.cfg +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/__init__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/__main__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/agent.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/audit.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/autocompact.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/callbacks.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/capability_routing.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/cli.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/compaction.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/computer_use/__init__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/computer_use/browser_computer.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/config.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/context_budget.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/context_warning.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/credentials.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/hitl_session.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/hooks.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/intent_classifier.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/interactions.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/invoke.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/kairos_daemon.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/limits.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/live_audio_engine.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/logging_config.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/mcp_loader.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/memory/__init__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/memory/embedding_memory_service.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/memory/file_memory_service.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/modality_tools.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/model_errors.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/model_routing.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/openapi_loader.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/paths.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/permissions.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/plugins/__init__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/pricing.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/prompt_suggestions.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/query/__init__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/query/config.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/query/deps.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/query/engine.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/query/stop_hooks.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/query/token_budget.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/query/transitions.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/refine.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/repl_commands.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/repl_slash.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/review_agent.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/session_runtime.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/session_store.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/slash_commands.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/thinking.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tool_prompt_manifest.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tool_registry.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/__init__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/bash.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/browser.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/edit.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/filesystem.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/notes.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/search.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/shell.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/shell_gate.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/subtask.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/think.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/todo.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools/web.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tools_inspector.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/trust.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tui/input_handler.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tui/spinner.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tui/welcome_banner.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/tui/welcome_rich.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/version.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/vertex.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/web/__init__.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/web/claude_sse_adapter.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/web/terminal_repl.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode/workspace_hints.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode.egg-info/SOURCES.txt +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode.egg-info/dependency_links.txt +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode.egg-info/entry_points.txt +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode.egg-info/requires.txt +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/src/gemcode.egg-info/top_level.txt +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_agent_instruction.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_autocompact.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_capability_routing.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_claude_web_adapter_sse.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_cli_init.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_computer_use_permissions.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_context_budget.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_context_warning.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_credentials.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_interactive_permission_ask.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_kairos_scheduler.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_modality_tools.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_model_error_retry.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_model_errors.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_model_routing.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_paths.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_permissions.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_prompt_suggestions.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_repl_commands.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_repl_slash.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_slash_commands.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_thinking_config.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_token_budget.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_tool_context_circulation.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_tools.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_tools_inspector.py +0 -0
- {gemcode-0.3.45 → gemcode-0.3.46}/tests/test_workspace_hints.py +0 -0
|
@@ -86,6 +86,25 @@ def format_tool_call_extras(fc) -> str:
|
|
|
86
86
|
return ""
|
|
87
87
|
|
|
88
88
|
|
|
89
|
+
def _events_to_text_best_effort(events: list) -> str:
|
|
90
|
+
"""Fallback extraction of assistant text from ADK events."""
|
|
91
|
+
parts: list[str] = []
|
|
92
|
+
for event in events or []:
|
|
93
|
+
try:
|
|
94
|
+
content = getattr(event, "content", None)
|
|
95
|
+
if not content or not getattr(content, "parts", None):
|
|
96
|
+
continue
|
|
97
|
+
if getattr(event, "author", None) == "user":
|
|
98
|
+
continue
|
|
99
|
+
for part in getattr(content, "parts", []) or []:
|
|
100
|
+
t = getattr(part, "text", None)
|
|
101
|
+
if isinstance(t, str) and t:
|
|
102
|
+
parts.append(t)
|
|
103
|
+
except Exception:
|
|
104
|
+
continue
|
|
105
|
+
return "".join(parts).strip()
|
|
106
|
+
|
|
107
|
+
|
|
89
108
|
def _events_had_non_confirmation_tools(events: list) -> bool:
|
|
90
109
|
for ev in events:
|
|
91
110
|
try:
|
|
@@ -728,6 +747,16 @@ async def run_gemcode_scrollback_tui(
|
|
|
728
747
|
final_text = thought_text
|
|
729
748
|
thought_text = ""
|
|
730
749
|
|
|
750
|
+
# Second-pass fallback: sometimes streamed parsing misses text (ADK event shape
|
|
751
|
+
# changes, tool plugins rewriting events, etc.). Recover from the full event list.
|
|
752
|
+
if not final_text:
|
|
753
|
+
try:
|
|
754
|
+
recovered = _events_to_text_best_effort(events)
|
|
755
|
+
if recovered:
|
|
756
|
+
final_text = recovered
|
|
757
|
+
except Exception:
|
|
758
|
+
pass
|
|
759
|
+
|
|
731
760
|
# If the model produced no visible text at all, show an explicit hint
|
|
732
761
|
# instead of returning to the prompt silently.
|
|
733
762
|
if not final_text and not thought_text and not assistant_wrote_text:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|