Faire la queue pour le créneau de déploiement en production
Demandez un lease détenu, lisez la temporisation que nomme le plan et réessayez jusqu’à ce que le créneau soit à vous.
coordination.lease
Demandez un lease détenu, lisez la temporisation que nomme le plan et réessayez jusqu’à ce que le créneau soit à vous.
coordination.leaseFaites passer actions d’agents, hash de contenu, contrôles d’API, requêtes DNS, webhooks, appels LLM et commits git par Intramedial. Obtenez un reçu signé vérifiable par tous – sans nous croire.
Plusieurs agents veulent le créneau de déploiement en production et l’un le détient. Au lieu d’interroger en boucle serrée, chacun attend le temps indiqué par le plan, et abandonne si les agents en attente forment un cycle.
requests, et une ressource détenueLe code lit la clé depuis INTRAMEDIAL_KEY. Gardez-la dans votre shell ou votre coffre à secrets, jamais dans un fichier que vous commitez. Les appels qui exigent une personne connectée ne peuvent pas utiliser de clé : c’est la console qui les fait.
Demandez la ressource pendant qu’un autre agent la détient. Le refus nomme le détenteur et, dans stampede.waitMs, la durée de temporisation.
coordination.leasecoordination-lease
curl -sS -X POST https://api.intramedial.com/api/v1/acp/coordination/lease \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"resource": "lock:deploy/production",
"actorDid": "did:web:acme.example:agent:cost"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/coordination/lease", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
resource: "lock:deploy/production",
actorDid: "did:web:acme.example:agent:cost",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/coordination/lease",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"resource": "lock:deploy/production",
"actorDid": "did:web:acme.example:agent:cost",
},
timeout=30,
)
print(res.status_code, res.json())Bouclez sur l’appel lease et attendez waitMs entre les essais. Arrêtez-vous sur deadlock, qui nomme waitingOn.
const API = "https://api.intramedial.com/api/v1/acp";
const headers = {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
};
const ask = { resource: "lock:deploy/production", actorDid: "did:web:acme.example:agent:cost" };
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
let lease = null;
for (let attempt = 0; attempt < 20 && !lease; attempt++) {
const res = await fetch(`${API}/coordination/lease`, { method: "POST", headers, body: JSON.stringify(ask) });
const body = await res.json();
if (body.ok) lease = body.lease;
else if (body.reason === "deadlock") throw new Error("wait cycle, waiting on " + body.waitingOn);
else await sleep(body.stampede?.waitMs ?? 1000); // the plane names the back-off
}
if (!lease) throw new Error("no slot yet");
console.log("holding", lease.id, "until", new Date(lease.expiresAtMs).toISOString());import os, time, requests
API = "https://api.intramedial.com/api/v1/acp"
headers = {"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]}
ask = {"resource": "lock:deploy/production", "actorDid": "did:web:acme.example:agent:cost"}
lease = None
for _ in range(20):
body = requests.post(f"{API}/coordination/lease", headers=headers, json=ask, timeout=30).json()
if body.get("ok"):
lease = body["lease"]
break
if body.get("reason") == "deadlock":
raise SystemExit(f"wait cycle, waiting on {body.get('waitingOn')}")
time.sleep(body.get("stampede", {}).get("waitMs", 1000) / 1000) # the plane names the back-off
if not lease:
raise SystemExit("no slot yet")
print("holding", lease["id"], "until", lease[])Relâchez le créneau dès la fin du déploiement, pour que l’agent suivant dans la file n’attende pas l’expiration du lease. Release prend la ressource et l’agent, et un leaseId facultatif.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/coordination/release \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"resource": "lock:deploy/production",
"actorDid": "did:web:acme.example:agent:cost"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/coordination/release", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
resource: "lock:deploy/production",
actorDid: "did:web:acme.example:agent:cost",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/coordination/release",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"resource": "lock:deploy/production",
"actorDid": "did:web:acme.example:agent:cost",
},
timeout=30,
)
print(res.status_code, res.json())Copié de: /docs/coordination-lease
Le registre est en ajout seul et scellé sous des racines de Merkle. L’heure d’une entrée est l’horloge propre d’Intramedial, et un bundle signé peut être vérifié hors ligne avec la clé publiée.
Prenez un lease exclusif sur une ressource avec coordination.lease, voyez qui le détient, et relâchez-le quand vous avez fini.
coordination.leaseExécutez les six scénarios Intralock fixes, lisez le résultat de chacun, et fixez une cadence pour que l’exercice se répète seul.
drills.frtListez les détecteurs, exécutez lease-overlap, lisez les conflits qu’il cite avec leurs preuves, puis les dossiers qu’il a déposés pour examen.
detection.runUn court e-mail quand nous ajoutons des recettes. Rien d’autre, et désabonnement possible depuis chaque message.
Sans compte : 35 appels sur 7 jours sur les routes attest, avec des reçus marqués test. Inscrivez-vous quand vous voulez continuer.