[English](README.md) · [Español](README.es.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [Português](README.pt.md) · [Italiano](README.it.md) · [Türkçe](README.tr.md) · **한국어** · [日本語](README.ja.md) · [简体中文](README.zh.md) · [Русский](README.ru.md) · [Polski](README.pl.md) · [हिन्दी](README.hi.md) · [Nederlands](README.nl.md) · [Українська](README.uk.md) · [Tiếng Việt](README.vi.md) · [Bahasa Indonesia](README.id.md) · [ไทย](README.th.md) · [فارسی](README.fa.md) · [Ελληνικά](README.el.md) · [עברית](README.he.md) · [Čeština](README.cs.md) · [Română](README.ro.md) · [Svenska](README.sv.md) · [Dansk](README.da.md) · [Suomi](README.fi.md) · [Magyar](README.hu.md) · [العربية](README.ar.md) · [Oʻzbekcha](README.uz.md) · [Azərbaycan](README.az.md) · [Български](README.bg.md) · [Hrvatski](README.hr.md) · [Қазақша](README.kk.md) · [ქართული](README.ka.md) · [नेपाली](README.ne.md) · [සිංහල](README.si.md) · [தமிழ்](README.ta.md) · [తెలుగు](README.te.md) · [मराठी](README.mr.md) · [বাংলা](README.bn.md) · [ខ្មែរ](README.km.md) · [Lietuvių](README.lt.md) · [Bahasa Melayu](README.ms.md) · [မြန်မာ](README.my.md) · [Norsk](README.no.md) · [Slovenčina](README.sk.md) · [Slovenščina](README.sl.md) · [Српски](README.sr.md) · [Kiswahili](README.sw.md) · [Filipino](README.tl.md) · [اردو](README.ur.md)

# Uncle Sam

**과금되는 API 대신, 이미 쓰고 있는 웹 계정으로 당신의 브라우저를 통해 응답하는 DeepSeek Harness용 공급자입니다.**

**실제 브라우저에서 chat.deepseek.com을 구동하는 DeepSeek Harness 플러그인 — DeepSeek API의 무료 대안입니다. API 키도, 토큰 과금도 없이 내 계정으로 채팅·DeepThink·웹 검색을 사용하세요.**

**☕ [커피 한 잔 사주세요](https://revolut.me/operatingtag)** — 한 사람이 밤에, 지원 없이 씁니다. 다른 수익 모델은 없습니다. 스타나 쓸모 있는 버그 제보도 똑같이 값집니다.

> **이 제품은 계속 개발 중입니다. 버그가 있을 것으로 보세요.**
>
> 동작하고, 빠르고, 몇 주째 매일 쓰이고 있지만 계속 바뀌고, 브라우저 경로는 예고 없이 바뀌는 웹사이트에
> 의존합니다. 뭔가 깨지면 설명보다 스크린샷과 버전 번호가 더 쓸모 있습니다. 의존한다면 버전을 고정하세요.

```
공급자   deepseek-web
모델     deepseek-chat · deepseek-chat-search · deepseek-reasoner · deepseek-reasoner-search
비용     토큰당 0원 — 브라우저에 이미 열려 있는 구독을 사용합니다
상태     개발 중 — 버그가 있을 것으로 보세요
실측     첫 토큰 약 1.9초 · 오버헤드 약 0.6초 · 한 턴 약 2.5초
```

웹 경로의 응답에는 **🔴 Uncle Sam** 서명이 붙습니다. 이 이름은 농담이지 주장이 아닙니다. 어느 경로가
답했는지를 표시하는 표식이고, API 응답에는 서명이 전혀 없습니다. 누가 답했는지 항상 알 수 있습니다.

---

## 무엇을 아껴 주는가

API는 토큰마다 과금합니다. 웹 제품은 과금하지 않습니다. 이 플러그인은 `deepseek-web`을 모델 공급자로
등록하고, 실제 브라우저에서 `chat.deepseek.com`을 조작해 모든 호출에 응답합니다. 페이지가 일하고,
브라우저가 세션을 들고 있고, 아무것도 계량되지 않습니다.

| | API 경로 | 웹 경로 |
|---|---|---|
| 비용 | 토큰당, 계속 | 구독 외에는 없음 |
| 속도 | 빠름 | 턴당 약 2.5초(실측) |
| 도구 호출 | 네이티브이고 안정적 | 에뮬레이션, 되긴 하지만 약함 |
| 의존 대상 | API | 예고 없이 바뀌는 웹사이트 |

**두 경로가 모두 설치된 채 남습니다.** 모델 선택기가 곧 스위치입니다. 평소에는 저렴한 경로를 쓰고, 안정적인
도구 호출이 필요한 작업에만 API로 넘어가면 됩니다.

---

## 설치

Uncle Sam은 **DeepSeek Harness 플러그인**입니다. 모델 공급자, 호스트 라우트, UI 슬롯 두 곳을 등록하기
때문에 하네스 밖에서는 아무것도 하지 않습니다.

**요구 사항**

| | |
|---|---|
| DeepSeek Harness | 플러그인 관리자가 있는 최근 빌드 |
| 브라우저 | Brave 권장. 없으면 Edge를 자동으로 사용합니다 |
| Node | 22 이상 |

**npm에서**

```bash
pnpm add @operatingtag/dsh-unclesam
```

**이 저장소에서**

```bash
git clone https://github.com/operatingtag/dsh-unclesam
cd dsh-unclesam
pnpm install
```

그다음 하네스가 읽어 가도록 프로필에 한 줄을 추가합니다.

```yaml
# cordis.patch.yml
- insert:
    - id: dsh-unclesam
      name: '@operatingtag/dsh-unclesam'
      config:
        port: 9222
        defaultModel: deepseek-chat-search
        autoMinimise: true
```

**폴더에서 설치하려면:** 설정 → 플러그인 → 로컬 경로에서 설치, `package.json`이 있는 폴더를 지정합니다.

### 첫 실행

**로그인 / 채팅 열기**를 누릅니다. chat.deepseek.com에 로그인할 때까지 브라우저가 **보이는 상태로**
남습니다. 그 뒤로는 스스로 최소화되어 다시 보이지 않습니다. 세션은 브라우저 프로필에 남기 때문에
**플러그인은 비밀번호를 저장하지 않습니다** — 새어 나갈 것이 없습니다.

그 뒤에 보여야 하는 것:

1. **설정 → Uncle Sam** — 상태 줄과 로그인 버튼이 있는 페이지.
2. **입력창 아래** — `● DeepSeek Harness` 또는 `● Uncle Sam`, 클릭해서 전환.
3. **모델 목록** — API 모델 옆에 `(web)` 모델 네 개.

### 제거

설정 → 플러그인 → Uncle Sam → 제거. 로그인한 브라우저 프로필 밖에는 아무것도 쓰지 않습니다.

---

## API / 웹 스위치

**모델 선택기가 곧 스위치입니다.** 두 번째 조작부는 없습니다. 모델까지 고르는 두 번째 조작부는 한 가지
결정에 진실이 두 개가 되기 때문입니다.

| 이 모델을 고르면 | 경로 | DeepThink | 검색 |
|---|---|---|---|
| `DeepSeek Chat (web)` | 브라우저 | 꺼짐 | 꺼짐 |
| `DeepSeek Chat + Search (web)` | 브라우저 | 꺼짐 | **켜짐** |
| `DeepSeek Reasoner (web)` | 브라우저 | **켜짐** | 꺼짐 |
| `DeepSeek Reasoner + Search (web)` | 브라우저 | **켜짐** | **켜짐** |
| `(web)`이 없는 모델 | API | — | — |

모델 이름 옆에 **WEB** 또는 **API** 배지가 붙어 지금 어느 경로인지 한눈에 보입니다. 이름을 알아보지 못하면
배지는 추측하지 않고 아무것도 표시하지 않습니다. 잘못된 배지는 없는 것보다 나쁩니다.

선택은 재시작해도 유지됩니다. **DeepThink**는 추론 패스, **검색**은 실시간 웹을 읽게 하는 기능입니다.

### 검색은 대화에 보입니다

검색 모델에서는 한 턴에 **두 블록**이 생깁니다 — 검색한 질의, 찾은 출처, 그리고 그것을 쓴 답변입니다.

```
웹 검색 — "오늘의 기술 뉴스 헤드라인은?"
출처 (4): yna.co.kr · fnnews.com · rthk.hk · sina.com.cn
링크: https://k.sina.com.cn/article_... http://www.21jingji.com/article_...
```

페이지는 내부에서 입력한 질의를 공개하지 않으므로, 인용된 질의는 검색을 일으킨 메시지입니다. 출처와 링크는
답변이 자리를 잡은 뒤 페이지에서 읽어 옵니다. 출처는 마지막에만 존재하기 때문에 **검색 턴은 스트리밍하지
않고 모아서 출력**합니다. 일반 턴은 지금처럼 토큰 단위로 흘러갑니다.

---

## 왜 브라우저인가, 왜 저쪽 HTTP API가 아닌가

뻔한 길 — `chat.deepseek.com` 자체 API를 호출하는 것 — 은 시도했다가 포기했습니다. 이 사이트는 모든
메시지를 두 개의 문으로 통과시킵니다.

| 문 | 의미 |
|---|---|
| `/api/v0/chat/create_pow_challenge` | 메시지마다 **작업 증명** |
| `challenges.cloudflare.com/turnstile` | 오리진의 봇 차단 |

둘 중 하나를 다시 구현하는 것은 질 수밖에 없는 싸움입니다. 난독화되어 있고, 바뀌고, 바뀌면 실패가 네트워크
장애와 똑같이 보입니다. **페이지는 자기 요청을 위해 이미 둘 다 해결하고 있습니다.**

그래서 어댑터는 사이트와 HTTP로 말하지 않습니다. 페이지를 조작하고, 나머지는 페이지가 합니다. 인증, 작업
증명, Turnstile은 더 이상 우리 문제가 아니고, 사이트 자체와 별개로 깨질 수도 없습니다.

**확인됨:** 사이트에 단순한 `HEAD`를 보내면 `403`이 돌아오고, 브라우저 경로는 답변을 돌려줍니다.

---

## 솔직히 말하는 한계

**도구 호출은 에뮬레이션입니다.** 웹 채팅에는 구조화된 도구 채널이 없습니다. 도구는 프롬프트에 글로 적고,
호출은 응답에서 JSON 객체를 뽑아 복원합니다. 동작합니다 — 확인했습니다 — 하지만 네이티브 도구 호출보다
약합니다. 지시를 무시한 모델은 글로 답해 버리고, 그 턴에 하네스는 도구 사용을 전혀 보지 못합니다. **무거운
에이전트 작업에는 API 경로가 더 안정적입니다.** 웹 경로는 대화, 긴 답변, 서브에이전트, 압축, 그리고 모델이
반드시 웹 모델이어야 하는 턴에 가장 잘 맞습니다.

**당신이 통제할 수 없는 웹사이트에 의존합니다.** 페이지 모양이 바뀌면 플러그인도 따라 바뀌어야 합니다. 이
페이지 맨 위의 개발 중 경고는 형식이 아닙니다.

**DeepSeek과 무관합니다.** 그들의 보증도 지원도 없고, 그들의 서비스에 대한 어떤 권리도 주지 않습니다. 그
서비스의 사용은 그들의 약관을 따릅니다.

---

## 설정

`cordis.patch.yml`에서 정합니다.

| 키 | 기본값 | 의미 |
|---|---|---|
| `port` | `9222` | 브라우저 디버깅 포트 |
| `defaultModel` | `deepseek-chat-search` | 호출이 모델을 지정하지 않을 때 사용 |
| `showBrowser` | `true` | 작업 중 창을 보일지 |

브라우저에는 로그인된 `chat.deepseek.com` 세션이 있어야 합니다. 첫 호출 시 포트가 열려 있지 않으면 Brave를
**Default** 프로필로 실행합니다. Brave가 디버깅 포트 *없이* 이미 실행 중이면 어댑터가 붙을 수 없고, 조용히
실패하지 않고 그 사실을 분명히 알려 줍니다.

---

## 구조

```
index.js          어댑터: 하네스 StreamChunk  ←→  엔진
lib/engine.mjs    브라우저 + 페이지: 입력, 전송, 스트리밍, 안정화 대기
lib/cdp.mjs       Chrome DevTools Protocol 클라이언트, 의존성 없음
lib/prompt.mjs    메시지와 도구를 한 메시지로 평탄화, 응답에서 도구 호출 복원
lib/savings.mjs   웹 경로가 아껴 준 금액을 API 가격으로 환산
lib/i18n.mjs      패널용 51개 언어
```

**의존성이 없습니다.** Node 24에는 `WebSocket`과 `fetch`가 전역으로 있어 CDP에 필요한 것이 그것뿐입니다.
토큰 스트림이 호스트 프로세스를 떠나지 않고, 델타마다 IPC를 건너지도 않습니다.

---

## 후원

Uncle Sam은 토큰 과금을 그만두게 하려고 있습니다. 돈을 아꼈다면, 중간에 메모리가 떨어지지 않는 하드웨어에서
다음을 만들고 싶습니다.

**[☕ revolut.me/operatingtag](https://revolut.me/operatingtag)**

저장소에 스타를 주거나 쓸모 있는 버그를 제보하는 것도 똑같이 값집니다.

---

## 라이선스

**CC BY-NC-ND 4.0** — 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제.
Copyright (c) 2026 Darren T. Weldon, Operating Tag 이름으로 공개.

**한 줄로 말하면: 개인적으로 무료로 설치하고 쓸 수 있습니다. 바꾸지 말고, 공유하지 말고, 팔지 말고, 회사에서
쓰지 마세요.**

오픈 소스가 아니며, 그런 척하지도 않습니다.

```
할 수 있는 것   설치해서 실행하기 · 개인적으로 비영리로 사용하기
                이해를 위해 소스 읽기

할 수 없는 것   변경·각색하거나 2차적 저작물 만들기
                복제·배포·공개·미러하거나 다른 사람이 쓸 수 있게 하기
                코드 호스팅, 레지스트리, 웹사이트, 포럼, 채팅에 올리기
                판매·재판매·대여하거나, 본체나 접근에 대해 돈 받기
                다른 사람에게 넘기는 무엇이든 거기에 포함하기
                상업적 목적이나 사업 활동의 일환으로 사용하기
```

**정당한 출처는 이 저장소와 npm 패키지
[`@operatingtag/dsh-unclesam`](https://www.npmjs.com/package/@operatingtag/dsh-unclesam) 두 곳뿐입니다.**
다른 곳에서 받은 사본은 누가 주었든 라이선스가 없습니다. 이 소프트웨어가 판매되고 있다면, 파는 사람은
저자가 아닙니다.

**상업적 사용, 그리고 변경·배포 권리는 별도의 서면 라이선스로 제공합니다.** Operating Tag에 물어보시면 분명한
답과 분명한 가격을 드립니다.

효력이 있는 것은 [LICENSE](LICENSE) 파일이며, 맨 앞에 같은 내용이 쉬운 영어로 적혀 있습니다.

---

Uncle Sam은 독립적인 플러그인입니다. DeepSeek과 무관하며, 그들의 보증이나 지원을 받지 않습니다.

```
@operatingtag/dsh-unclesam   v1.3.5
저자      Operating Tag
라이선스   CC BY-NC-ND 4.0 — 사용은 자유, 변경·공유·판매는 불가
```
