*** Settings ***
Documentation    Tool lifecycle runtime smoke tests
Library          Process
Library          OperatingSystem

*** Test Cases ***
Tool Package Is Importable
    [Documentation]    Verify the tool lifecycle package can be imported
    ${result}=    Run Process    ${PYTHON}    -c
    ...    from cleveragents.tool import ToolRuntime, ToolExecutionContext, ToolResult, ToolDescriptor, ToolLifecycleCache, CancellationToken, Change, ChangeOperation, BoundResource; print('OK')
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    OK

Tool Context Creation Works
    [Documentation]    Verify ToolExecutionContext can be created
    ${code}=    Set Variable    from cleveragents.tool import ToolExecutionContext; ctx = ToolExecutionContext(plan_id='test-plan'); print(f'plan={ctx.plan_id} changes={len(ctx.changes)} traces={len(ctx.traces)}')
    ${result}=    Run Process    ${PYTHON}    -c    ${code}
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    plan=test-plan
    Should Contain    ${result.stdout}    changes=0
    Should Contain    ${result.stdout}    traces=0

Cancellation Token Works
    [Documentation]    Verify CancellationToken cancel and check
    ${code}=    Set Variable    from cleveragents.tool import CancellationToken; t = CancellationToken(); print(f'before={t.is_cancelled}'); t.cancel(); print(f'after={t.is_cancelled}')
    ${result}=    Run Process    ${PYTHON}    -c    ${code}
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    before=False
    Should Contain    ${result.stdout}    after=True

Schema Validator Works
    [Documentation]    Verify JSON Schema validation
    ${code}=    Set Variable    from cleveragents.tool import validate_tool_input, ToolSchemaValidationError; schema = {"type": "object", "properties": {"x": {"type": "string"}}, "required": ["x"]}; validate_tool_input({"x": "hi"}, schema); print('valid'); ok = False\ntry:\n validate_tool_input({"x": 1}, schema)\nexcept ToolSchemaValidationError:\n ok = True\nprint(f'invalid_caught={ok}')
    ${result}=    Run Process    ${PYTHON}    -c    ${code}
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    valid
    Should Contain    ${result.stdout}    invalid_caught=True

Tool Runtime Registration Works
    [Documentation]    Verify ToolRuntime register and list
    ${code}=    Set Variable    from cleveragents.tool import ToolRuntime; from cleveragents.domain.models.core.tool import Tool, ToolSource, ToolCapability; rt = ToolRuntime(); t = Tool(name='test/read', description='Read', source=ToolSource.BUILTIN, capability=ToolCapability(read_only=True)); print(f'before={rt.list_tools()}'); rt.register_tool(t, None); print(f'after={rt.list_tools()}')
    ${result}=    Run Process    ${PYTHON}    -c    ${code}
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    before=[]
    Should Contain    ${result.stdout}    test/read

Lifecycle Cache Works
    [Documentation]    Verify ToolLifecycleCache put/get
    ${code}=    Set Variable    from cleveragents.tool import ToolLifecycleCache; c = ToolLifecycleCache(); print(f'plans={c.plan_count}'); c.put('p1', 'tool/a', 'dummy'); print(f'plans_after={c.plan_count}'); r = c.get('p1', 'tool/a'); print(f'got={r}')
    ${result}=    Run Process    ${PYTHON}    -c    ${code}
    Should Be Equal As Integers    ${result.rc}    0
    Should Contain    ${result.stdout}    plans=0
    Should Contain    ${result.stdout}    plans_after=1
    Should Contain    ${result.stdout}    got=dummy
