{"_id":"@emilia-protocol/openai-agents","_rev":"8-16b082d422507f7a999f3623f714cbbe","name":"@emilia-protocol/openai-agents","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@emilia-protocol/openai-agents","version":"0.1.0","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"license":"Apache-2.0","_id":"@emilia-protocol/openai-agents@0.1.0","maintainers":[{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"}],"homepage":"https://www.emiliaprotocol.ai/agent-guard","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"dist":{"shasum":"8b904b86f67c40e532222e7d4878e55c19918a75","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.1.0.tgz","fileCount":5,"integrity":"sha512-vvGNlvTLJXbfCYyYpzFzDldumz0c2b3HbZApAxwIQHhIUg1pwow8d24UOYlz2v0X+0YjUxdGm1IXu3btmCqYNQ==","signatures":[{"sig":"MEUCIAN25axE3Gp9PZuX6aiJkm69AD/Dhuj7wXXwcas2quTLAiEAolaUvxy1fd7Y/W08/cP1jBvNFO0XCgvE+EcGpzGmFQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31247},"main":"index.js","type":"module","types":"index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"gitHead":"35ee303c38e318565ee95fe8198e9180789af04f","scripts":{"test":"node --test"},"_npmUser":{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"},"repository":{"url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","type":"git","directory":"packages/openai-agents"},"_npmVersion":"11.11.0","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@emilia-protocol/require-receipt":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openai-agents_0.1.0_1782541062299_0.49671001108817214","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@emilia-protocol/openai-agents","version":"0.1.1","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"license":"Apache-2.0","_id":"@emilia-protocol/openai-agents@0.1.1","maintainers":[{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"}],"homepage":"https://www.emiliaprotocol.ai/agent-guard","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"dist":{"shasum":"43889fa8011fa6b5b369d152970ab1477501fe90","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.1.1.tgz","fileCount":5,"integrity":"sha512-C1Dg6vIvXq+fWKXw5GBUwqTseZEDRwkWtto92eNLmDvTA+maElu4Jwx8TPyGiwDvSUOeCL+afPgUKqa9jybEiw==","signatures":[{"sig":"MEUCIG9GoR07jakH3VWbH8aO2mN5vrRNrv+pbtg/51xGFx47AiEAmw/ipsxuiK2PUMHXB4cJuqCqutuBRYHASfJ1Y0Gw8zQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31247},"main":"index.js","type":"module","types":"index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"gitHead":"35ee303c38e318565ee95fe8198e9180789af04f","scripts":{"test":"node --test"},"_npmUser":{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"},"repository":{"url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","type":"git","directory":"packages/openai-agents"},"_npmVersion":"11.11.0","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@emilia-protocol/require-receipt":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openai-agents_0.1.1_1782541277422_0.49758690008045425","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@emilia-protocol/openai-agents","version":"0.1.2","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"license":"Apache-2.0","_id":"@emilia-protocol/openai-agents@0.1.2","maintainers":[{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"}],"homepage":"https://www.emiliaprotocol.ai/agent-guard","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"dist":{"shasum":"2d14136b565148fd836388c14a26531257f88c23","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.1.2.tgz","fileCount":5,"integrity":"sha512-qtABhl2j3H5xDpuPzulDelPFf5jxMQ/Ec3XUwkVp+AsGyREUj4nCmUWEA/jrLm4gIjZYVx1lPgjV/zfrI/8JAg==","signatures":[{"sig":"MEQCIFcbo6rXq9kdRkfb80fmgjHoTVThj8enVPXZx0FIfLi7AiBUghx+K57Ml8xt+UCsERbqRxgVJFVdj5SJjJPE6wQ1pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35103},"main":"index.js","type":"module","types":"index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"gitHead":"284643d008a9c7f64bb171baa6651812de77a712","scripts":{"test":"node --test"},"_npmUser":{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"},"repository":{"url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","type":"git","directory":"packages/openai-agents"},"_npmVersion":"11.11.0","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@emilia-protocol/require-receipt":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openai-agents_0.1.2_1782543307213_0.8038799358990181","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@emilia-protocol/openai-agents","version":"0.1.3","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"license":"Apache-2.0","_id":"@emilia-protocol/openai-agents@0.1.3","maintainers":[{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"}],"homepage":"https://www.emiliaprotocol.ai/agent-guard","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"dist":{"shasum":"81fd07159f99d5db071fafba26abf6060e8c8eb4","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.1.3.tgz","fileCount":5,"integrity":"sha512-kR7UJgDEQvv9mWDx1/auBkfDZQy4WtlaFHau51izy04/yWsKw0KL42EgENh2yQyV8n+9g3+aFS7kP4YvCCl/JA==","signatures":[{"sig":"MEYCIQC13mhrVDbPe/CB9HMuze4N/562VQ01885QfsaQdugQUgIhAOBHtEbDhVDKGiMtnGlKKaIktSmxpsbWc83Ln/EfhX3H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37579},"main":"index.js","type":"module","types":"index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"gitHead":"da5de7b97754ac930b594f17311f36f1a201661f","scripts":{"test":"node --test"},"_npmUser":{"name":"emiliaprotocol","email":"iman.schrock@gmail.com"},"repository":{"url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","type":"git","directory":"packages/openai-agents"},"_npmVersion":"11.11.0","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@emilia-protocol/require-receipt":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openai-agents_0.1.3_1782544369227_0.33305135512406747","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@emilia-protocol/openai-agents","version":"0.2.0","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"license":"Apache-2.0","_id":"@emilia-protocol/openai-agents@0.2.0","maintainers":[{"name":"emiliaprotocol","email":"team@emiliaprotocol.ai"}],"homepage":"https://www.emiliaprotocol.ai/agent-guard","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"dist":{"shasum":"5ae0c14424c2e55a18ed8d93d442bbcefea060ee","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.2.0.tgz","fileCount":5,"integrity":"sha512-7x2BPu92D1N2dU1hZbqa0slKEZixntXBrwmBfCTQtSxXQ13A8lkvirsCv2mtnqL1naUJa54BHyeNNXuQRR18Ow==","signatures":[{"sig":"MEYCIQDnuYPnVHS3ZV5cV0kyTgXvuUn0jZO+QhBTE3B2Kfa7kgIhANhuhVH0tMQiul1lNxCNeu9In1jAEsE6b643omC0d+4F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@emilia-protocol%2fopenai-agents@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":39271},"main":"index.js","type":"module","_from":"file:release-artifacts/openai-agents/emilia-protocol-openai-agents-0.2.0.tgz","types":"index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./index.d.ts","import":"./index.js"}},"scripts":{"test":"node --test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b44c83-affe-48ff-8dc9-f2717acb2901"}},"_resolved":"/home/runner/work/emilia-protocol/emilia-protocol/release-artifacts/openai-agents/emilia-protocol-openai-agents-0.2.0.tgz","_integrity":"sha512-7x2BPu92D1N2dU1hZbqa0slKEZixntXBrwmBfCTQtSxXQ13A8lkvirsCv2mtnqL1naUJa54BHyeNNXuQRR18Ow==","repository":{"url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","type":"git","directory":"packages/openai-agents"},"_npmVersion":"11.18.0","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@emilia-protocol/require-receipt":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openai-agents_0.2.0_1784276133101_0.9791672835253673","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@emilia-protocol/openai-agents","version":"0.2.1","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"license":"Apache-2.0","_id":"@emilia-protocol/openai-agents@0.2.1","maintainers":[{"name":"emiliaprotocol","email":"team@emiliaprotocol.ai"}],"homepage":"https://www.emiliaprotocol.ai/agent-guard","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"dist":{"shasum":"9b24e2b9163ed779efeb140c54038d3755de53d8","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.2.1.tgz","fileCount":11,"integrity":"sha512-b6VhOlUwrfTWvN5Q3Dg1KnS+3Jk7ELphjwt58XZVHQPZaLlV/lPCxM+qaE9dtECyp6F++36WSbqM4IQmCQCZ9Q==","signatures":[{"sig":"MEYCIQDBvb6JL5iz6xm9ilsyG0Ot+bC7aeYuCpeBWsxJjKYVmAIhAIIaWLxp60F8UMlcMdYCMbYYJyV70DI7vPFTJFNbkmAV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@emilia-protocol%2fopenai-agents@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":71379},"main":"index.js","type":"module","_from":"file:release-artifacts/openai-agents/emilia-protocol-openai-agents-0.2.1.tgz","types":"index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./index.js"}},"scripts":{"test":"node --test","build":"tsc -p tsconfig.json","pretest":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b44c83-affe-48ff-8dc9-f2717acb2901"}},"_resolved":"/home/runner/work/emilia-protocol/emilia-protocol/release-artifacts/openai-agents/emilia-protocol-openai-agents-0.2.1.tgz","_integrity":"sha512-b6VhOlUwrfTWvN5Q3Dg1KnS+3Jk7ELphjwt58XZVHQPZaLlV/lPCxM+qaE9dtECyp6F++36WSbqM4IQmCQCZ9Q==","repository":{"url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","type":"git","directory":"packages/openai-agents"},"_npmVersion":"11.18.0","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@emilia-protocol/require-receipt":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openai-agents_0.2.1_1784698555209_0.9522159497126557","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@emilia-protocol/openai-agents","version":"0.3.0","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"license":"Apache-2.0","_id":"@emilia-protocol/openai-agents@0.3.0","maintainers":[{"name":"emiliaprotocol","email":"team@emiliaprotocol.ai"}],"homepage":"https://www.emiliaprotocol.ai/agent-guard","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"dist":{"shasum":"fdcf039b0f1bf2a2f636733ddf1f5a28d641a2eb","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.3.0.tgz","fileCount":11,"integrity":"sha512-39ikeGZV+VclWlKhmQPjR0ZMJ5Z/Cz0jaQG5tyAMtz412cnYrZ8yBpsUhyivlvHzDDH/nCK1U5rupoGsrpAOCw==","signatures":[{"sig":"MEYCIQD5Y6BARHetyVcSfuBZwIQo+qz5/bppHoszAf5PPDR37AIhAKjPP3CpeEvr/FtDMGY03xevdl9VVv3Yoj9isSd/7mlL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@emilia-protocol%2fopenai-agents@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77300},"main":"index.js","type":"module","_from":"file:publisher-input/emilia-protocol-openai-agents-0.3.0.tgz","types":"index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./index.js"}},"scripts":{"test":"node --test","build":"tsc -p tsconfig.json","pretest":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b44c83-affe-48ff-8dc9-f2717acb2901"}},"_resolved":"/home/runner/work/emilia-protocol/emilia-protocol/publisher-input/emilia-protocol-openai-agents-0.3.0.tgz","_integrity":"sha512-39ikeGZV+VclWlKhmQPjR0ZMJ5Z/Cz0jaQG5tyAMtz412cnYrZ8yBpsUhyivlvHzDDH/nCK1U5rupoGsrpAOCw==","repository":{"url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","type":"git","directory":"packages/openai-agents"},"_npmVersion":"11.17.0","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","directories":{},"_nodeVersion":"24.19.0","dependencies":{"@emilia-protocol/require-receipt":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/openai-agents_0.3.0_1786831087896_0.545801429193469","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@emilia-protocol/openai-agents","version":"0.3.1","description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","type":"module","main":"index.js","types":"index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./index.js"}},"license":"Apache-2.0","scripts":{"build":"tsc -p tsconfig.json","pretest":"npm run build","test":"node --test"},"keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"engines":{"node":">=18"},"dependencies":{"@emilia-protocol/require-receipt":"^0.8.1"},"peerDependencies":{"@openai/agents":">=0.0.1"},"peerDependenciesMeta":{"@openai/agents":{"optional":true}},"repository":{"type":"git","url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","directory":"packages/openai-agents"},"homepage":"https://www.emiliaprotocol.ai/agent-guard","publishConfig":{"access":"public"},"_id":"@emilia-protocol/openai-agents@0.3.1","bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"_integrity":"sha512-U+p2vyNLXyM6peQwwwmci7onvN25OLGR4zjAA+fWDo8xxEW5GB1UToIcqIdv76vXQY9LmAsni5GggQ/xd3DEdg==","_resolved":"/home/runner/work/emilia-protocol/emilia-protocol/publisher-input/emilia-protocol-openai-agents-0.3.1.tgz","_from":"file:publisher-input/emilia-protocol-openai-agents-0.3.1.tgz","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-U+p2vyNLXyM6peQwwwmci7onvN25OLGR4zjAA+fWDo8xxEW5GB1UToIcqIdv76vXQY9LmAsni5GggQ/xd3DEdg==","shasum":"d0bc93838122a94ec26436b354310601b333305c","tarball":"https://registry.npmjs.org/@emilia-protocol/openai-agents/-/openai-agents-0.3.1.tgz","fileCount":12,"unpackedSize":78884,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@emilia-protocol%2fopenai-agents@0.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCRR/Leo/xLkHrFSNonx1RgNtOXJknx+RvHDzfCYDybngIgceRwqmwFfCfDZNeFMD9BsuVH2EqQlbjglxo84P4j5g0="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:14b44c83-affe-48ff-8dc9-f2717acb2901"}},"directories":{},"maintainers":[{"name":"emiliaprotocol","email":"team@emiliaprotocol.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openai-agents_0.3.1_1789286408889_0.33757404662997037"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-27T06:17:42.152Z","modified":"2026-09-13T08:00:09.361Z","0.1.0":"2026-06-27T06:17:42.422Z","0.1.1":"2026-06-27T06:21:17.584Z","0.1.2":"2026-06-27T06:55:07.349Z","0.1.3":"2026-06-27T07:12:49.373Z","0.2.0":"2026-07-17T08:15:33.233Z","0.2.1":"2026-07-22T05:35:55.347Z","0.3.0":"2026-08-15T21:58:08.050Z","0.3.1":"2026-09-13T08:00:09.035Z"},"bugs":{"url":"https://github.com/emiliaprotocol/emilia-protocol/issues"},"license":"Apache-2.0","homepage":"https://www.emiliaprotocol.ai/agent-guard","keywords":["emilia-protocol","openai-agents","ai-agent","human-in-the-loop","tool-approval","needs-approval","trust-receipt","agent-authorization","agent-accountability","receipt-required","verifiable-credential","ai-safety"],"repository":{"type":"git","url":"git+https://github.com/emiliaprotocol/emilia-protocol.git","directory":"packages/openai-agents"},"description":"Turn the OpenAI Agents SDK human-in-the-loop tool-approval step into a verifiable, offline-checkable EMILIA authorization receipt. OpenAI pauses an agent and asks for approval; EMILIA makes that approval portable, tamper-evident evidence — a named human a","maintainers":[{"name":"emiliaprotocol","email":"team@emiliaprotocol.ai"}],"readme":"# @emilia-protocol/openai-agents\n\n## Add cryptographic approval receipts to OpenAI Agents in 10 minutes.\n\n> **OpenAI pauses an agent and asks for approval. EMILIA makes that approval portable, offline-verifiable evidence** — proof that a *named* human accountably authorized *this exact* tool call, that anyone can check later without trusting OpenAI, your app, or a mutable log.\n\nThe OpenAI Agents SDK already pauses consequential tool calls and asks a human to approve them. That approval is a transient in-process boolean — the moment the run resumes, it is gone. This adapter turns each approval into an **EMILIA authorization receipt** (EP-RECEIPT-v1): a tamper-evident, Ed25519-signed artifact bound to the exact tool call, verifiable offline. It **composes with** OpenAI's approval primitive; it does not replace it.\n\n---\n\n## The confirmed OpenAI Agents SDK human-in-the-loop API\n\nGrounded against the official docs (JavaScript/TypeScript, package `@openai/agents`):\n\n- A tool requires approval when defined with **`needsApproval: true`** (or an async `needsApproval(context, args) => boolean`) on `tool({...})`.\n- When such a tool is called, the run **pauses** and the pending approvals surface as **`result.interruptions`** — an array of **`RunToolApprovalItem`**, each with **`type: \"tool_approval_item\"`**.\n- Each interruption exposes the **tool name** (`interruption.name` / `interruption.rawItem.name`), the **arguments** (`interruption.arguments` / `rawItem.arguments`, a JSON string), and the **call id** (`rawItem.callId` for `function_call`, or `rawItem.id` for hosted tools).\n- You resolve each one with **`result.state.approve(interruption)`** or **`result.state.reject(interruption, { message })`**, then **resume by re-running** `run(agent, result.state)` with the same state.\n\nDocs: https://openai.github.io/openai-agents-js/guides/human-in-the-loop (see also `.../classes/runstate` and `.../classes/streamedrunresult`).\n\nThis adapter is **framework-faithful**: it reads that exact interruption shape and drives those exact `state.approve` / `state.reject` calls, so a real integration is a thin wrapper — and the adapter is unit-testable **without** calling OpenAI.\n\n---\n\n## Install\n\n```bash\nnpm install @emilia-protocol/openai-agents @emilia-protocol/require-receipt\n# @openai/agents is a peer dependency (you already have it in an Agents app)\n```\n\n## Copy-paste integration\n\n```js\nimport { Agent, run, tool } from '@openai/agents';\nimport { requireReceiptForOpenAIAgent } from '@emilia-protocol/openai-agents';\nimport z from 'zod';\n\nconst cancelOrder = tool({\n  name: 'cancelOrder',\n  description: 'Cancel an order',\n  parameters: z.object({ orderId: z.number() }),\n  needsApproval: true,                       // <- OpenAI pauses the run here\n  execute: async ({ orderId }) => { /* ... */ },\n});\n\nconst agent = new Agent({ name: 'Ops', tools: [cancelOrder] });\n\n// One gate, configured once. The adapter automatically binds the complete\n// arguments and OpenAI callId. actionFor only selects a semantic base action.\nconst gate = requireReceiptForOpenAIAgent({\n  trustedKeys: [process.env.EMILIA_ISSUER_KEY], // base64url SPKI-DER issuer key(s) you trust\n  maxAgeSec: 900,\n  actionFor: (toolName) => `openai.tool.${toolName}`,\n});\n\nlet result = await run(agent, 'Cancel order 4242');\n\nwhile (result.interruptions?.length) {\n  // `receipts` is whatever your app collected for these calls — keyed by callId\n  // or tool name, or an array matched by action_type. A missing/invalid/replayed\n  // receipt is REJECTED; only a valid action-bound receipt is APPROVED.\n  const { approved, rejected, decisions } = await gate.resolve(result, { receipts });\n\n  console.log(decisions); // audit trail: decision + reason + action + subject per call\n\n  // gate.resolve already drove result.state.approve()/reject(); just resume:\n  result = await run(agent, result.state);\n}\n\nconsole.log(result.finalOutput);\n```\n\nPer-interruption form, if you drive approvals yourself:\n\n```js\nconst decision = await gate.decide(interruption, receiptForThisCall);\nif (decision.decision === 'approve') result.state.approve(interruption);\nelse result.state.reject(interruption, { message: `EMILIA: ${decision.reason}` });\n```\n\n## The four checks it enforces\n\nFor every pending tool-approval interruption:\n\n| Situation | Decision |\n| --- | --- |\n| **No receipt** for that interruption | **REJECT** — the tool stays blocked |\n| **Valid** EP-RECEIPT-v1, action-bound to that exact tool call | **APPROVE** — the tool runs |\n| **Replayed** receipt (`receipt_id` already consumed by the configured store) | **REJECT** |\n| **Tampered / invalid** receipt (signature or action mismatch, untrusted issuer, expired) | **REJECT** |\n\n## The six audit questions a receipt answers\n\n1. **Who approved it?** — `payload.subject` / `claim.approver` (a named, accountable human).\n2. **What exact action?** — `claim.action_type`, automatically bound to the tool, complete arguments, and OpenAI call ID.\n3. **Was it altered after approval?** — no: the receipt is Ed25519-signed over sorted-key canonical JSON; any change breaks the signature.\n4. **Was it replayed?** — no: one-time consumption by `receipt_id` in the configured atomic store.\n5. **Was it authorized for the right org / policy?** — pin `trustedKeys` to the issuers your policy accepts; only those verify.\n6. **Verifiable without trusting OpenAI, your app, or mutable logs?** — yes: verification is offline Ed25519 over canonical JSON; anyone holding the issuer's public key can re-check the artifact.\n\n## Production note\n\n- **Pin `trustedKeys`** to your real issuer key(s). **Drop `allowInlineKey`** (it only proves integrity, never trust).\n- **Exact binding is mandatory.** The adapter hashes the complete arguments and OpenAI call ID. `actionFor` may choose a semantic base but cannot weaken that binding.\n- Consumption is durably committed **before** `state.approve()` is called. If that commit fails, the runtime is rejected and the tool cannot run.\n- **Rejections are sanitized:** a reject decision carries only a machine-readable `reason` code, never the signer, the subject, or verifier internals.\n- The default store is process-local. Production fleets must pass a shared, ownership-fenced `{ reserve, commit, release }` store. `reserve` must be atomic insert-if-absent; an uncertain commit remains closed until operator reconciliation.\n- This is **necessary, not sufficient**. It composes with — and never substitutes for — the resource owner's own authorization and policy checks. It makes the human approval that OpenAI already asks for into auditable, portable evidence; it does not decide whether the action *should* be allowed.\n\n## References\n\n- `draft-schrock-ep-authorization-receipts` — EP authorization-receipt format (individual Internet-Draft, **not** an RFC).\n- `draft-schrock-ep-enforcement-point` — EP enforcement-point profile (individual Internet-Draft, **not** an RFC).\n- `@emilia-protocol/require-receipt` — the underlying offline verifier (`verifyEmiliaReceipt`).\n- `@emilia-protocol/gate` — productized enforcement point with a shared consumed-store + assurance tiers.\n\nApache-2.0. Reference implementation, experimental.\n","readmeFilename":"README.md"}