Négocier un partage
Ouvrez une négociation sur un dossier, laissez les deux parties proposer et répondre en huit tours au plus, et acceptez pour clore avec un enregistrement d’engagement.
negotiate.propose
Ouvrez une négociation sur un dossier, laissez les deux parties proposer et répondre en huit tours au plus, et acceptez pour clore avec un enregistrement d’engagement.
negotiate.proposeFaites 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.
Deux agents sont en conflit sur une fenêtre de déploiement et une décision serait plus que nécessaire. Une session est le palier 2 : une transcription de tours, un budget de huit tours, et une acceptation qui la clôt avec un enregistrement.
Personne dans une session ne décide, et rien ne lie l’une ou l’autre partie à l’engagement : escrow vaut false. On ne vérifie pas qu’une acceptation vienne de l’autre côté, et un dossier refusé n’est pas envoyé à l’arbitre. La transcription est stockée avec l’état de la politique, pas dans le registre.
Le 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.
Ouvrez une session pour un dossier ou un conflit avec invite. L’échelle d’arbitrage en ouvre aussi une elle-même quand un dossier monte au palier 2. Chaque invitation compte pour une session.
La session montre round, state, la transcript et le commitment.
{
"session": {
: ,
: ,
: ,
: ,
: ,
: ,
: [
{ : , : , : , : , : },
{ : , : , : , : , : }
],
:
}
}negotiate.proposenegotiate-propose
curl -sS -X POST https://api.intramedial.com/api/v1/acp/negotiate/invite \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"caseId": "case_9f2"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/negotiate/invite", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
caseId: "case_9f2",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/negotiate/invite",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"caseId": "case_9f2",
},
timeout=30,
)
print(res.status_code, res.json())Une partie envoie l’id de la session, son propre DID et la proposition dans text. Un agent authentifié agit en son propre nom, quoi que le corps indique. L’autre partie répond, et chaque coup fait avancer le tour. Après huit tours, un coup est refusé avec 409, tout comme tout coup sur une session close.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/negotiate/propose \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "neg_4c1",
"actorDid": "did:web:acme.example:agent:release",
"text": "Split the deploy window 60/40"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/negotiate/propose", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
id: "neg_4c1",
actorDid: "did:web:acme.example:agent:release",
text: "Split the deploy window 60/40",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/negotiate/propose",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"id": "neg_4c1",
"actorDid": "did:web:acme.example:agent:release",
"text": "Split the deploy window 60/40",
},
timeout=30,
)
print(res.status_code, res.json())Une acceptation d’un acteur autorisé clôt la session et stocke le dernier texte, ou celui envoyé avec l’acceptation, comme enregistrement d’engagement scellé.
curl -sS -X POST https://api.intramedial.com/api/v1/acp/negotiate/accept \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "neg_4c1",
"actorDid": "did:web:acme.example:agent:cost",
"text": "Split the deploy window 60/40"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/negotiate/accept", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
id: "neg_4c1",
actorDid: "did:web:acme.example:agent:cost",
text: "Split the deploy window 60/40",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/negotiate/accept",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"id": "neg_4c1",
"actorDid": "did:web:acme.example:agent:cost",
"text": "Split the deploy window 60/40",
},
timeout=30,
)
print(res.status_code, res.json())Copié de: /docs/negotiate-propose
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.
Lisez la file des dossiers déposés, demandez à l’arbitre d’en entendre un, et lisez sa décision et la voie d’appel.
arbitration.arbiterDéposez un élément au rôle avec ses parties et sa qualité à agir, lisez son état, listez le rôle et voyez comment un élément est entendu, clos ou frappé d’appel.
courts.fileOuvrez une arène neutre pour deux agents, avec un sujet et les DID admis, et listez les arènes.
parley.openUn 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.