Saltar a contenido

Novedades de 0.17.0

En desarrollo: SDK Python rayito 0.17.0, SDK TypeScript rayito 0.17.0 y rayd 0.17.0.

0.17.0 hace que una flota de agentes se pueda reconectar sólo con su nombre, desde cualquier proceso, y que se comporte igual que la que se desplegó: mismas VMs, mismas pasarelas y el escalado real en status. Además corrige varios fallos del despliegue del agente: URLs con credenciales en los logs del host, --create-secret con presets y el prefijo del secreto, la imagen rayito-base-caps que había que publicar a mano y OpenCode sin fichero de proyecto.

Conectar con un proyecto explícito (AgentFleet.connect(nombre, project=...)) sigue funcionando igual que en 0.16 y no hace ninguna llamada nueva.

La receta de la flota

Tras arrancar la flota de MicroVMs, deploy_agent() y rayito agent deploy guardan su receta en Parameter Store (/rayito/agents/<nombre>/recipe): el proyecto tras las banderas, la versión de la imagen, los presets de las pasarelas y el escalado. Sólo lleva nombres de secretos, nunca valores ni el access token.

from rayito import AgentFleet

fleet = AgentFleet.connect("mi-agente", access_token="<token-de-la-flota>")
print(fleet.status().scaling_source)
fleet.invoke("Hola")
import { AgentFleet } from "rayito";

const fleet = await AgentFleet.connect("mi-agente", { accessToken: "<token-de-la-flota>" });
console.log((await fleet.status()).scalingSource);
await fleet.invoke("Hola");
  • FleetStatus.scaling_source (scalingSource) dice de dónde sale el escalado: explicit, project, recipe o default. Sin proyecto ni receta, rayito agent status ya no inventa un min 1, max 1.
  • stop() borra la receta que guardó o leyó; --keep-recipe la conserva.
  • Un fallo al guardarla es un aviso con código, nunca un despliegue fallido.

Coste y activación

Es la única función encendida por defecto (ADR-034): un parámetro SecureString estándar no cuesta y cada escritura o lectura es una petición de KMS dentro de la capa gratuita (después, $0,03 por 10 000). Se apaga con AgentDeployOptions(save_recipe=False) (saveRecipe: false, --no-save-recipe). Detalle e IAM en La receta de la flota.

Plazas calientes con sus pasarelas

Una flota reconectada en otro proceso abría una plaza caliente sin las pasarelas del proyecto, y el agente arrancaba sin la pasarela del modelo. Ahora la flota las abre al tomar la plaza, con el mismo camino que SandboxPool.take(gateways=), y si no puede, sustituye la plaza. Ya no hace falta desplegar con --warm 0. Plazas calientes y pasarelas.

--scale-in-after y renovación de la clave de Bedrock

  • rayito agent deploy --scale-in-after SECONDS (AgentDeployOptions.scale_in_after_seconds, scaleInAfterMs) fija la inactividad tras la que un VM por encima de min_vms se termina.
  • La reducción por fin ocurre. Hasta 0.16 era un no-op: los VMs de la flota se creaban sin max_lifetime/on_timeout y rayd rechazaba el set_timeout que termina un VM sobrante (el aviso «no se pudo acotar la vida de un VM sobrante»). Ahora una flota que puede crecer (max_vms > min_vms) crea todos sus VMs y plazas calientes con plazo lógico en modo kill, y PoolConfig gana max_lifetime y on_timeout opcionales. Una flota de tamaño fijo se crea como en 0.16. Los VMs creados por 0.16 no se reducen: vuelve a desplegar. Reducir, suspender y reiniciar.
  • --renew-gateway-keys (renew_gateway_keys, renewGatewayKeys), apagada por defecto, renueva una clave de corta duración de Bedrock en las pasarelas con preset bedrock. Necesita el extra bedrock-keys en Python o el peer opcional @aws/bedrock-token-generator en TypeScript. Sólo la activa quien llama: AgentFleet.connect(nombre) no la hereda de la receta (avisa recipe_renewal_ignored), y no renueva un secreto que lea también una pasarela hacia otro upstream. Desde la CLI, rayito agent invoke <flota> --renew-gateway-keys la pide al reconectar. Renovar la clave de corta duración de Bedrock.

rayito setup publica rayito-base-caps

rayito setup publica también la imagen rayito-base-caps que usa rayito agent deploy en MicroVM, desde el mismo rayito-image.zip. El plan y --dry-run muestran el paso y su coste (≈ $0,04 por semana). Sólo con rayito setup --caps-image: por defecto no se publica, porque cuesta; si falta, rayito agent deploy en MicroVM lo dice y pide esa orden. Configurar AWS.

Correcciones

  • Logs del host del agente. Los loggers httpx y httpcore arrancan en WARNING, así que ya no escriben la URL de cada petición con su consulta (donde puede ir una credencial). Una petición mal formada ya no deja un AttributeError en el log. Seguridad.
  • --create-secret busca la clave por el preset de la pasarela (preset = "bedrock" lee AWS_BEARER_TOKEN_BEDROCK) y ya no duplica el prefijo del secreto.
  • OpenCode sin fichero de proyecto usa el AGENTS.md de la raíz y los permisos de opencode.json. OpenCode sin fichero de proyecto.
  • --env rechaza nombres que parecen secretos (también *_SECRET y los segmentos PASS, PASSWD, PAT, CREDENTIAL(S), y AUTH o BEARER al final o junto a TOKEN, KEY o HEADER) y apunta a --secret-env y --secret-env-from.

Cambios a tener en cuenta

No hay cambios que rompan la API. Sí uno de la CLI:

  • Incompatible: rayito agent deploy --env rechaza los nombres que parecen secretos, también *_SECRET, los que tienen un segmento PASS, PASSWD, PAT, CREDENTIAL o CREDENTIALS, y los que llevan AUTH o BEARER como último segmento o junto a TOKEN, KEY o HEADER (en 0.16 pasaban; AUTH_MODE, AUTH_URL o AUTHOR_NAME siguen pasando). Migración: pasa el valor por --secret-env NOMBRE=<secreto> o --secret-env-from <secreto>. Los valores de env del proyecto sí se guardan en la receta: nada secreto en env.
  • Coste: rayito setup --caps-image publica rayito-base-caps, otra versión de imagen (≈ $0,04 por semana); apagado por defecto.

  • El secreto detectado de la pasarela cambia de nombre. La detección de 0.16 lo creaba en rayito/rayito/agents/...; ahora queda en rayito/agents/<proyecto>/<proveedor>. Si sólo existe el de 0.16, el despliegue lo reutiliza. Ver Si vienes de 0.16.

  • IAM. Las políticas del lanzador y de quien llama ganan la sentencia AgentRecipe sobre parameter/rayito/agents/*: CallerPolicy con ssm:PutParameter, GetParameter y DeleteParameter, y SandboxLauncherPolicy sólo con GetParameter y DeleteParameter (escribir la receta equivale a poder desplegar: ImagePublisherPolicy gana ssm:PutParameter). Sin ella, el despliegue y la reconexión siguen con el aviso recipe_access_denied. Detalle en IAM.
  • TypeScript: dos peers opcionales nuevos, @aws-sdk/client-ssm y @aws/bedrock-token-generator: el primero para la receta (sin él, conectar por nombre sigue como en 0.16) y el segundo sólo con renewGatewayKeys.

El detalle completo está en el Changelog.