Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
quill-router — 안전한 LLM 프록시를 위한 TrustedRouter.com 저장소 | Kitploit
도구/GitHubGitHub/lore-hex/quill-router
Authentication & AuthorizationEncryption/Decryption ToolsConfiguration AuditingCloud SecurityDevSecOpsPrivacyThreat IntelligenceAPI SecurityLog Analysis
GitHublore-hex/quill-router

quill-router

안전한 LLM 프록시를 위한 TrustedRouter.com 저장소

1828시간 27분 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

TrustedRouter

CI Deploy Prod smoke Status Verifiable trust JavaScript SDK Python SDK License: BUSL-1.1

종단 간 암호화된 LLM. 하나의 API. 증명 가능한 프라이버시.

누가 당신의 프롬프트를 볼 수 있는지 걱정하지 마세요. 코딩 에이전트에게 프로젝트 이동을 지시하고, 원하는 프라이버시 수준을 선택하고, 모델을 고르고, 키를 넣으면 끝입니다. 동일한 API, 30개 이상의 모델, 키 하나. 게이트웨이는 하드웨어 엔클레이브에서 실행되며, 사용자를 절대 기록하지 않는다는 것을 암호학적으로 검증할 수 있습니다.

한 번의 프롬프트로 프로젝트를 옮기세요

이것을 Codex, Claude Code 또는 Cursor에 붙여넣으세요. 마이그레이션을 대신 수행합니다:```text Migrate this project to TrustedRouter, a privacy-first LLM router (https://trustedrouter.com). Repoint my LLM client to base_url "https://api.trustedrouter.com/v1" (or "https://api.trustedrouter.com" for the Anthropic SDK), read the key from the TRUSTEDROUTER_API_KEY env var, and keep all my existing calls working.

For a hard provider-side confidential-compute and end-to-end-encryption requirement, add {"provider": {"min_privacy": "confidential"}}. TrustedRouter fails closed when the selected model or provider cannot satisfy both controls.

Then tell me to sign up at trustedrouter.com, add a card, and paste my sk-tr key into TRUSTEDROUTER_API_KEY.

root@kitploit:~
Then:

1. **개인정보 보호 수준 또는 지역을 선택하세요** —
   `{"provider": {"min_privacy": "zdr"}}`를 사용하면 하드 제로 보존 최소 기준이 적용되고, 또는
   `{"provider": {"min_privacy": "confidential"}}`를 사용하면 더 강력한 하드
   기밀 컴퓨팅 + E2EE 최소 기준이 적용됩니다. 편리한 `trustedrouter/zdr` 및
   `trustedrouter/e2e` (`trustedrouter/confidential`) 별칭이 해당
   풀을 선택합니다. `trustedrouter/eu`와
   `https://api-europe-west4.quillrouter.com/v1`을 사용하면 EU 중심 라우팅이 가능합니다.
2. **모델을 선택하세요** — 수백 개 중 하나를 선택하거나, `trustedrouter/auto`는 자동
   대체 기능을 제공합니다. 공급자 범위가 가장 엄격한 개인정보 보호 필터보다 더 중요할 때
   사용하세요.
3. **가입하고, 카드를 등록하고, 키를 받으세요** — https://trustedrouter.com에서.
4. **배포하세요** — 이제 프롬프트가 검증 가능한 경로를 통해 실행됩니다.

<details>
<summary>직접 연결하는 것을 선호하시나요?</summary>```bash
# Codex
export OPENAI_BASE_URL="https://api.trustedrouter.com/v1"
export OPENAI_API_KEY="sk-tr-v1-..."

# Claude Code
export ANTHROPIC_BASE_URL="https://api.trustedrouter.com"
export ANTHROPIC_API_KEY="sk-tr-v1-..."
root@kitploit:~
# Any OpenAI SDK
client = OpenAI(base_url="https://api.trustedrouter.com/v1", api_key="sk-tr-v1-...")
  • 키 받기 / 돈 가져가기: https://trustedrouter.com
  • 먼저 사용해 보기 (가입 없음): https://trustedrouter.com/chat
  • 기술적 세부사항 (괴짜들을 위해): https://trustedrouter.com/security
  • 우리가 만든 이유: https://jperla.com/blog/attestation-is-all-you-need

괴짜들을 위해: 프라이버시가 어떻게 증명 가능한가

TrustedRouter의 게이트웨이는 GCP Confidential Space 내부에서 실행됩니다. 플랫폼은 실행 중인 바이너리의 측정값에 서명합니다. 사용자는 그 해시를 이 저장소와 비교합니다. 일치한다면, 여러분은 알 수 있습니다 — 추측이 아니라 — 여러분의 프롬프트를 처리하는 코드가 여기서 읽을 수 있는 코드라는 것과, 그 코드가 절대 프롬프트를 디스크에 기록하지 않는다는 것을.

계정 없이 60초 만에 직접 확인해 보세요:```bash NONCE=$(openssl rand -hex 16) curl -s "https://api.trustedrouter.com/attestation?nonce=$NONCE" | jq .

