{"id":43496495,"url":"https://github.com/mm-uh/go-agent-platform","last_synced_at":"2026-02-03T10:38:18.236Z","repository":{"id":64318600,"uuid":"213749865","full_name":"mm-uh/go-agent-platform","owner":"mm-uh","description":"Agent Platform written in Golang","archived":false,"fork":false,"pushed_at":"2019-12-09T02:58:55.000Z","size":1290,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"develop","last_synced_at":"2024-06-22T17:32:26.654Z","etag":null,"topics":["agent-platform","distributed","distributed-computing","distributed-systems","golang","kademlia-dht"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mm-uh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-08T20:42:32.000Z","updated_at":"2019-12-23T21:20:32.000Z","dependencies_parsed_at":"2023-01-15T12:00:47.675Z","dependency_job_id":null,"html_url":"https://github.com/mm-uh/go-agent-platform","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mm-uh/go-agent-platform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mm-uh%2Fgo-agent-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mm-uh%2Fgo-agent-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mm-uh%2Fgo-agent-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mm-uh%2Fgo-agent-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mm-uh","download_url":"https://codeload.github.com/mm-uh/go-agent-platform/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mm-uh%2Fgo-agent-platform/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29041840,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-platform","distributed","distributed-computing","distributed-systems","golang","kademlia-dht"],"created_at":"2026-02-03T10:38:16.425Z","updated_at":"2026-02-03T10:38:18.224Z","avatar_url":"https://github.com/mm-uh.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Plataforma de Agentes\n\nUna plataforma de agente permite la creación de soluciones distribuidas utilizando recursos y conocimientos distribuidos. Para ello es necesario que se puedan registrar los distintos agentes y su funcionalidad así como la identificación, localización y búsqueda de estos acorde a sus funcionalidades..\n\n## Instalando\n\nPara ejecutar un nodo de nuestra plataforma necesita tener instalado [golang](https://golang.org). No necesita ningun componente adicional para correr nuestro entorno y tener una plataforma perfectamente funcional.\n\n```sh\ngo get -t -v github.com/mm-uh/go-agent-platform\n```\n\n### Usando docker\n\nEn caso de usted no querer instalar `Golang` para correr la plataforma, puede usar alternativamente [docker](https://www.docker.com).\n\nEn tal caso, de tener instalado correctamente docker, solo necesita o bien construirse su propia imagen de docker y correrla, o descargarsela desde [github](https://github.com/mm-uh/go-agent-platform/releases)\n\nEn caso de usted desear construir localmente la imagen, solo tiene que correr el siguiente comando:\n\n```sh\ndocker build -t \u003cimage-name\u003e .\n```\n\n## Ejecutando nodos\n\nTenemos dos variantes directas para la ejecucion de los nodos, una compilando directamente nuestra aplicacion, y la otra usando docker.\n\n### Ejecucion del compilado\n\nPara ejecutar la aplicacion solo se necesita anteriormente ejecutar la siguiente linea:\n\n```sh\nmake build\n```\n\nEste comando se encarga de compilar la apicacion y generar un binario por defecto `platform`.\n\nSi usted desea cambiarle el nombre solo necesita correlo de esta forma:\n\n```sh\nDEFAULT_APP_NAME=\u003cselected name\u003e make build\n```\n\n### Flags de ejecucion\n\n```sh\n❯ ./platform --help\nInvalid number arguments\nUsage:\napp \u003cip_to_run\u003e \u003cport_to_run\u003e [remote_ip] [remote_port]\n\n\u003cip_to_run\u003e   -\u003e IP that the app will take\n\u003chost_to_run\u003e -\u003e Port that the app will run\n[remote_ip]   -\u003e (Optional) IP of another platform\n[remote_port] -\u003e (Optional) Port of another platform\n```\n\n### En el caso de docker\n\nPosteriormente de tener la imagen, solo necesita correr la imagen con los parametros de la aplicacion, ejemplo:\n\n```sh\ndocker run --network=host -it --rm -p [bind ports propertly...] \u003cimage-name\u003e [normal flags]\n```\n\nEjemplo:\n\n```sh\ndocker run --network=host -it --rm -p 8082:8082 -p 9082:9082 -p 10082:10082 mm-uh/go-agent-platform:latest 192.168.0.110 8082 192.168.0.110 8081\n```\n\n## Adicionar agentes a la plataforma\n\nPara la adicion de agentes a la plataforma, se recomienda el uso de nuestras librerias:\n\n- [agent-libpython](http://github.com/mm-uh/agent-libpython)\n- [agent-libgo](http://github.com/mm-uh/agent-libgo)\n\nPara la generacion la genaracion de las librerias que se usan para consumir los servicios del API REST que tiene cada nodo de la plataforma usamos swagger, para describir dicha API y posteriormente se generaron las librerias.\n\nAmbas librerias contienen ademas una estructura o clase que recubre esos pedidos que facilitan la vida del programador y hace varias cosas, como es por ejemplo, implementar desde el primer momento, y ageno al usuario, un sistema de tolerancia-falla intrinseco en los puntos de acceso de la plataforma.\n\nPara mas detalles de como generar librerias de otros lenguajes ver [openapi](https://openapi-generator.tech/).\n\n## Arquitectura\n\nNuestra plataforma esta basada en un conjunto de nodos, donde dos nodos estan conectados si estan sobre la misma base de datos. Los nodos de nuestra plataforma utilizan como base de datos una tabla de hash distribuida(conocidas en la literatura como Distributed Hash Table[DHT]), basada en el algoritmo de `Kademlia`.\n\nAsociados a esta plataforma, se inscriben agentes, y la informacion de contacto se guarda por la plataforma par su posterior uso.\n\n### Interaccion con la plataforma\n\nPara la coneccion con la plataforma usamos el protocolo de coneccion REST: el API se encuentra totalmente descrita [aqui](https://github.com/mm-uh/go-agent-platform/blob/develop/swagger.yml)\n\n- /getAgent/{Name}\n  - Obtener un agente a partir de un nombre\n\n- /getPeers\n  - Obtiene una secuencia de los k nodos mas cercanos al nodo que realiza la peticxion\n\n- /registerAgent\n  - A partir de una definicion de agente(Se genera de forma automatica si se usa swagger), se registra la estancia de el agente\n\n- /addEndpoints\n  - Adiciona a un agente ya registrado un conjunto de puntos de acceso nuevos\n\n- /recoverAgent\n  - Recupera mediante la contrasena un agente\n\n- /editAgent\n  - Modifica las propiedades de un agente ya registrado\n\n- /getAllAgentsNames\n  - Obtiene todos los nombres de los agentes registrados\n\n- /getAllFunctionsNames\n  - Obtiene todos los nombres de las funciones registradas\n\n- /getAgentsForFunction/{Name}\n  - Obtiene el nombre de todos los agentes que pertenecen a una funcion dada\n\n- /getSimilarAgents/{Name}\n  - Obtiene la localizacion de un agente que dado un criterio determinado de tolerancia, establece que se pueda enviar un agente que sustituya a el que se envia\n\nTodos los puntos de acceso son relativos a `/api/v1`, ejemplo : `http://localhost:10080/api/v1/getPeers`\n\n### Publicar servicios\n\nPara publicar un Agente se usa el punto de acceso `/registerAgent` del API y en el caso de las librerias, su correspondiente encapzulamiento. A partir de ese momento, con solo tener los servicios tanto de comprobacion, como de documentacion, como del servicio en si,se puede comenzar a usar el agente registrado. \n\n### Buscar sevicios\n\nPara buscar servicios en nuestra plataforma, se establecen dos posibles escenarios.\n\nUno en el que usted necesite de un agente en especifico(`/getAgent/{Name}`), el cual retorna la forma de contactar un nodo que se encuetre funcionando.\n\nEl otro caso puede ser que se necesite las buscar por una funcionalidad, en cuyo caso solo se debe hacer un pedido al punto de acceso `getAgentsForFunction/{Name}` y se obtienen todos los agentes que tienen dicha funcionalidad.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmm-uh%2Fgo-agent-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmm-uh%2Fgo-agent-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmm-uh%2Fgo-agent-platform/lists"}