Guía Rápida de ACP

La implementación de referencia de ACP está escrita en Go y cubre los cuatro niveles de conformidad (L1–L4): 23 paquetes, primitivas criptográficas (Ed25519 + JCS) y 138 vectores de prueba de cumplimiento con cadenas de hash y firmas reales.

Los SDKs en Python y JavaScript están en la hoja de ruta. Hoy, la implementación Go es el punto de partida canónico.

⚡ Sin instalación: Ejecutar con Docker

Sin necesidad de instalar Go. Descarga la imagen pre-construida desde GHCR e inicia el servidor de referencia ACP con un solo comando.

docker run -p 8080:8080 \
  -e ACP_INSTITUTION_PUBLIC_KEY=cA4s58S2dEJ-qye6EpJaJKKaVfvPT8mAQf97Vo8TInk \
  ghcr.io/chelof100/acp-server:latest

La clave es RFC 8037 Test Key A — solo para desarrollo. El servidor inicia en http://localhost:8080. Verificar con: curl http://localhost:8080/acp/v1/health

Python: Demo de Admission Control

Ejecuta el demo offline del SDK Python — sin servidor. Demuestra el patrón ACPAdmissionGuard: emitir un token de capacidad, ejecutar una verificación de admisión y actuar solo si el resultado es APPROVED.

git clone https://github.com/chelof100/acp-framework.git
cd acp-framework/impl/python
pip install -e .
python examples/admission_control_demo.py

Requiere Python 3.10+. El demo ejecuta 4 escenarios: pago aprobado, capacidad denegada, lectura de datos y ledger de auditoría. Sin dependencias externas más allá del SDK.

🏛️ Demo Multi-Org: Validación Federada (GAP-14)

Levantá dos organizaciones independientes (Org-A y Org-B) en Docker. Org-A emite snapshots de política y reputación firmados criptográficamente; Org-B los valida de forma independiente usando los paquetes reales de ACP — sin estado compartido, sin suposiciones de confianza.

git clone https://github.com/chelof100/acp-framework.git
cd acp-framework/examples/multi-org-demo
docker compose up

Org-A: http://localhost:8081 · Org-B: http://localhost:8082. Demuestra firmas Ed25519 reales, canonicalización JCS, enforcement de validez temporal y reporte de divergencia cross-org (REP-WARN-002). Ver README para el walkthrough completo.

Paso 1: Clonar y Compilar (Go)

Clona el repositorio y compila la implementación de referencia. Requiere Go 1.21+.

git clone https://github.com/chelof100/acp-framework.git
cd acp-framework/impl/go

# Compilar todos los paquetes
go build ./...

# Ejecutar la suite de pruebas (73 firmados + 65 RISK-2.0, L1–L4)
go test ./...

Todas las pruebas deben pasar. La suite cubre identidad, tokens de capacidad, integridad del ledger, snapshots de política, evaluación de riesgo y tokens de ejecución.

Paso 2: Verificar una Cadena de Eventos (L3 — Ledger)

El paquete ledger aplica encadenamiento criptográfico de hashes y verificación de firmas Ed25519. Ejemplo mínimo usando la API de Go directamente.

package main

import (
    "crypto/ed25519"
    "crypto/rand"
    "fmt"
    "log"

    "github.com/chelof100/acp-framework/acp-go/pkg/ledger"
)

func main() {
    // Generar par de claves institucional
    pubKey, privKey, _ := ed25519.GenerateKey(rand.Reader)

    // Crear un nuevo ledger para la institución "banco-001"
    l := ledger.NewInMemoryLedger("banco-001", privKey)

    // Agregar evento GENESIS (obligatorio como primer evento)
    if err := l.Append(ledger.Event{
        EventType: ledger.EventGenesis,
        Payload:   map[string]interface{}{"institution_id": "banco-001"},
    }); err != nil {
        log.Fatal(err)
    }

    // Agregar evento AUTHORIZATION
    if err := l.Append(ledger.Event{
        EventType: ledger.EventAuthorization,
        Payload: map[string]interface{}{
            "agent_id":             "agente-pagos-001",
            "capability":           "acp:cap:financial.payment",
            "policy_snapshot_ref":  "psn-2026-001",
        },
    }); err != nil {
        log.Fatal(err)
    }

    // Verificar toda la cadena contra la clave pública institucional
    result := l.Verify(pubKey)
    if result.Valid {
        fmt.Println("Cadena verificada ✓ —", len(result.Events), "eventos")
    } else {
        for _, e := range result.Errors {
            fmt.Println("Error:", e.Code, "-", e.Message)
        }
    }
}

Paso 3: Emitir un Token de Capacidad (L1 — CT)

Los tokens de capacidad otorgan permisos acotados a los agentes, firmados por la institución emisora, con una cadena de delegación criptográfica hasta la raíz institucional.

import "github.com/chelof100/acp-framework/acp-go/pkg/ct"

token, err := ct.Issue(ct.IssueRequest{
    InstitutionID: "banco-001",
    AgentID:       "agente-pagos-001",
    Capability:    "acp:cap:financial.payment",
    Scope:         []string{"transfer", "query"},
    MaxRisk:       0.25,
    TTLSeconds:    86400, // 24 horas
}, privKey)

if err != nil {
    log.Fatal(err)
}

// Verificar la firma del token
if err := ct.Verify(token, pubKey); err != nil {
    log.Fatal("Token inválido:", err)
}

fmt.Println("Token emitido:", token.TokenID)

Paso 4: Ejecutar Vectores de Cumplimiento

ACP incluye 138 vectores de prueba (73 firmados para L1–L4 + 65 sin firma RISK-2.0 para scoring de anomalías) que cubren casos positivos y negativos para cada nivel de conformidad. Pueden usarse para validar cualquier implementación ACP de terceros.

# Los vectores están en compliance/test-vectors/
ls acp-framework/compliance/test-vectors/

# TS-LEDGER-POS-001.json  — Cadena genesis válida
# TS-LEDGER-NEG-003.json  — Hash manipulado (LEDGER-003)
# TS-EXEC-POS-001.json    — Token de ejecución válido
# TS-EXEC-NEG-005.json    — Token expirado (EXEC-005)
# ... 138 vectores en total

# Cada vector tiene la estructura:
# {
#   "meta": { "id": "TS-LEDGER-POS-001", "level": "L3" },
#   "input": { "institution_public_key": "...", "events": [...] },
#   "expected": { "decision": "VALID", "error_code": null }
# }

Resumen de Paquetes (23 paquetes, L1–L4)

Nivel Paquete Spec Descripción
L1 pkg/agent ACP-AGENT-1.0 Identidad de agente, pares de claves Ed25519
L1 pkg/ct ACP-CT-1.0 Tokens de capacidad, permisos acotados
L1 pkg/hp ACP-HP-1.0 Protocolo de handshake, AuthorizationDecision
L1 pkg/delegation ACP-DCMA-1.1 Cadena de delegación multi-agente
L2 pkg/risk ACP-RISK-1.0 Scoring de riesgo, aprobar/escalar/denegar
L2 pkg/psn ACP-PSN-1.0 Snapshots de política, transiciones atómicas
L3 pkg/ledger ACP-LEDGER-1.3 Ledger de eventos con hash encadenado, 12 códigos de error
L3 pkg/exec ACP-EXEC-1.0 Tokens de ejecución, prevención de doble gasto
L4 pkg/notify, disc, bulk, crossorg, pay L4 Extendido Notificaciones, descubrimiento, operaciones bulk, cross-org, pagos

¿Listo para profundizar? Explora la implementación completa de referencia o lee la especificación del protocolo.