eat_nonce your nonce (replay-protected)

image_digest SHA-256 of the running container

pcrs boot-time platform measurements

Compare image_digest to the published artifact at

https://trustedrouter.com/security — match = the running code is this repo.

root@kitploit:~
| | trust model |
|---|---|
| OpenRouter, hosted providers | "We don't log." A policy you can't check. |
| Portkey, Cloudflare AI Gateway | Log everything for observability. |
| LiteLLM | Self-host, but the running proxy is unverified. |
| **TrustedRouter** | **Open source + hardware attestation. Verify the code path; it logs nothing.** |

Honest scope: attestation proves the running binary is the published binary on
hardware you can challenge with a nonce. It does not defeat a nation-state with
physical host access, and it does not prove the open-source binary is bug-free.
The trust anchor is Google Confidential Computing's hardware-backed attestation
chain. Upstream providers handle prompts per
their own policies — each provider's posture is published on the model pages.

</details>

---

## Repository layout

This repo implements the control-plane contract: route coverage, auth/key
management, billing ledger semantics, usage metadata, no prompt/output storage,
Sentry scrubbers, and provider abstractions. The attested gateway
implementation lives in `quill-cloud-proxy`.

Trust boundary: `api.trustedrouter.com` is the attested prompt path and must
terminate TLS inside Confidential Space. `trustedrouter.com` is the control
plane and must never serve a production inference fallback.

`api.quillrouter.com` remains a permanent working alias (same attested
gateway and cert), so existing integrations keep working with no migration.

## Local```bash
uv sync
uv run pytest
uv run uvicorn trusted_router.main:app --reload
도구 다운로드

실행 중인 인스턴스에 대한 엔드투엔드 스모크 테스트:```bash TR_SMOKE_BASE_URL=http://127.0.0.1:18080/v1 uv run python scripts/smoke_e2e.py

root@kitploit:~
프로덕션의 경우 `TR_SMOKE_BASE_URL=https://api.trustedrouter.com/v1` 및
`TR_SMOKE_INTERNAL_TOKEN`을 설정하십시오(내부 게이트웨이 경로가 토큰으로 보호되는 경우).

로컬 운영자/공급자 키를 다음에 설정하십시오:```text
/Users/jperla/claude/.quill_cloud_keys.private

해당 파일은 절대 커밋되지 않습니다. dotenv 스타일이어야 합니다:```text ANTHROPIC_API_KEY=... OPENAI_API_KEY=... GEMINI_API_KEY=... CEREBRAS_API_KEY=... DEEPSEEK_API_KEY=... MISTRAL_API_KEY=... STRIPE_SECRET_KEY=... STRIPE_WEBHOOK_SECRET=... SENTRY_DSN=...

root@kitploit:~
배포 스크립트는 일부 운영자 파일에서 이미 사용되는 로컬 별칭도 허용합니다: Anthropic의 경우 `CLAUDE_API_KEY`, OpenAI의 경우 `CHATGPT_API_KEY`, `STRIPE_SECRET_KEY`의 경우 `STRIPE_KEY`입니다.

Vertex는 다른 제공업체 플랫폼과 다릅니다. 프로덕션 GCP 배포는 Cloud Run 또는 Confidential Space 서비스 계정과 metadata/ADC의 단기 Google 액세스 토큰을 사용합니다. 자사 선불 Vertex 경로에 대해 이 파일에 장기 Vertex 키를 넣지 마십시오. 대신 런타임 서비스 계정에 Vertex 권한을 부여하십시오.

## 라이선스

