gemcode 0.3.24__tar.gz → 0.3.25__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.24/src/gemcode.egg-info → gemcode-0.3.25}/PKG-INFO +1 -1
- {gemcode-0.3.24 → gemcode-0.3.25}/pyproject.toml +1 -1
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tui/scrollback.py +40 -7
- {gemcode-0.3.24 → gemcode-0.3.25/src/gemcode.egg-info}/PKG-INFO +1 -1
- {gemcode-0.3.24 → gemcode-0.3.25}/LICENSE +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/MANIFEST.in +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/README.md +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/setup.cfg +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/__init__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/__main__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/agent.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/audit.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/autocompact.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/callbacks.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/capability_routing.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/cli.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/compaction.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/computer_use/__init__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/computer_use/browser_computer.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/config.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/context_budget.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/context_warning.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/credentials.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/hitl_session.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/interactions.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/invoke.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/kairos_daemon.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/limits.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/live_audio_engine.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/logging_config.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/mcp_loader.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/memory/__init__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/memory/embedding_memory_service.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/memory/file_memory_service.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/modality_tools.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/model_errors.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/model_routing.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/paths.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/permissions.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/plugins/__init__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/plugins/terminal_hooks_plugin.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/prompt_suggestions.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/query/__init__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/query/config.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/query/deps.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/query/engine.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/query/stop_hooks.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/query/token_budget.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/query/transitions.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/repl_commands.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/repl_slash.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/session_runtime.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/slash_commands.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/thinking.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tool_prompt_manifest.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tool_registry.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/__init__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/bash.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/browser.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/edit.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/filesystem.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/search.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/shell.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/shell_gate.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/subtask.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/think.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/todo.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools/web.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tools_inspector.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/trust.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tui/input_handler.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tui/spinner.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tui/welcome_banner.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/tui/welcome_rich.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/version.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/vertex.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/web/__init__.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/web/claude_sse_adapter.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/web/terminal_repl.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode/workspace_hints.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode.egg-info/SOURCES.txt +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode.egg-info/dependency_links.txt +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode.egg-info/entry_points.txt +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode.egg-info/requires.txt +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/src/gemcode.egg-info/top_level.txt +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_agent_instruction.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_autocompact.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_capability_routing.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_claude_web_adapter_sse.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_cli_init.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_computer_use_permissions.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_context_budget.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_context_warning.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_credentials.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_interactive_permission_ask.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_kairos_scheduler.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_modality_tools.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_model_error_retry.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_model_errors.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_model_routing.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_paths.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_permissions.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_prompt_suggestions.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_repl_commands.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_repl_slash.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_slash_commands.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_thinking_config.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_token_budget.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_tool_context_circulation.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_tools.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_tools_inspector.py +0 -0
- {gemcode-0.3.24 → gemcode-0.3.25}/tests/test_workspace_hints.py +0 -0
|
@@ -563,28 +563,58 @@ async def run_gemcode_scrollback_tui(
|
|
|
563
563
|
if not interactive_enabled:
|
|
564
564
|
print("")
|
|
565
565
|
print(
|
|
566
|
-
f" ⎿ {ansi.blue_warn}{ansi.bold}Permission needed{ansi.reset} for
|
|
567
|
-
f"
|
|
566
|
+
f" ⎿ {ansi.blue_warn}{ansi.bold}Permission needed{ansi.reset} for "
|
|
567
|
+
f"{ansi.bold}{tool_name}{ansi.reset} — auto-denying "
|
|
568
|
+
f"(run with --yes or /computer on to allow)."
|
|
568
569
|
)
|
|
569
570
|
ok = False
|
|
570
571
|
else:
|
|
571
572
|
print("")
|
|
572
573
|
if hint:
|
|
573
574
|
print(
|
|
574
|
-
f" ⎿ {ansi.blue}{ansi.bold}Permission needed{ansi.reset}
|
|
575
|
+
f" ⎿ {ansi.blue}{ansi.bold}Permission needed{ansi.reset} "
|
|
576
|
+
f"for {ansi.bold}{tool_name}{ansi.reset}: {hint}"
|
|
575
577
|
)
|
|
576
578
|
else:
|
|
577
579
|
print(
|
|
578
|
-
f" ⎿ {ansi.blue}{ansi.bold}Permission needed{ansi.reset}
|
|
580
|
+
f" ⎿ {ansi.blue}{ansi.bold}Permission needed{ansi.reset} "
|
|
581
|
+
f"for {ansi.bold}{tool_name}{ansi.reset}."
|
|
579
582
|
)
|
|
583
|
+
sys.stdout.flush()
|
|
584
|
+
# Use run_in_executor so input() runs in a thread — this avoids
|
|
585
|
+
# blocking the asyncio event loop and prevents the terminal-state
|
|
586
|
+
# conflict that occurs when prompt_toolkit's raw-mode setup causes
|
|
587
|
+
# synchronous input() to not recognise \r as end-of-line.
|
|
588
|
+
prompt_str = (
|
|
589
|
+
f" ⎿ Allow? "
|
|
590
|
+
f"[{ansi.blue_ok}y{ansi.reset} = yes"
|
|
591
|
+
f" /{ansi.dim}Enter = no{ansi.reset}] "
|
|
592
|
+
)
|
|
580
593
|
try:
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
594
|
+
# run_in_executor runs input() in a thread so the asyncio event
|
|
595
|
+
# loop stays alive (spinner can update, timeouts can fire).
|
|
596
|
+
# get_running_loop() is the correct call inside an async function.
|
|
597
|
+
_loop = asyncio.get_running_loop()
|
|
598
|
+
raw = await _loop.run_in_executor(None, input, prompt_str)
|
|
599
|
+
# Strip \r and \n — handles raw-mode terminals where pressing
|
|
600
|
+
# Enter sends \r (shown as ^M) instead of \n.
|
|
601
|
+
ans = (raw or "").replace("\r", "").replace("\n", "").strip().lower()
|
|
584
602
|
except EOFError:
|
|
585
603
|
ans = ""
|
|
586
604
|
ok = ans in ("y", "yes")
|
|
587
605
|
|
|
606
|
+
# Explicit visual feedback — user knows their answer was received.
|
|
607
|
+
if ok:
|
|
608
|
+
print(
|
|
609
|
+
f" ⎿ {ansi.blue_ok}{ansi.bold}Approved{ansi.reset} — "
|
|
610
|
+
f"continuing…"
|
|
611
|
+
)
|
|
612
|
+
else:
|
|
613
|
+
print(
|
|
614
|
+
f" ⎿ {ansi.dim}Denied — skipping {tool_name}.{ansi.reset}"
|
|
615
|
+
)
|
|
616
|
+
sys.stdout.flush()
|
|
617
|
+
|
|
588
618
|
parts.append(
|
|
589
619
|
types.Part(
|
|
590
620
|
function_response=types.FunctionResponse(
|
|
@@ -596,6 +626,9 @@ async def run_gemcode_scrollback_tui(
|
|
|
596
626
|
)
|
|
597
627
|
current_message = types.Content(role="user", parts=parts)
|
|
598
628
|
do_reset = False
|
|
629
|
+
# Restart the spinner so the user knows the agent is working again
|
|
630
|
+
# after they answered the permission prompt.
|
|
631
|
+
_start_anim("Working\u2026")
|
|
599
632
|
|
|
600
633
|
print("")
|
|
601
634
|
if os.environ.get("GEMCODE_TUI_TURN_FOOTER", "1").lower() in (
|
|
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
|