// @harn-entrypoint-category agent.stdlib
import { __agent_loop_run } from "std/agent/loop_run"
import "std/agent/loop_support"
import {
__agent_loop_fire_resume_continuity,
__loop_progress_nudge_text,
} from "std/agent/loop_turn_options"
pub fn __progress_nudge_text(depth, has_tools, paradigm, made_tool_calls = false) {
return __loop_progress_nudge_text(depth, has_tools, paradigm, made_tool_calls)
}
/**
* agent_loop.
*
* @effects: [host, agent]
* @errors: []
* @api_stability: experimental
*/
pub fn agent_loop(message, system_prompt = nil, options = nil) {
let opts = agent_loop_options(agent_progress_apply_options(options))
opts = opts + {tools: agent_lifecycle_tools(opts?.tools, opts)}
if system_prompt != nil && system_prompt != "" {
opts = opts + {system: system_prompt}
}
const session = agent_session_init(message, system_prompt, opts)
if session?.done {
return session.result
}
agent_scratchpad_init(session, opts)
if opts?._tool_format_override != nil {
agent_emit_event(session.session_id, "tool_format_override", opts._tool_format_override)
}
if opts?._tool_format_capability_gap != nil {
agent_emit_event(session.session_id, "capability_gap", opts._tool_format_capability_gap)
}
defer {
try {
__host_mcp_disconnect(session.session_id)
} catch (e) {
}
}
opts = __agent_loop_fire_resume_continuity(session, opts)
opts = agent_stance_prepare(session, message, opts)
return __agent_loop_run(message, session, opts)
}