TypeBox는 TypeScript 우선 스키마 라이브러리입니다. 우리는 이것을 사용해 Gateway WebSocket 프로토콜(핸드셰이크, 요청/응답, 서버 이벤트)을 정의합니다. 이러한 스키마는 macOS 앱을 위한 런타임 검증, JSON Schema 내보내기, Swift 코드 생성을 구동합니다. 단일 진실 공급원이며, 나머지는 모두 생성됩니다. 상위 수준 프로토콜 맥락이 필요하다면 Gateway 아키텍처부터 시작하세요.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
멘털 모델(30초)
모든 Gateway WS 메시지는 다음 세 가지 프레임 중 하나입니다.- 요청:
{ type: "req", id, method, params } - 응답:
{ type: "res", id, ok, payload | error } - 이벤트:
{ type: "event", event, payload, seq?, stateVersion? }
connect 요청이어야 합니다. 그 후 클라이언트는
메서드(예: health, send, chat.send)를 호출하고 이벤트(예:
presence, tick, agent)를 구독할 수 있습니다.
연결 흐름(최소):
| 범주 | 예시 | 참고 |
|---|---|---|
| 코어 | connect, health, status | connect가 첫 번째여야 함 |
| 메시징 | send, agent, agent.wait, system-event, logs.tail | 부수 효과에는 idempotencyKey 필요 |
| 채팅 | chat.history, chat.send, chat.abort | WebChat이 이를 사용함 |
| 세션 | sessions.list, sessions.patch, sessions.delete | 세션 관리 |
| 자동화 | wake, cron.list, cron.run, cron.runs | 깨우기 + cron 제어 |
| 노드 | node.list, node.invoke, node.pair.* | Gateway WS + 노드 작업 |
| 이벤트 | tick, presence, agent, chat, health, shutdown | 서버 푸시 |
src/gateway/server-methods-list.ts(listGatewayMethods, GATEWAY_EVENTS)에 있습니다.
스키마 위치
- 소스:
src/gateway/protocol/schema.ts - 런타임 검증기(AJV):
src/gateway/protocol/index.ts - 광고되는 기능/디스커버리 레지스트리:
src/gateway/server-methods-list.ts - 서버 핸드셰이크 + 메서드 디스패치:
src/gateway/server.impl.ts - Node 클라이언트:
src/gateway/client.ts - 생성된 JSON Schema:
dist/protocol.schema.json - 생성된 Swift 모델:
apps/macos/Sources/OpenClawProtocol/GatewayModels.swift
현재 파이프라인
pnpm protocol:gen- JSON Schema(draft-07)를
dist/protocol.schema.json에 작성합니다.
- JSON Schema(draft-07)를
pnpm protocol:gen:swift- Swift Gateway 모델을 생성합니다.
pnpm protocol:check- 두 생성기를 모두 실행하고 출력이 커밋되었는지 확인합니다.
런타임에서 스키마가 사용되는 방식
- 서버 측: 모든 인바운드 프레임은 AJV로 검증됩니다. 핸드셰이크는
params가
ConnectParams와 일치하는connect요청만 수락합니다. - 클라이언트 측: JS 클라이언트는 이벤트와 응답 프레임을 사용하기 전에 검증합니다.
- 기능 디스커버리: Gateway는
listGatewayMethods()와GATEWAY_EVENTS에서 가져온 보수적인features.methods및features.events목록을hello-ok에 담아 보냅니다. - 이 디스커버리 목록은
coreGatewayHandlers에 있는 호출 가능한 모든 헬퍼를 생성해서 덤프한 것이 아닙니다. 일부 헬퍼 RPC는 광고되는 기능 목록에 열거되지 않은 채src/gateway/server-methods/*.ts에 구현되어 있습니다.
예시 프레임
Connect(첫 번째 메시지):최소 클라이언트(Node.js)
가장 작은 유용한 흐름: connect + health.실제 예시: 메서드를 엔드 투 엔드로 추가하기
예:{ ok: true, text }를 반환하는 새 system.echo 요청을 추가합니다.
- 스키마(진실 공급원)
src/gateway/protocol/schema.ts에 추가합니다.
ProtocolSchemas에 추가하고 타입을 내보냅니다.
- 검증
src/gateway/protocol/index.ts에서 AJV 검증기를 내보냅니다.
- 서버 동작
src/gateway/server-methods/system.ts에 핸들러를 추가합니다.
src/gateway/server-methods.ts에 등록하고(이미 systemHandlers를 병합함),
그런 다음 src/gateway/server-methods-list.ts의 listGatewayMethods 입력에
"system.echo"를 추가합니다.
메서드가 운영자 또는 노드 클라이언트에서 호출될 수 있다면, 범위 강제와
hello-ok 기능 광고가 정렬된 상태를 유지하도록 src/gateway/method-scopes.ts에도
분류합니다.
- 다시 생성
- 테스트 + 문서
src/gateway/server.*.test.ts에 서버 테스트를 추가하고 문서에 메서드를 기록합니다.
Swift 코드 생성 동작
Swift 생성기는 다음을 내보냅니다.req,res,event,unknown케이스가 있는GatewayFrameenum- 강하게 타입 지정된 페이로드 struct/enum
ErrorCode값,GATEWAY_PROTOCOL_VERSION,GATEWAY_MIN_PROTOCOL_VERSION
버전 관리 + 호환성
PROTOCOL_VERSION은src/gateway/protocol/version.ts에 있습니다.- 클라이언트는
minProtocol+maxProtocol을 보냅니다. 서버는 현재 프로토콜을 포함하지 않는 범위를 거부합니다. - Swift 모델은 이전 클라이언트를 깨뜨리지 않도록 알 수 없는 프레임 타입을 유지합니다.
스키마 패턴과 규칙
- 대부분의 객체는 엄격한 페이로드를 위해
additionalProperties: false를 사용합니다. NonEmptyString은 ID와 메서드/이벤트 이름의 기본값입니다.- 최상위
GatewayFrame은type에 대한 discriminator를 사용합니다. - 부수 효과가 있는 메서드는 일반적으로 params에
idempotencyKey가 필요합니다 (예:send,poll,agent,chat.send). agent는 런타임 생성 오케스트레이션 컨텍스트를 위한 선택적internalEvents를 허용합니다(예: 서브에이전트/cron 작업 완료 인계). 이를 내부 API 표면으로 취급하세요.
라이브 스키마 JSON
생성된 JSON Schema는 저장소의dist/protocol.schema.json에 있습니다. 게시된 원시 파일은
일반적으로 다음에서 사용할 수 있습니다.
스키마를 변경할 때
- TypeBox 스키마를 업데이트합니다.
src/gateway/server-methods-list.ts에 메서드/이벤트를 등록합니다.- 새 RPC에 운영자 또는 노드 범위 분류가 필요하면
src/gateway/method-scopes.ts를 업데이트합니다. pnpm protocol:check를 실행합니다.- 다시 생성된 스키마 + Swift 모델을 커밋합니다.