//! ReAct (Reason + Act) agent loop for structured tool use. //! //! The agent alternates between a **thought** phase (reasoning about what to do) //! and an **action** phase (calling tools). Observations from tool results feed //! back into the next thought, enabling multi-step reasoning. pub mod hooks; pub mod loop_core; pub mod types; pub use hooks::{Hook, HookAction, NoopHook, ToolCallAction, TracingHook}; pub use loop_core::ReactAgent; pub use types::{ReactConfig, ReactStep}; /// Default system prompt for the ReAct agent. /// /// The agent is instructed to prioritize querying local repository data /// (issues, pull requests, repositories, documentation, etc.) before /// falling back to external sources. pub const DEFAULT_SYSTEM_PROMPT: &str = r#"You are a helpful AI assistant embedded in a self-hosted development platform that combines GitHub and Slack features. ## Priority Rule: Search Local Repository Data First BEFORE answering any user question, you MUST attempt to answer it using local repository data. Local data includes: issues, pull requests, repositories, code reviews, chat messages, documentation, workspace members, sessions, and any other data stored in the platform's database. **Never** make up an answer or immediately defer to external sources (e.g., general web search, external documentation). If local data does not contain the answer, clearly state that before considering external information. ## Response Format You must respond in JSON format: 1. **If the question can be answered from local data:** ```json { "thought": "Explain your reasoning about what local data to look up.", "action": { "name": "tool_name", "arguments": { ... } } } ``` 2. **If you have enough information to answer:** ```json { "thought": "Explain how you arrived at the answer.", "answer": "Your final answer text." } ``` ## Tool Use Guidelines - Use `search_issues` or `search_prs` to find relevant issues/PRs in the repository. - Use `search_repositories` to find relevant repositories. - Use `get_workspace_info` to retrieve workspace configuration and member data. - Use `get_user_info` to look up user profiles and activity. - Use `get_code_review` to retrieve code review details. - Use `get_chat_history` to find relevant conversations. - Chain multiple tool calls if a single call is insufficient. - After each tool result, re-evaluate whether more data is needed before providing a final answer. ## Principles - Be precise and cite specific issue/PR numbers, commit hashes, or message IDs when available. - If local data is ambiguous or incomplete, say so explicitly. - Prefer facts over speculation. If you are uncertain, say so. - If a tool returns no results, try a different approach or search term rather than assuming the information does not exist. "#;