feat: add optional prompt-toolkit support to debug.py (#2461)

* feat: add optional prompt-toolkit support to debug.py

Use PromptSession.prompt_async() for arrow-key navigation and input
history when prompt-toolkit is available, falling back to plain input()
with a helpful install tip otherwise.

Made-with: Cursor

* fix: handle EOFError gracefully in debug.py

Catch EOFError alongside KeyboardInterrupt so that Ctrl-D exits
cleanly instead of printing a traceback.

Made-with: Cursor
This commit is contained in:
He Wang
2026-04-23 17:49:18 +08:00
committed by GitHub
parent bd35cd39aa
commit c42ae3af79
2 changed files with 19 additions and 4 deletions
+18 -3
View File
@@ -24,6 +24,14 @@ from langgraph.runtime import Runtime
from deerflow.agents import make_lead_agent from deerflow.agents import make_lead_agent
try:
from prompt_toolkit import PromptSession
from prompt_toolkit.history import InMemoryHistory
_HAS_PROMPT_TOOLKIT = True
except ImportError:
_HAS_PROMPT_TOOLKIT = False
load_dotenv() load_dotenv()
logging.basicConfig( logging.basicConfig(
@@ -58,14 +66,21 @@ async def main():
agent = make_lead_agent(config) agent = make_lead_agent(config)
session = PromptSession(history=InMemoryHistory()) if _HAS_PROMPT_TOOLKIT else None
print("=" * 50) print("=" * 50)
print("Lead Agent Debug Mode") print("Lead Agent Debug Mode")
print("Type 'quit' or 'exit' to stop") print("Type 'quit' or 'exit' to stop")
if not _HAS_PROMPT_TOOLKIT:
print("Tip: `uv sync --group dev` to enable arrow-key & history support")
print("=" * 50) print("=" * 50)
while True: while True:
try: try:
user_input = input("\nYou: ").strip() if session:
user_input = (await session.prompt_async("\nYou: ")).strip()
else:
user_input = input("\nYou: ").strip()
if not user_input: if not user_input:
continue continue
if user_input.lower() in ("quit", "exit"): if user_input.lower() in ("quit", "exit"):
@@ -81,8 +96,8 @@ async def main():
last_message = result["messages"][-1] last_message = result["messages"][-1]
print(f"\nAgent: {last_message.content}") print(f"\nAgent: {last_message.content}")
except KeyboardInterrupt: except (KeyboardInterrupt, EOFError):
print("\nInterrupted. Goodbye!") print("\nGoodbye!")
break break
except Exception as e: except Exception as e:
print(f"\nError: {e}") print(f"\nError: {e}")
+1 -1
View File
@@ -20,7 +20,7 @@ dependencies = [
] ]
[dependency-groups] [dependency-groups]
dev = ["pytest>=9.0.3", "ruff>=0.14.11"] dev = ["prompt-toolkit>=3.0.0", "pytest>=9.0.3", "ruff>=0.14.11"]
[tool.uv.workspace] [tool.uv.workspace]
members = ["packages/harness"] members = ["packages/harness"]