fix: skill injection, tool call timeout

This commit is contained in:
Timothy
2026-03-16 16:26:16 -07:00
parent ced64541b9
commit c7d70e0fb1
5 changed files with 43 additions and 2 deletions
+1 -1
View File
@@ -229,7 +229,7 @@ class LoopConfig:
# Maximum seconds a single tool call may take before being killed.
# Prevents hung MCP servers (especially browser/GCU tools) from
# blocking the entire event loop indefinitely. 0 = no timeout.
tool_call_timeout_seconds: float = 120.0
tool_call_timeout_seconds: float = 60.0
# --- Lifecycle hooks ---
# Hooks are async callables keyed by event name. Supported events:
+11
View File
@@ -205,6 +205,17 @@ class GraphExecutor:
self.skills_catalog_prompt = skills_catalog_prompt
self.protocols_prompt = protocols_prompt
if protocols_prompt:
self.logger.info(
"GraphExecutor[%s] received protocols_prompt (%d chars)",
stream_id, len(protocols_prompt),
)
else:
self.logger.warning(
"GraphExecutor[%s] received EMPTY protocols_prompt",
stream_id,
)
# Parallel execution settings
self.enable_parallel_execution = enable_parallel_execution
self._parallel_config = parallel_config or ParallelExecutionConfig()
@@ -237,6 +237,18 @@ class ExecutionStream:
self._skills_catalog_prompt = skills_catalog_prompt
self._protocols_prompt = protocols_prompt
_es_logger = logging.getLogger(__name__)
if protocols_prompt:
_es_logger.info(
"ExecutionStream[%s] received protocols_prompt (%d chars)",
stream_id, len(protocols_prompt),
)
else:
_es_logger.warning(
"ExecutionStream[%s] received EMPTY protocols_prompt",
stream_id,
)
# Create stream-scoped runtime
self._runtime = StreamRuntime(
stream_id=stream_id,
@@ -216,6 +216,16 @@ async def create_queen(
+ worker_identity
)
# ---- Default skill protocols -------------------------------------
try:
from framework.skills.manager import SkillsManager
_queen_skills_mgr = SkillsManager()
_queen_skills_mgr.load()
phase_state.protocols_prompt = _queen_skills_mgr.protocols_prompt
except Exception:
logger.debug("Queen skill loading failed (non-fatal)", exc_info=True)
# ---- Persona hook ------------------------------------------------
_session_llm = session.llm
_session_event_bus = session.event_bus
@@ -109,6 +109,9 @@ class QueenPhaseState:
prompt_staging: str = ""
prompt_running: str = ""
# Default skill operational protocols — appended to every phase prompt
protocols_prompt: str = ""
def get_current_tools(self) -> list:
"""Return tools for the current phase."""
if self.phase == "planning":
@@ -133,7 +136,12 @@ class QueenPhaseState:
from framework.agents.queen.queen_memory import format_for_injection
memory = format_for_injection()
return base + ("\n\n" + memory if memory else "")
parts = [base]
if self.protocols_prompt:
parts.append(self.protocols_prompt)
if memory:
parts.append(memory)
return "\n\n".join(parts)
async def _emit_phase_event(self) -> None:
"""Publish a QUEEN_PHASE_CHANGED event so the frontend updates the tag."""