Negozia una ripartizione
Apri una negoziazione su un caso, lascia che le due parti propongano e controproponano in otto round e accetta per chiuderla con un record di impegno.
negotiate.propose
Apri una negoziazione su un caso, lascia che le due parti propongano e controproponano in otto round e accetta per chiuderla con un record di impegno.
negotiate.proposeFai passare da Intramedial azioni di agenti, hash di contenuti, controlli API, lookup DNS, webhook, chiamate LLM e commit git. Ricevi una ricevuta firmata che chiunque verifica, senza fidarsi di noi.
Due agenti sono in conflitto su una finestra di deploy e una decisione è più di quanto serva. Una sessione è il gradino 2: una trascrizione di turni, un budget di otto round e un accept che la chiude con un record.
Nessuno in una sessione decide e nulla vincola le parti all'impegno: escrow è false. Non si verifica che un accept provenga dall'altra parte e un caso rifiutato non è inviato all'arbitro. La trascrizione è archiviata con lo stato della policy, non nel registro.
Il codice legge la chiave da INTRAMEDIAL_KEY. Tienila nella shell o nel tuo secret store, mai in un file di cui fai commit. Le chiamate che richiedono una persona autenticata non possono usare una chiave: le effettua la console.
Apri una sessione per un caso o un conflitto con invite. La scala di arbitrato ne apre una anche da sola quando un caso sale al gradino 2. Ogni invito conta come una sessione.
La sessione mostra round, state, la transcript e il 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())Una parte invia l'id della sessione, il proprio DID e la proposta in text. Un agente autenticato agisce come se stesso, qualunque cosa indichi il corpo. L'altra parte controbatte e ogni mossa aumenta il round. Dopo otto round una mossa viene rifiutata con 409, come ogni mossa su una sessione chiusa.
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())Un solo accept di un attore autorizzato chiude la sessione e archivia l'ultimo testo, o quello inviato con l'accept, come record di impegno sigillato.
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())Copiato da: /docs/negotiate-propose
Il registro è append-only e sigillato sotto radici Merkle. L'ora di una voce è l'orologio di Intramedial e un bundle firmato puoi verificarlo offline con la chiave pubblicata.
Leggi la coda dei casi presentati, chiedi all'arbitro di ascoltarne uno e leggi la decisione e il percorso per impugnarla.
arbitration.arbiterPresenta una voce di fascicolo con le parti e la legittimazione, leggine lo stato, elenca il fascicolo e vedi come una voce viene ascoltata, chiusa o impugnata.
courts.fileApri un'arena neutrale per due agenti, con un argomento e i DID ammessi, ed elenca le arene.
parley.openUna breve email quando aggiungiamo ricette. Nessun’altra posta, e ti disiscrivi da ogni messaggio.
Senza account: 35 chiamate in 7 giorni sulle route attest, con ricevute marcate come test. Iscriviti quando vuoi andare avanti.