*** 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