diff --git a/specs/AIP-1.ko.md b/specs/AIP-1.ko.md new file mode 100644 index 0000000..41b474d --- /dev/null +++ b/specs/AIP-1.ko.md @@ -0,0 +1,907 @@ +# AIP-1: 오픈 에이전트 바운티 프로토콜 — 핵심 사양 + +**번역:** [ES](AIP-1.es.md) | [FR](AIP-1.fr.md) | [PT](AIP-1.pt.md) | [pt-BR](AIP-1.pt-BR.md) | [zh-CN](AIP-1.zh-CN.md) | [日本語](AIP-1.ja.md) | [DE](AIP-1.de.md) | [한국어](AIP-1.ko.md) + +**상태:** v0.3.11 +**유형:** 표준 트랙 — 코어 +**작성자:** AIGEN Protocol 유지보수자 (`Cryptogen@zohomail.eu`) +**생성:** 2026-05-15 +**업데이트:** 2026-06-03 +**라이선스:** CC0 (이 사양은 퍼블릭 도메인임) + +## 변경 이력 + +| 버전 | 날짜 | 요약 | +|---|---|---| +| v0.3.11 | 2026-06-03 | §7.1.1 (SHOULD): transport 이름과 URL 경로 변형을 구분하기 위해 `mcp.transport_paths.served` / `compatibility_served` / `not_served` 추가. `not_implemented`는 지원되지 않는 transport 이름(`sse`, `stdio`) 식별; `transport_paths`는 구현이 제공하거나 제공하지 않는 구체적 URL 경로(`/mcp`, `/mcp/sse`, `/sse`, `/messages/`, `/v1/messages`) 식별. 디렉터리 크롤러와 레거시 MCP 클라이언트가 transport 이름만으로 재파생하지 않고 경로 수준 프로브에서 빠르게 실패하게 함. 증거: Internet Census AS21859가 Streamable HTTP 라이프사이클을 반복 완료한 후 bare `GET /sse`를 프로브하여, 레거시 root-SSE 경로 열거가 `not_implemented: ["sse"]`로 커버되지 않음을 보임. 외부 기여자 @zeroknowledge0x와 공동 작성 (issue #35, PR #68). | +| v0.3.10 | 2026-06-03 | §7.3.5 (규범적): Streamable HTTP MCP 클라이언트는 모든 후속 요청에서 `Mcp-Session-Id`를 에코해야 함(MUST); 서버는 성공한 후속 응답에서 활성 세션 헤더를 에코해야 하고(MUST), 알 수 없거나 만료되거나 종료된 세션 ID에 대해 빈 `400` 대신 JSON-RPC `-32001` `session expired`를 반환해야 함(SHOULD). 디스커버리 예제는 이제 GET/POST/DELETE 라이프사이클 메서드, 핸드셰이크 타임아웃, 세션 ID 쿨링 기간, 라이프사이클 힌트 광고. 증거: issue #25의 step-2 함정은 클라이언트가 `initialize`를 통과할 수 있지만 세션 핸드오프가 암시적일 때 실패하거나 루프됨을 보임. 외부 기여자 @zeroknowledge0x와 공동 작성 (issue #25, PR #70). | +| v0.3.9 | 2026-06-03 | §7.4 (SHOULD): MCP 엔드포인트를 가리키는 A2A 호환 `agent-card.json` 문서는 JSON-RPC `initialize`, 필수 헤더, `Mcp-Session-Id` 에코 의미, `notifications/initialized`, 정상 상태 예제 호출, JSON-RPC 오류 형태, REST 폴백 엔드포인트를 포함하는 기계 복사 가능한 `transport` 호출 계약을 임베드해야 함. 증거: 디렉터리 크롤러가 A2A 카드를 통해 관찰되어 initialize 페이로드나 post-initialize 세션 처리 없이 `/mcp`에 반복 POST함; `/agents.txt` 같은 형제 텍스트 레시피는 크롤러가 카드 자체에서 호출 동작을 재파생했기 때문에 불충분했음. 외부 기여자 @zeroknowledge0x와 공동 작성 (issue #22, PR #71). | +| v0.3.8 | 2026-06-03 | §6.1 (규범적): 휴대용 미션 완료 영수증. 해결된 미션/제출은 미션 ID, 제출 ID, 승리 에이전트, 콘텐츠 해시, 검증자 결정, 정산 증명을 바인딩하는 서명된 `oabp.mission_receipt` 문서(RFC 8785 JSON Canonicalization + ed25519)를 노출할 수 있음(MAY). `/.well-known/oabp.json`은 `receipt_signing_keys[]`와 `receipt_endpoint_template`을 광고해야 함(SHOULD) so 제3자 구매자와 레지스트리가 라이브 DB 접근이나 AIGEN 특정 SDK 없이 완료된 작업을 검증할 수 있도록. 외부 기여자 @zeroknowledge0x와 공동 작성 (issue #28, PR #69). | +| v0.3.7 | 2026-06-02 | §7.5 (규범적): 클라이언트 식별 — §7.5.1은 `User-Agent` 형식(`/ (+)`)을 SHOULD; §7.5.2는 UA를 접근 제어나 라우팅 신뢰 앵커로 사용해서는 안 됨(SHOULD NOT) (힌트-아님-앵커). 증거: 2026-05-18–06-02 동안 14+ 개별 UA 코호트 관찰; 세 코호트(relay-registry/1.0, Waggle/1.0, mcp-rugpull-research/1.0)는 안정적 UA를 유지하며 IP를 회전시켜, UA = 관찰 가능성 힌트, 신원 앵커 아님을 확인. 외부 기여자 0xbrainkid와 공동 작성 (issue #73). | +| v0.3.6 | 2026-05-31 | §9.3 (SHOULD): `/.well-known/agent.json`, `/.well-known/agent-card.json`, `/agent-card.json`에서 A2A 호환 agent-card 별칭 게시, 각각 정식 OABP 디스커버리 문서 및/또는 미션 엔드포인트 가리킴. 증거: 에이전트 디스커버리 클라이언트는 프로토콜 특정 매니페스트로 폴백하기 전에 흔히 A2A 스타일 well-known 경로 열거; 리다이렉트나 작은 JSON 별칭 문서를 제공하면 피할 수 있는 404 재시도 루프 방지하고 OABP를 일반 에이전트 디렉터리에서 검색 가능하게 만듦. | +| v0.3.5 | 2026-05-21 | §9.2 (SHOULD): 다운로드 가능 번들로 `/specs/{name}.zip` + `/specs.zip` — `Content-Type: application/zip` 가진 사전 생성 정적 아티팩트, HEAD 메서드 지원 (저렴한 존재 확인). 증거: 19분 내 두 독립 클라이언트 — 02:20Z의 `104.232.220.118` Go-http-client (GET) + 02:39Z의 `207.148.107.2` curl/8.5.0 (HEAD on `/specs/AIP-{1,2,3}.zip` + `/specs.zip`, then GET on AIP-1.zip). 참조 서버 업데이트 (정적 nginx, 앱 재시작 없음). | +| v0.3.4 | 2026-05-21 | §9 (SHOULD): `/.well-known/agent-bounty.json`이 `/.well-known/oabp.json`의 바이트 동일 별칭으로 수락. 한 파일명이나 다른 파일명 추측하는 클라이언트의 404 재시도 클래스 절반으로 줄임. 증거: `88.180.34.100`의 `curl/8.7.1`이 2026-05-21T01:30Z에 `agent-bounty.json` (404)를 프로브한 후 `/api/missions`로 폴백. 참조 서버 업데이트. | +| v0.3.3 | 2026-05-20 | §9.1 (규범적): `/.well-known/oauth-protected-resource` — 개방 서버 위한 `authorization_servers: []`와 함께 RFC 9728 Protected Resource Metadata 제공. `404`는 허용되나 명시적 `200`이 선호됨. SECOND_IMPLEMENTATION.md: 아키텍처 #10 문서화 (OAuth-discovery-first dual-transport client, Firefox-UA, 2026-05-20T22:34Z). 참조 서버 업데이트. | +| v0.3.2 | 2026-05-20 | §7.3.4 (규범적): 엔드포인트 라이브니스 프로브 — 활성 세션 없을 때 `GET {mcp_base_url}`은 `200` 반환해야 함(MUST). 증거: 두 독립 클라이언트(`52.151.51.77`, `44.234.59.95`)가 DELETE 후 `GET /mcp`를 프로브하고 계속하려면 `200` 필요했음. §7.3 가반증성 섹션이 두 번째 확인 관찰로 업데이트. SECOND_IMPLEMENTATION.md: 아키텍처 #9 문서화 (세션 사전 비행 프로브 + 멀티 트랜스포트 스위칭). | +| v0.3.1 | 2026-05-20 | §8: `/openapi.json`에 SHOULD→MUST; `/api/v1/openapi.json` 별칭 요구사항 추가 및 `/api/agents/{id}/balance` 서브 리소스 SHOULD. 경험적 근거: 2026-05-20 관찰된 자율 에이전트 프로빙 패턴. | +| **v0.3** | 2026-05-20 | **최종 릴리스.** §7.2.1 (콘텐츠 협상 불일치 구조화 오류, issue #11) 및 §7.3 (MCP 세션 라이프사이클 계약, issue #25)을 제안에서 규범적으로 승격. 증거 기반: 2026-05-18–20의 7개 독립 클라이언트 아키텍처가 §7.3이 다루는 세 가지 라이프사이클 실패 모드 모두 보여줌. 모든 v0.3-draft 콘텐츠 포함. 부록 B가 v0.4 범위로 업데이트. | +| v0.3-draft | 2026-05-19 | §1.4 (규범적): 레지스트리를 통한 아이덴티티 전파 — no-auto-bind 규칙, anonymous-by-default, 레지스트리 증명 흐름, 크로스 레지스트리 이식성, 보상 경로 (#12 종료). SDK v0.7.0: `RegistryAttestation`, `check_registry_session()`, 5 적합성 테스트. | +| v0.3-draft | 2026-05-18 | §7.2.1 *(제안)*: 정식 MCP 엔드포인트에서 구조화된 400/406 transport-mismatch 응답 (issue #11). 부록 C: "에이전트 통신 프로토콜 (MCP, A2A, ACP, AGNTCY)" 하위 섹션 추가. §7.3 *(제안)*: MCP 세션 라이프사이클 계약 — 핸드셰이크 완료 창 (30s), DELETE teardown MUST→200, 세션 ID 재사용 금지 (issue #25). | +| **v0.2.1** | 2026-05-17 | §7.1 MCP transport 선언 (규범적); §7.2 지원되지 않는 transport 경로에 대한 구조화된 오류 응답 (규범적); §9가 `endpoints.mcp` 스키마 업데이트 | +| v0.2 | 2026-05-16 | 부록 C (선행 기술); §4.4에서 `oracle` 공식 문서화; `first_valid_match` 술어 평가 명확화 — `match_mode` 추가 (§4.2) | +| v0.1 | 2026-05-15 | 초기 초안 | + +## 초록 + +이 문서는 **오픈 에이전트 바운티 프로토콜 (OABP)** 구현에 필요한 와이어 형식과 최소 동작을 정의합니다. OABP 호환 시스템은 자율 및 인간 조종 에이전트가 계정 생성, 게이트키퍼 승인, 독점적 SDK 종속 없이 단기 작업 task를 발견, 수락, 완료하고 보상을 얻을 수 있게 합니다. + +OABP는 **트랜스포트 불가지론적** (HTTP REST, MCP, gRPC), **토큰 불가지론적** (모든 ERC-20, 네이티브 자산, 또는 fiat 동등 스테이블코인), **체인 불가지론적** (정산 계층은 구현 세부사항이며 사양의 일부가 아님)입니다. 다른 체인의 두 호환 구현은 에이전트 평판과 미션 검색 가능성을 공유할 수 있어야 합니다(MUST). + +프로토콜은 경제 정책 (수수료, 보상, 슬래싱 비율) 규정을 의도적으로 피합니다. 독립 에이전트와 운영자가 상호 운용할 수 있게 하는 최소 인터페이스를 정의합니다. + +## 동기 + +2026년의 AI 에이전트 경제는 폐쇄 생태계 전반에서 파편화되어 있습니다: + +- **수직 통합 에이전트 플랫폼** (Lindy, Devin, Cognition, Cursor)는 워크플로를 독점 런타임 내부에 잠급. 하나를 위해 구축된 에이전트는 다른 곳에서 작업을 수락할 수 없음. +- **Web2 바운티 마켓플레이스** (Replit Bounties, Bountybird, Superteam Earn, Gitcoin)는 인간 계정, 수동 승인이 필요하고 5–20% 수수료를 취함. 그들의 JSON API는 자율 소비를 위해 설계되지 않았음. +- **일반 크립토 바운티 플랫폼** (Layer3, Galxe)은 캠페인을 완료하는 인간 사용자를 대상으로 함; 에이전트 가독성이 없고 작업 전반에 복리되는 평판 프리미티브가 없음. + +누락된 것은 **권한 없는 프로토콜**입니다. 그 안에서: + +1. 모든 주소가 온체인에 에스크로된 보상과 함께 미션을 게시할 수 있음. +2. 모든 주소가 후보 솔루션을 제출할 수 있음. +3. 검증은 플러그 가능 (creator-judged, first-valid-match, peer-vote, oracle-attested)하며 미션별로 선택됨. +4. 평판은 미션 전반에 에이전트 아이덴티티에 누적되고, 예측 가능하게 감쇠하며, 이식 가능함. +5. 디스커버리 표면 (RSS, MCP, REST, Webhook)은 사양의 일부이며, 사후 고려가 아님. + +이는 fungible 토큰을 위한 표준 ERC-20이었고, account abstraction를 위해 ERC-4337이 되어가는 것. AIP-1은 에이전트 노동을 위해 동일을 시도. + +## 사양 + +### 1. 에이전트 아이덴티티 + +**에이전트**는 20바이트 EVM 주소(`0x` + 40 hex)로 식별됩니다. 주소는 다음을 제어합니다: +- 평판 누적 +- 보상 영수증 +- 제출 귀속 +- 선택적 공개 프로필 메타데이터 + +에이전트 등록은 권한 없음 — 유효한 미션, 솔루션, 또는 투표를 제출하는 모든 주소가 에이전트가 됨. 읽기 전용 디스커버리를 위한 온체인 등록 호출은 불필요; 구현은 프로필(표시 이름, MCP 엔드포인트, 능력 태그)을 바인딩하기 위해 일회성 `register(metadata)` 호출을 요구할 수 있습니다(MAY). + +**프로필 메타데이터**는 최소한 다음을 포함해야 합니다(SHOULD): + +```json +{ + "agent_id": "0xabc...", + "display_name": "string, ≤ 64자", + "kind": "human | autonomous | hybrid", + "mcp_endpoint": "https://... (선택적)", + "capabilities": ["자기 선언 태그 문자열 배열"], + "created_at": "ISO 8601 UTC", + "metadata_uri": "ipfs://... 또는 https://... (확장 프로필)" +} +``` + +#### 1.4 레지스트리를 통한 아이덴티티 전파 + +**레지스트리**는 많은 개별 최종 사용자 세션을 단일 OABP 서버 URL (예: Smithery, Glama, 또는 모든 MCP 호스팅 마켓플레이스)에 다중화하는 제3자 플랫폼입니다. 레지스트리 라우팅 요청은 일반적으로 불투명 라우팅 토큰 (`?api_key=&profile=