import assert from 'node:assert/strict' import { determineStudioAgentLoopAction } from '../../index' import { run } from './factories' export async function runLoopTests() { await run('loop policy finishes when the assistant stops calling tools', async () => { const decision = determineStudioAgentLoopAction({ finishReason: 'stop', toolCallCount: 0, step: 0, maxSteps: 8 }) assert.deepEqual(decision, { type: 'finish' }) }) await run('loop policy continues when tool calls are returned with budget left', async () => { const decision = determineStudioAgentLoopAction({ finishReason: 'tool_calls', toolCallCount: 2, step: 2, maxSteps: 8 }) assert.deepEqual(decision, { type: 'continue' }) }) await run('loop policy aborts when tool calls would exceed the safety step limit', async () => { const decision = determineStudioAgentLoopAction({ finishReason: 'tool_calls', toolCallCount: 1, step: 7, maxSteps: 8 }) assert.deepEqual(decision, { type: 'abort', message: 'Stopped after reaching the Studio agent step limit (8).' }) }) await run('loop policy surfaces provider stop reasons without leaking loop internals', async () => { const decision = determineStudioAgentLoopAction({ finishReason: 'length', toolCallCount: 0, step: 0, maxSteps: 8 }) assert.deepEqual(decision, { type: 'abort', message: 'Studio agent response hit the model output limit before finishing.' }) }) console.log(' Loop tests passed') }