IR
irwinrodriguez.dev
Volver a documentacion

Configuracion

Herramientas personalizadas (UDTs)

FoxAgent soporta herramientas definidas por el usuario (UDTs) que tu agente de IA puede invocar. Las UDTs son clases VFP que heredan de FoxAgentTool y exponen parametros y logica de ejecucion.

Ejemplo de UDT

* GetSaldoTool.prg - Coloca este archivo en tu carpeta Tools\

DEFINE CLASS GetSaldoTool AS FoxAgentTool

  ToolName = "get_saldo"
  ToolDescription = "Obtiene el saldo de un cliente por su codigo"

  FUNCTION DefineParameters()
    THIS.AddParam("clienteCode", "number", "Codigo del cliente", .T.)
  ENDFUNC

  FUNCTION Execute(toContext)
    LOCAL lnCode, lcResult
    lnCode = THIS.GetParam("clienteCode")
    
    * Tu logica de negocio aqui
    lcResult = "Cliente " + TRANSFORM(lnCode) + ": $1500.00"
    
    RETURN THIS.Ok(lcResult)
  ENDFUNC

ENDDEFINE

Tipos de parametros soportados

Al definir parametros con AddParam(), puedes usar los siguientes tipos:

Tipo Descripcion Ejemplo
"string" Texto de cualquier longitud THIS.AddParam("nombre", "string", "Nombre del cliente", .T.)
"number" Numero entero o decimal THIS.AddParam("cantidad", "number", "Cantidad", .T.)
"boolean" Valor logico (.T. o .F.) THIS.AddParam("activo", "boolean", "Esta activo?", .F.)
"date" Fecha (formato YYYY-MM-DD) THIS.AddParam("fecha", "date", "Fecha de inicio", .F.)
"object" Objeto JSON complejo THIS.AddParam("filtro", "object", "Filtros avanzados", .F.)

El cuarto parametro de AddParam() indica si el parametro es obligatorio (.T.) u opcional (.F.).

Ejemplo con multiples parametros

* SearchClientsTool.prg

DEFINE CLASS SearchClientsTool AS FoxAgentTool

  ToolName = "search_clients"
  ToolDescription = "Busca clientes por nombre, codigo postal o saldo minimo"

  FUNCTION DefineParameters()
    THIS.AddParam("searchText", "string", "Texto a buscar en nombre o codigo", .T.)
    THIS.AddParam("postalCode", "string", "Filtrar por codigo postal", .F.)
    THIS.AddParam("minBalance", "number", "Saldo minimo requerido", .F.)
    THIS.AddParam("activeOnly", "boolean", "Solo clientes activos", .F.)
  ENDFUNC

  FUNCTION Execute(toContext)
    LOCAL lcSearch, lcPostal, lnMinBal, llActive
    LOCAL lcQuery, lcResult
    
    lcSearch  = THIS.GetParam("searchText")
    lcPostal  = THIS.GetParam("postalCode")
    lnMinBal  = THIS.GetParam("minBalance")
    llActive  = THIS.GetParam("activeOnly")
    
    * Construir consulta dinamica
    lcQuery = "SELECT * FROM CLIENTES WHERE "
    lcQuery = lcQuery + "(cNombre LIKE '%" + lcSearch + "%' OR cCodigo = '" + lcSearch + "')"
    
    IF !EMPTY(lcPostal)
      lcQuery = lcQuery + " AND cCodPost = '" + lcPostal + "'"
    ENDIF
    
    IF lnMinBal > 0
      lcQuery = lcQuery + " AND nSaldo >= " + TRANSFORM(lnMinBal)
    ENDIF
    
    IF llActive
      lcQuery = lcQuery + " AND lActivo = .T."
    ENDIF
    
    * Ejecutar y retornar resultados
    &lcQuery INTO CURSOR curResult
    
    SELECT * FROM curResult INTO ARRAY laResult
    lcResult = TRANSFORM(ALEN(laResult,1)) + " clientes encontrados"
    
    RETURN THIS.Ok(lcResult)
  ENDFUNC

ENDDEFINE

Descubrimiento automatico

Las UDTs se cargan automaticamente desde la carpeta configurada con SetToolsFolder(). Solo necesitas colocar tus archivos .prg en esa carpeta y FoxAgent los descubrira al conectar.

LOCAL loBridge
loBridge = CREATEOBJECT("FoxAgent.Bridge")
loBridge.SetInstance(_VFP)
loBridge.SetToolsFolder("C:\MiProyecto\Tools")  && Scan automatico
loBridge.Connect("mi-app-001", "Mi App", 3)
SDK incluido El instalador de FoxAgent incluye la clase base FoxAgentTool.prg y una plantilla MyToolTemplate.prg en la carpeta SDK. Copialos a tu proyecto como punto de partida.

Sistema de roles

FoxAgent tiene 4 niveles de permisos que controlan que herramientas puede usar tu agente de IA:

Nivel Nombre Acceso
0 Observer Solo lectura: listar instancias, ver variables, cursores, formularios
1 Operator Lectura + escritura: set_variable, exec_command, UDTs
2 Developer Operator + get_call_stack, get_object_members, reload_procedure
3 Admin Developer + close_cursors, execute_tool, build_project

El rol se establece al conectar con Connect(instanceId, displayName, role) y puede cambiarse en caliente con set_role.

Licencia

FoxAgent usa licencias validadas. Coloca el archivo foxagent.lic junto al ejecutable del Broker:

# Ruta de la licencia
C:\Program Files\FoxAgent\foxagent.lic

# Sin licencia, el Broker arranca en modo evaluacion
Modo evaluacion Sin archivo de licencia, el Broker arranca normalmente en modo evaluacion. La licencia solo es requerida para uso en produccion.

Herramientas integradas

FoxAgent incluye 33 herramientas integradas organizadas por nivel:

Inspeccion (Nivel 0)

  • list_instances — Ver instancias VFP conectadas
  • get_variables — Leer variables publicas
  • get_cursors — Ver cursores abiertos
  • get_cursor_data — Leer filas de un cursor
  • get_active_form — Formulario activo
  • get_form_controls — Controles del formulario
  • take_screenshot — Captura de pantalla
  • eval_expression — Evaluar expresion VFP

Ejecucion (Nivel 1)

  • set_variable — Asignar variable
  • exec_command — Ejecutar comando VFP
  • set_control_value — Cambiar valor de control
  • refresh_form — Refrescar formulario

Desarrollo (Nivel 2)

  • get_call_stack — Pila de llamadas
  • get_object_members — Miembros de objeto
  • reload_procedure — Recargar PRG
  • run_report — Ejecutar reporte
  • get_project_structure — Estructura del proyecto
  • get_source_file — Codigo fuente
  • build_project — Compilar proyecto

Admin (Nivel 3)

  • close_cursors — Cerrar cursores
  • execute_tool — Ejecutar UDT
  • get_tools — Lista de herramientas