書き込みに人による承認を必須にする
拒否された書き込みを承認キューで待機させ、サインインした人が承認したら、トークンを付けて再試行します。
coordination.approve
拒否された書き込みを承認キューで待機させ、サインインした人が承認したら、トークンを付けて再試行します。
coordination.approve一部の書き込みは、エージェントの言い分だけで通すべきではありません。受け入れはトークンのない書き込みを拒否してリクエストを残し、管理者または許可された承認者が判断します。承認すると、そのアクター、リソース、動詞に対するトークンが発行されます。
コードはキーをINTRAMEDIAL_KEYから読み取ります。キーはシェルやシークレットストアに保管し、コミットするファイルには入れないでください。サインインした人が必要な呼び出しにはキーを使えず、コンソールが実行します。
トークンなしで書き込みを宣言します。受け入れはこれを拒否し、回答のapprovalIdが、人による判断を待つキュー内のリクエストを示します。
判断は、状態とともにapprovalとして返ります。
{
"approval": {
"id": "apr_7f3a",
"actorDid": "did:web:acme.example:agent:billing",
"resource": "repo:payments/main",
"action": "write",
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
:
},
:
}coordination.approvecoordination-approvecurl -sS -X POST https://api.intramedial.com/api/v1/acp/coordination/admit \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"actorDid": "did:web:acme.example:agent:billing",
"resource": "repo:payments/main",
"action": "write"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/coordination/admit", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
actorDid: "did:web:acme.example:agent:billing",
resource: "repo:payments/main",
action: "write",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/coordination/admit",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"actorDid": "did:web:acme.example:agent:billing",
"resource": "repo:payments/main",
"action": "write",
},
timeout=30,
)
print(res.status_code, res.json())サインインした承認者がコンソールでリクエストを読み、承認します。キーやエージェントは判断できません。これはコンソールが送る本文です。
{
"id": "apr_7f3a",
"reason": "expected batch"
}エージェントは、トークンをconfirmationTokenとして再試行します。1回限りで、アクター、リソース、動詞に紐づきます。
curl -sS -X POST https://api.intramedial.com/api/v1/acp/coordination/admit \
-H "Authorization: Bearer $INTRAMEDIAL_KEY" \
-H "Content-Type: application/json" \
-d '{
"actorDid": "did:web:acme.example:agent:billing",
"resource": "repo:payments/main",
"action": "write",
"confirmationToken": "…"
}'const res = await fetch("https://api.intramedial.com/api/v1/acp/coordination/admit", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.INTRAMEDIAL_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
actorDid: "did:web:acme.example:agent:billing",
resource: "repo:payments/main",
action: "write",
confirmationToken: "…",
}),
});
console.log(res.status, await res.json());import os, requests
res = requests.post(
"https://api.intramedial.com/api/v1/acp/coordination/admit",
headers={"Authorization": "Bearer " + os.environ["INTRAMEDIAL_KEY"]},
json={
"actorDid": "did:web:acme.example:agent:billing",
"resource": "repo:payments/main",
"action": "write",
"confirmationToken": "…",
},
timeout=30,
)
print(res.status_code, res.json())転載元の資料: /docs/coordination-approve
台帳は追記専用で、Merkleルートのもとでシールされます。エントリの時刻はIntramedial自身のクロックによるもので、署名付きバンドルは公開鍵を使ってオフラインで確認できます。
固定されたスコープの二重制御リクエストを開き、2人目の管理者にそのダイジェストを承認してもらい、ゲートされた操作を実行します。
dual.control-scopes無料のテストキーを取得し、content.attestでハッシュを証明して、返ってきた署名付きレシートを検証します。
coordination.admitエージェントによるリポジトリへの書き込みをIntralock経由で許可し、判定をチェック実行またはステータスとしてコミットに投稿します。
github.enforceレシピ集にレシピを追加したときだけ、短いメールを1通。ほかのメールは送らず、どのメールからも配信停止できます。
アカウントは不要です。attestルートで7日間に35回まで呼び出せ、レシートはテストレシートとして明示されます。続けたくなったら、そのときに登録してください。