import os
import sys
import asyncio
import json

sys.path.insert(0, '/root/02-production/nanobot')
os.chdir('/root/02-production/nanobot')
os.environ['HTTPS_PROXY'] = 'socks5://127.0.0.1:20000'
os.environ['HTTP_PROXY'] = 'socks5://127.0.0.1:20000'

from nanobot.config.loader import load_config
from nanobot.providers.responses_http_provider import ResponsesHTTPProvider
from nanobot.agent.loop import AgentLoop
from nanobot.bus.queue import MessageBus
from nanobot.config.paths import get_cron_dir
from nanobot.cron.service import CronService

cfg = load_config()
bus = MessageBus()
cron = CronService(get_cron_dir() / 'jobs.json')
loop = AgentLoop(
    bus=bus,
    provider=None,
    workspace=cfg.workspace_path,
    model=cfg.agents.defaults.model,
    max_iterations=cfg.agents.defaults.max_tool_iterations,
    context_window_tokens=cfg.agents.defaults.context_window_tokens,
    web_search_config=cfg.tools.web.search,
    web_proxy=cfg.tools.web.proxy or None,
    exec_config=cfg.tools.exec,
    cron_service=cron,
    restrict_to_workspace=cfg.tools.restrict_to_workspace,
    mcp_servers=cfg.tools.mcp_servers,
    channels_config=cfg.channels,
)
session = loop.sessions.get_or_create('cli:direct')
all_history = session.get_history(max_messages=0)
tool_defs = loop.tools.get_definitions()
p = cfg.get_provider(cfg.agents.defaults.model)
provider = ResponsesHTTPProvider(api_key=p.api_key, api_base=cfg.get_api_base(cfg.agents.defaults.model), default_model=cfg.agents.defaults.model, extra_headers=p.extra_headers)

async def main():
    print('all_history_len', len(all_history))
    for count in [0, 1, 2, 4, 6, 8, 10, 12]:
        history = all_history[-count:] if count else []
        messages = loop.context.build_messages(history=history, current_message='hello', channel='cli', chat_id='direct')
        body = provider._adapter.build_request(messages=messages, model=cfg.agents.defaults.model, max_output_tokens=8192, stream=False, tools=tool_defs)
        body_json = json.dumps(body, ensure_ascii=False)
        resp = await provider.chat(messages=messages, tools=tool_defs, model=cfg.agents.defaults.model)
        print('count', count, 'body_len', len(body_json), 'finish', resp.finish_reason, 'snippet', (resp.content or '')[:80].replace('\n', ' '))

asyncio.run(main())
