Initialize MCP tools, orchestrator tools, plan generator, and system prompt.
(self)
| 221 | self.logger.event("loop_end", self.session.get_usage_summary()) |
| 222 | |
| 223 | def _setup(self) -> None: |
| 224 | """Initialize MCP tools, orchestrator tools, plan generator, and system prompt.""" |
| 225 | self._mcp_tools = self.mcp_client.list_tools() |
| 226 | |
| 227 | output_dir = Path(self.config.output_dir) |
| 228 | output_dir.mkdir(parents=True, exist_ok=True) |
| 229 | |
| 230 | # Each run gets a fresh task board to avoid stale tasks from previous |
| 231 | # runs accumulating. Timestamped filename also serves as a run log. |
| 232 | run_ts = datetime.now().strftime("%Y%m%d_%H%M%S") |
| 233 | task_board_path = output_dir / f"task_board_{run_ts}.json" |
| 234 | self._task_board = TaskBoard(persist_path=task_board_path) |
| 235 | |
| 236 | # Task management tools |
| 237 | self._orchestrator_tools = build_task_management_tools( |
| 238 | self._task_board, self._get_user_input |
| 239 | ) |
| 240 | |
| 241 | # Plan generation + verification tools |
| 242 | mcp_tool_names = [t["function"]["name"] for t in self._mcp_tools] |
| 243 | workflow_guide = self._load_workflow_language_guide() |
| 244 | self._tool_briefs = self._load_tool_briefs() |
| 245 | self._plan_generator = PlanGenerator( |
| 246 | llm_client=self.llm_client, |
| 247 | model=self.config.plan_generator_model, |
| 248 | plans_dir=output_dir / "plans", |
| 249 | available_tool_names=mcp_tool_names, |
| 250 | workflow_language_guide=workflow_guide, |
| 251 | temperature=self.config.temperature, |
| 252 | tool_briefs=self._tool_briefs, |
| 253 | executor_model=self.config.plan_executor_model, |
| 254 | ) |
| 255 | self._verifier = PlanVerifier( |
| 256 | available_tool_names=set(mcp_tool_names), |
| 257 | ) |
| 258 | plan_tools = build_plan_tools( |
| 259 | self._task_board, |
| 260 | self._plan_generator, |
| 261 | self._verifier, |
| 262 | self._get_user_input, |
| 263 | ) |
| 264 | self._orchestrator_tools.extend(plan_tools) |
| 265 | |
| 266 | # Plan execution tools (for reactive mode; plan mode uses direct calls) |
| 267 | self._plan_executor = PlanExecutor( |
| 268 | mcp_client=self.mcp_client, |
| 269 | llm_client=self.llm_client, |
| 270 | logger=self.logger, |
| 271 | output_dir=self.config.output_dir, |
| 272 | ) |
| 273 | execution_tools = build_execution_tools( |
| 274 | self._task_board, |
| 275 | self._plan_executor, |
| 276 | self._summarize_execution_result, |
| 277 | ) |
| 278 | self._orchestrator_tools.extend(execution_tools) |
| 279 | |
| 280 | self._all_tools = tools_to_openai_format( |
no test coverage detected