Business Source License 1.1. 소스는 공개되어 있으므로 누구나 TrustedRouter의 개인정보 보호 및 증명 주장(https://trust.trustedrouter.com) 뒤에 있는 정확한 코드를 읽고, 빌드하고, 검증할 수 있습니다. 이것이 바로 이 코드가 여기에 있는 이유입니다. 비프로덕션 용도(보안 검토, 감사, 로컬 평가)는 무료입니다. 프로덕션 사용은 Lore Hex Corp의 상용 라이선스가 필요합니다:
[email protected]. 각 버전은 출판 후 4년이 지나면 Apache License 2.0으로 전환됩니다. 2026년 7월 3일 이전에 게시된 코드는 Apache-2.0으로 유지됩니다.

## 보안 기본값

- 프롬프트 및 출력 콘텐츠는 저장되지 않습니다.
- 사용 로그에는 메타데이터만 포함됩니다.
- API 키는 불투명한 키 ID가 있는 솔티드 SHA-256 해시로 저장됩니다.
- 사용자가 제출한 BYOK 공급자 키는 키당 Secret Manager 객체 하나가 아니라 봉투 암호화된 암호문 행으로 저장됩니다. 프로덕션에서 Cloud KMS는 키별 DEK를 래핑합니다. 운영자 관리 키에 대해서는 외부 `env://...` 참조가 계속 지원됩니다.
- 게이트웨이 권한 부여에는 암호화된 BYOK 봉투를 위한 비밀 아님 `byok_cache_key`가 포함됩니다. 증명된 게이트웨이는 이를 짧은 TTL, 메모리 전용 복호화 키 캐싱에 사용합니다. BYOK 회전은 키를 변경하고 삭제는 봉투 반환을 중단합니다.
- BYOK 원시 키는 일회성 입력 전용입니다. 공개/컨트롤 플레인 응답은 짧은 첫/마지막 키 힌트와 암호화된 참조 메타데이터만 노출하며, 평문은 절대 노출하지 않습니다.
- 프로덕션 구성은 내부 게이트웨이 토큰, 서명된 Stripe 웹훅 시크릿, 비메모리 스토리지 백엔드가 없으면 안전하게 차단됩니다(fail closed).
- 프로덕션 컨트롤 플레인 앱은 `/chat/completions`, `/messages`, `/responses`, `/embeddings`를 등록하지 않습니다. 이들은 증명된 API 플레인에 속합니다.
- Sentry는 컨트롤 플레인 전용이며 요청 본문, 인증 헤더, API 키, BYOK 키, 프롬프트 메시지, 출력 텍스트를 스크럽합니다. 클라이언트 측 Sentry 플러드 게이트는 지문별 반복 문제와 프로세스/윈도우별 총 이벤트 수를 제한하므로 단일 시끄러운 통합이 전체 오류 예산을 다시 소비할 수 없습니다.
- 증명된 엔클레이브에는 Sentry 구성이 없습니다.

## 브로드캐스트 관측성

워크스페이스 소유자는 `/v1/broadcast/destinations` 또는 콘솔의 Broadcast 아래에서 Broadcast 대상을 구성할 수 있습니다. 지원되는 대상은 PostHog 및 OTLP JSON 웹훅입니다. Broadcast는 기본적으로 메타데이터 전용입니다: 모델, 공급자, 토큰 수, 지연 시간, 비용, 경로 유형, 리전, 사용자 정의 추적 메타데이터. 프롬프트/출력 콘텐츠는 대상이 명시적으로 `include_content`를 활성화한 경우에만 내보내집니다. 이러한 콘텐츠 사용 암호화 대상은 일반 관리 응답이 아닌 증명된 게이트웨이에만 반환됩니다. 메타데이터 전용 전송은 먼저 영구 Broadcast 아웃박스에 기록되고 `/internal/broadcast/drain`에 의해 비동기적으로 처리되므로 PostHog/웹훅 중단이 추론을 차단하거나 프로세스 재시작 시 이미 처리된 메타데이터를 잃지 않습니다.

## 합성 모니터링

TrustedRouter에는 공개 가동 시간을 위한 별도의 합성 모니터링 플레인이 있습니다. 합성 워커는 엔클레이브 외부에서 실행되며 공개 증명 API로 작은 실제 요청을 보내고 메타데이터만 저장합니다. 모니터 모델 별칭은 다음과 같습니다:

- `trustedrouter/free`: OpenRouter 스타일 무료 풀. 사용자에게 유용하지만 SLA 신호는 아닙니다.
- `trustedrouter/cheap`: 공급자 다양성을 갖춘 가장 저렴한 유료 풀.
- `trustedrouter/eu`: EU 중심 공급자 풀. 특히 `https://api-europe-west4.quillrouter.com/v1`와 함께 사용할 때 유럽, EU 리전 가능, 개인정보 보호 우선 공급자를 선호합니다. 이는 라우팅 정책이지 데이터 상주 전체 보장은 아닙니다.
- `trustedrouter/monitor`: PONG 및 폴백 검사를 위한 내부 가동 시간 풀. 투명성을 위해 카탈로그에 표시되지만 권한 부여에는 구성된 `TR_SYNTHETIC_MONITOR_API_KEY`가 필요합니다. 일반 API 키는 403을 받습니다.

워커는 `us-central1` 및 `europe-west4`에서 실행해야 하며 하드 지출 상한과 자동 재충전이 있는 전용 `trustedrouter-synthetic-monitoring` 워크스페이스/키를 사용해야 합니다. 원시 샘플은 추가 전용 Bigtable 행입니다. 공개 상태 페이지는 `/status`, `/status.json`, `/status/history?window=5m|24h|daily`에 노출된 컴팩트 롤업을 읽습니다. 합성 생성은 `TrustedRouter Synthetic` 앱 라벨을 사용하며 고객/앱 분석에서 제외됩니다.

공급자 측정은 두 가지 독립적인 프로브 클래스를 사용합니다:

- 짧은 PONG 프로브는 전체 활성 카탈로그를 무작위로 커버하며 가동 시간, TTFB, TTFT, 업스트림 API 드리프트를 측정합니다.
- 지속 512토큰 스트림은 `us-central1`에서 결정적 순환으로 가장 중요한 200개 공급자/모델 경로를 커버합니다. 첫 토큰 이후 출력 토큰/초를 측정합니다. 별도의 Cloud Run Job에서 실행되므로 느린 스트림이 가동 시간 프로브를 지연시킬 수 없습니다. 긴 프로브 실패는 공급자 가동 시간이나 API 드리프트 경고에 절대 집계되지 않습니다.

현재 2분 일정은 각 지속 경로에 주당 약 25개 샘플, 30일당 108개 샘플을 제공합니다. CI는 라이브 카탈로그에서 전체 용량 지출 추정치를 계산하고 검토된 월간 상한을 초과하면 실패합니다.

상태는 두 서비스 SLO 클래스를 업스트림 공급자 동작과 섞지 않고 분리합니다:

- `router_core`: 증명 API 도달 가능, 키 권한 부여 작동, 경로 후보/폴백 사용 가능, 정산/환불 지속성.
- `control_plane`: 대시보드, 결제 UI, 키, 크레딧, 문서, 신뢰, 상태 표면.

배포 감시자와 내부 소진율 경보는 기본적으로 `router_core`를 사용합니다. 공급자 전용 실패는 `/status` 및 `/leaderboard`에서 공급자별로 측정됩니다. 폴백이 가능하면 라우터 코어 오류 예산을 소비하지 않습니다.

## 공개 포지셔닝

- 가격 책정: 선불 및 BYOK 사용량은 부동 소수점 달러가 아닌 정수 마이크로달러로 추적되므로 아주 작은 토큰 비용도 원장에서 감사 가능합니다.
- 가동 시간 목표: `trustedrouter/auto`는 로컬/테스트 컨트롤 플레인 추론의 실제 채팅 모델 별칭이며 업스트림 공급자 실패 시 다음 구성된 공급자로 롤오버됩니다. `trustedrouter/eu`는 EU 중심 공급자 풀을 선호하고, `trustedrouter/zdr`는 Anthropic을 우선으로 하는 제로 보존 공급자 하한을 강제하며, `trustedrouter/e2e`는 Tinfoil을 우선으로 하는 기밀 + E2EE 경로를 강제합니다. 채팅 요청은 또한 OpenRouter 스타일 `models` 및 `provider` 라우팅 필터(`order`, `only`, `ignore`, `allow_fallbacks`, `min_privacy`, `data_collection`, `sort`)를 존중하므로 클라이언트가 명시적 폴백 체인 또는 공급자 기본 설정을 요청할 수 있습니다. `min_privacy="confidential"`은 공급자 측 기밀 컴퓨팅 + E2EE의 하드 요구 사항이며, 충족되지 않으면 안전하게 차단됩니다(fail closed). 요청 값 별칭 `e2e` 및 `e2ee`는 더 약한 경로로 폴백하지 않고 동일한 계층을 선택합니다.
- 결제: 선불 크레딧과 BYOK 우선, 구독 불필요.
- 신뢰: 호스팅된 오픈 소스이며 실행 중인 API의 소스 커밋, 이미지 참조, 이미지 다이제스트, 증명 정책이 `trust.trustedrouter.com`에 게시됩니다.
- 가입: 이메일 가입은 워크스페이스용 일회성 관리 키를 생성합니다.
- 지갑/암호화폐: 요청 시 스테이블코인 결제가 Stripe Checkout의 Crypto 결제 수단을 통해 연결됩니다. 카드/기본 Checkout이 기본 경로로 유지됩니다.

## 규모 목표

목표는 OpenRouter급 규모를 지원하는 것입니다:

- 하루 1조 토큰, 즉 하루 평균 초당 약 1,160만 토큰.
- 개발자 계정 100만~400만 개.
- 활성 라우팅 가능 모델 300개 이상.
- 공급자 60개 이상.
- 엣지 배포 라우터와 경쟁력 있는 글로벌 라우팅 오버헤드.

현재 프로덕션 배포는 아직 이 목표를 충족하지 **못합니다**. 컨트롤 플레인은 리전별 Serverless NEG를 갖춘 글로벌 LB 뒤의 4개 GCP 리전에서 실행되고, 추가 증명 리전 풀이 배포될 때까지 3개의 라이브 증명 API 리전이 있습니다. 더 많은 증명 풀이 온라인 상태가 되면 용량은 수평적으로 확장됩니다. 정확성, 신뢰, 결제, SDK 호환성은 안정 상태입니다.

요청 볼륨은 평균 생성 크기에 크게 의존합니다. 하루 1조 토큰 기준:

| 요청당 평균 토큰 수 | 일일 요청 수 | 평균 요청 속도 |
| ---: | ---: | ---: |
| 1,000 | 1.0B | 11.6k rps |
| 2,500 | 400M | 4.6k rps |
| 10,000 | 100M | 1.2k rps |

아키텍처는 이 규모로 진화할 수 있지만, 핫 경로가 요청별 글로벌 병목을 피해야만 합니다. 즉 리전별 무상태 게이트웨이 플리트, 리전별 공급자 풀, 샤딩된 할당량 임대, 추가 전용 메타데이터 쓰기, 비동기 집계가 필요합니다.

## 현재 지연 시간

2026년 5월 2일 이 개발 머신에서 중앙 집중식 GCP `us-central1` 증명 API까지 측정:

| 프로브 | p50 | p95 | 비고 |
| --- | ---: | ---: | --- |
| 인증되지 않은 `/v1/chat/completions` 거부 | 174 ms | 184 ms | DNS, TCP, 공개 TLS, 엔클레이브 요청 처리를 포함. |
| TCP 연결 | 55 ms | 59 ms | 이 머신에서 `us-central1`까지의 네트워크 경로. |
| TLS 핸드셰이크 완료 | 112 ms | 124 ms | 공개 ACME 인증서가 엔클레이브 내부에서 종료됨. |
| `/attestation` | 1.06 s | 1.12 s | GCP 증명 토큰 생성을 포함하므로 일반 라우팅 오버헤드를 대표하지 않음. |

중앙 집중식 네트워크 오버헤드는 OpenRouter가 보고한 엣지 오버헤드보다 훨씬 높지만, 일반적으로 모델 지연 시간이 대화형 요청을 지배합니다. 첫 번째 프로덕션 확장 단계는 맞춤형 글로벌 엣지를 즉시 구축하는 대신 멀티 리전이어야 합니다.

## 수평 확장 구조

프로덕션 경로는 프롬프트 게이트웨이를 무상태로 유지하여 확장되도록 설계되었습니다:

- `api.trustedrouter.com` 인스턴스는 TCP 패스스루 뒤에서 복제될 수 있습니다. 인스턴스는 컨트롤 플레인을 통해 권한 부여, 예약, 정산을 수행하지만 프롬프트 바이트는 증명된 경로를 벗어나지 않습니다.
- Spanner는 강력한 일관성의 컨트롤 플레인 및 결제 상태를 저장합니다: 사용자, 워크스페이스, 키, BYOK 메타데이터, 결제 이벤트 멱등성, 잔액, 집계, 활성 예약, 30일 터미널 요청 감사 창.
- Bigtable은 워크스페이스와 날짜를 키로 하는 제한된 대용량 활동 메타데이터를 저장합니다. 활동 및 공급자 벤치마크는 30일, 원시 합성 샘플은 14일, 컴팩트 상태 롤업은 24개월 보존됩니다. 프롬프트, 출력, 도구 호출 인수는 저장되지 않습니다.
- API 키 검증은 포인트 읽기에 높은 엔트로피 조회 해시를 사용하며 키를 스캔하지 않습니다.
- 비율 제한은 경로 핸들러 전에 적용되며 구성된 저장소를 사용하므로 프로덕션 카운터는 Cloud Run 인스턴스 전체에서 공유됩니다.

OpenRouter 규모 트래픽에서 다음 병목은 엔클레이브 바이너리가 아니라 동기식 결제/권한 부여 경로입니다. 아키텍처는 공개 트래픽이 증가하기 전에 샤딩된 예약, 리전별 Bigtable 클러스터, Cloud Armor 엣지 제한, 여러 게이트웨이 복제본이 필요합니다.

## 멀티 리전 계획

신뢰 경계를 유지하면서 멀티 리전은 가능하지만 신중하게 수행해야 합니다:

- 최소 `us-central1`, `us-east4`, `europe-west4`에 독립적인 웜 증명 게이트웨이 풀을 실행하고, 처음 세 리전이 안정되면 아시아에도 실행합니다.
- TLS 개인 키는 각 리전 Confidential Space 워크로드 내부에 유지합니다.
- ACME를 TLS-ALPN-01에서 DNS-01 또는 동일 호스트 이름의 여러 리전 엔드포인트에서 작동하는 다른 챌린지 흐름으로 전환합니다. 현재 TLS-ALPN-01 흐름은 단일 리전에는 적합하지만 글로벌 DNS 레코드는 챌린지를 잘못된 복제본으로 라우팅할 수 있습니다.
- `api-us-central1.quillrouter.com`, `api-us-east4.quillrouter.com`, `api-europe-west4.quillrouter.com` 같은 리전별 호스트 이름을 결정적 증명, 스모크 테스트, SDK 장애 조치를 위해 유지합니다.
- `api.trustedrouter.com`을 TLS를 종료하지 않는 지연/지리 DNS 또는 TCP 패스스루 뒤에 둡니다. Cloudflare 오렌지 클라우드 프록시는 프롬프트 경로 신뢰 주장과 여전히 호환되지 않습니다.
- 모든 요청에 대해 동기식 글로벌 Spanner 트랜잭션이 아닌 리전별 할당량 임대를 통해 권한을 부여합니다.
- 생성 메타데이터를 리전별 Bigtable 클러스터에 쓰고 비동기적으로 글로벌 활동 뷰로 집계합니다.
- 공급자 라우팅을 리전별로 유지하고 공급자별 회로 차단기, 폴백 정책, 공급자별 비율 제한을 둡니다.

핵심 설계 규칙: 리전 중단은 안전하게 차단(fail closed)되거나 다른 증명 리전으로 라우팅될 수 있지만, 절대 증명되지 않은 프롬프트 핸들러로 조용히 저하되어서는 안 됩니다.

## 라우터 코어 포나인(99.99%) 목표

이 목표는 내부 SLO이지 계약상 SLA가 아닙니다. 99.99%는 연간 약 52분 36초의 다운타임을 허용합니다. 공개 상태 페이지는 측정된 99.99% 라우터 코어 가동 시간이 최소 30~60일 존재할 때까지 이 수치를 목표로 표시합니다.

라우터 코어 가용성이 의미하는 바:

- 증명 TLS에 도달 가능;
- API 키 검증 및 게이트웨이 권한 부여가 작동;
- 경로 후보가 반환되고 폴백이 정상 공급자를 선택할 수 있음;
- 정산/환불이 지속적이거나 안전하게 복구 가능;
- 어떤 프롬프트 요청도 증명되지 않은 경로로 폴백하지 않음.

오늘 이 로드맵을 지원하는 코드 경로:

- `/status.json`은 `slo_classes.router_core`, `slo_classes.control_plane`, 5m, 1h, 6h, 24h 창의 소진율 경보를 내보냅니다.
- 배포 감시자는 기본적으로 `router_core`를 읽으므로 공급자 전용 중단이 컨트롤 플레인 배포를 자동으로 롤백하지 않습니다.
- SDK는 실패를 표면화하기 전에 리전별 증명 엔드포인트 전체에서 연결 실패 및 502/503/504를 재시도해야 합니다.
- Bigtable 활동 쓰기는 지속적인 정산 아웃박스에서 복구할 수 있습니다. 정산은 결정적 생성 ID를 사용하므로 재시도는 동일한 인덱스 행을 덮어쓰며 이중 청구나 활동 중복이 발생할 수 없습니다.

포나인을 목표가 아닌 측정된 가용성으로 설명하기 전에 3개의 웜 GCP 증명 리전, 테스트된 페이징, 라우터 코어 카오스 테스트, 롤백 게이트가 있는 단계적 리전 배포, 최소 30일 동안 측정된 99.99% 이상의 라우터 코어 가동 시간이 필요합니다.

## 내부 게이트웨이 계약

증명 API 플레인은 프롬프트 또는 출력 콘텐츠를 컨트롤 플레인으로 보내지 않고 사용량을 예약하고 정산할 수 있습니다:

- `POST /v1/internal/gateway/authorize`: API 키 해시를 검증하고 크레딧/키 한도를 예약하며, `model`, `models`, `provider` 요청 필터에서 파생된 공급자/BYOK 라우팅 메타데이터, 경로 후보, 구성된 리전별 엔드포인트를 반환합니다.
- `POST /v1/internal/gateway/settle`: 성공적인 사용량을 정산하고 메타데이터 전용 활동 행을 추가합니다.
- `POST /v1/internal/gateway/refund`: 공급자 실패 또는 클라이언트 연결 끊김 후 예약을 해제합니다.

로컬 개발 외부에서는 `TR_INTERNAL_GATEWAY_TOKEN`을 설정하세요.

## 프로덕션 스토리지

프로덕션에서는 다음을 사용합니다:```text
TR_STORAGE_BACKEND=spanner-bigtable
TR_SPANNER_INSTANCE_ID=trusted-router
TR_SPANNER_DATABASE_ID=trusted-router
TR_BIGTABLE_INSTANCE_ID=trusted-router-logs
TR_BIGTABLE_GENERATION_TABLE=trustedrouter-generations

scripts/deploy-gcp.sh는 API를 사용 설정하고, Spanner 테이블 tr_entities를 생성하고, Bigtable 세대 테이블을 만들고, Cloud Run을 배포하며, 현재 GCP 트러스트 메타데이터를 트러스트 페이지에 연결합니다.

결제

POST /v1/billing/checkout는 Stripe Checkout 세션을 생성합니다. TR_STRIPE_SECRET_KEY가 구성된 경우에만 해당하며, 그렇지 않으면 결정적인 로컬 mock 응답을 반환합니다. Stripe 웹훅은 작업 공간에 멱등적으로 크레딧을 부여하며, Checkout 메타데이터의 작업 공간 ID를 사용합니다. 카드 결제는 즉시 정산됩니다. ACH 결제는 {"payment_method":"ach"}를 사용하며, Stripe가 checkout.session.async_payment_succeeded를 보낸 후에만 크레딧이 부여됩니다. 출금 처리 중 Checkout 완료는 크레딧을 부여하지 않습니다. POST /v1/billing/portal은 동일한 Stripe-또는-mock 패턴을 따라 결제 관리를 수행합니다.

스테이블코인 결제를 위해서는 {"payment_method":"stablecoin"}을 보내세요. TR_STABLECOIN_CHECKOUT_ENABLED=true인 경우, Checkout 세션은 Stripe의 crypto 결제 수단으로 생성되며, 서명된 checkout.session.completed 웹훅에서 작업 공간에 여전히 크레딧을 부여합니다.

ACH는 Stripe Checkout의 us_bank_account 결제 수단을 사용합니다. 기본 처리 수수료는 0.8%, 최대 $5이며, 다음 값으로 재정의할 수 있습니다: TR_STRIPE_ACH_FEE_BASIS_POINTS, TR_STRIPE_ACH_FEE_FIXED_CENTS, TR_STRIPE_ACH_FEE_MAX_CENTS. 저장된 카드 자동 리필은 카드 전용으로 유지됩니다.