@operatingtag/dsh-unclesam 0.0.0-stage → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CHANGELOG.md +928 -0
  2. package/LICENSE +144 -0
  3. package/README.de.md +274 -0
  4. package/README.es.md +268 -0
  5. package/README.fr.md +272 -0
  6. package/README.hi.md +263 -0
  7. package/README.id.md +264 -0
  8. package/README.it.md +268 -0
  9. package/README.ja.md +263 -0
  10. package/README.ko.md +258 -0
  11. package/README.md +260 -2
  12. package/README.nl.md +266 -0
  13. package/README.pl.md +266 -0
  14. package/README.pt.md +265 -0
  15. package/README.ru.md +269 -0
  16. package/README.tr.md +265 -0
  17. package/README.uk.md +265 -0
  18. package/README.vi.md +263 -0
  19. package/README.zh.md +248 -0
  20. package/client.js +1099 -0
  21. package/cordis.patch.yml +48 -0
  22. package/icon.svg +17 -0
  23. package/index.js +1414 -0
  24. package/install.cmd +43 -0
  25. package/install.ps1 +311 -0
  26. package/lib/cdp.mjs +247 -0
  27. package/lib/engine.mjs +1412 -0
  28. package/lib/i18n.mjs +141 -0
  29. package/lib/prefs.mjs +101 -0
  30. package/lib/prompt.mjs +498 -0
  31. package/lib/savings.mjs +131 -0
  32. package/locale/ar.json +98 -0
  33. package/locale/az.json +98 -0
  34. package/locale/bg.json +98 -0
  35. package/locale/bn.json +98 -0
  36. package/locale/cs.json +98 -0
  37. package/locale/da.json +98 -0
  38. package/locale/de.json +98 -0
  39. package/locale/el.json +98 -0
  40. package/locale/en.json +98 -0
  41. package/locale/es.json +98 -0
  42. package/locale/fa.json +98 -0
  43. package/locale/fi.json +98 -0
  44. package/locale/fr.json +98 -0
  45. package/locale/he.json +98 -0
  46. package/locale/hi.json +98 -0
  47. package/locale/hr.json +98 -0
  48. package/locale/hu.json +98 -0
  49. package/locale/id.json +98 -0
  50. package/locale/it.json +98 -0
  51. package/locale/ja.json +98 -0
  52. package/locale/ka.json +98 -0
  53. package/locale/kk.json +98 -0
  54. package/locale/km.json +98 -0
  55. package/locale/ko.json +98 -0
  56. package/locale/lt.json +98 -0
  57. package/locale/mr.json +98 -0
  58. package/locale/ms.json +98 -0
  59. package/locale/my.json +98 -0
  60. package/locale/ne.json +98 -0
  61. package/locale/nl.json +98 -0
  62. package/locale/no.json +98 -0
  63. package/locale/pl.json +98 -0
  64. package/locale/pt.json +98 -0
  65. package/locale/ro.json +98 -0
  66. package/locale/ru.json +98 -0
  67. package/locale/si.json +98 -0
  68. package/locale/sk.json +98 -0
  69. package/locale/sl.json +98 -0
  70. package/locale/sr.json +98 -0
  71. package/locale/sv.json +98 -0
  72. package/locale/sw.json +98 -0
  73. package/locale/ta.json +98 -0
  74. package/locale/te.json +98 -0
  75. package/locale/th.json +98 -0
  76. package/locale/tl.json +98 -0
  77. package/locale/tr.json +98 -0
  78. package/locale/uk.json +98 -0
  79. package/locale/ur.json +98 -0
  80. package/locale/uz.json +98 -0
  81. package/locale/vi.json +98 -0
  82. package/locale/zh.json +98 -0
  83. package/package.json +89 -4
package/README.md CHANGED
@@ -1,3 +1,261 @@
1
- # Temporary Holding Version
1
+ **English** · [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.ko.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)
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ # Uncle Sam
4
+
5
+ **A DeepSeek Harness provider that answers through your own browser, on your existing web account, instead of the billed API.**
6
+
7
+ **☕ [Buy me a coffee](https://revolut.me/operatingtag)** — written by one person, at night, funded by nothing. There is no other revenue model. A star or a bug report is worth just as much.
8
+
9
+ > **This product is ongoing and under active development. Expect bugs.**
10
+ >
11
+ > It works, it is fast, and it has been driven daily for weeks — but it keeps changing, and the browser route
12
+ > depends on a website that changes without telling anyone. If something breaks, a screenshot and the version
13
+ > number is worth more than a description. Pin a version if you depend on it.
14
+
15
+ ```
16
+ provider deepseek-web
17
+ models deepseek-chat · deepseek-chat-search · deepseek-reasoner · deepseek-reasoner-search
18
+ cost nothing per token — it uses the subscription already open in your browser
19
+ status ongoing development — expect bugs
20
+ measured first token ~1.9 s · overhead ~0.6 s · a full turn in ~2.5 s
21
+ ```
22
+
23
+ Replies from the web route are signed **🔴 Uncle Sam**. That name is a joke, not a claim: it marks which route
24
+ answered, and API replies carry no signature at all. You always know which of the two answered you.
25
+
26
+ ---
27
+
28
+ ## What it saves you
29
+
30
+ The API bills per token. The web product does not. This plugin registers `deepseek-web` as a model provider and
31
+ answers every call by driving `chat.deepseek.com` in a real browser — the page does the work, the browser holds
32
+ the session, and nothing is metered.
33
+
34
+ | | API route | Web route |
35
+ |---|---|---|
36
+ | Cost | per token, forever | nothing beyond the subscription |
37
+ | Speed | fast | ~2.5 s a turn, measured |
38
+ | Tool calling | native and reliable | emulated, works but weaker |
39
+ | Depends on | the API | a website that changes without notice |
40
+
41
+ **Both routes stay installed.** The model picker is the switch, so you can use the cheap one by default and
42
+ reach for the API when a task needs reliable tool use.
43
+
44
+ ---
45
+
46
+ ## Installing
47
+
48
+ Uncle Sam is a **DeepSeek Harness plugin**. It does nothing outside the harness, because it registers a model
49
+ provider, a host route and two client UI slots.
50
+
51
+ **Requirements**
52
+
53
+ | | |
54
+ |---|---|
55
+ | DeepSeek Harness | any recent build with the plugin manager |
56
+ | Browser | Brave recommended, Edge used automatically when Brave is absent |
57
+ | Node | 22 or newer |
58
+
59
+ **From npm**
60
+
61
+ ```bash
62
+ pnpm add @operatingtag/dsh-unclesam
63
+ ```
64
+
65
+ **From this repository**
66
+
67
+ ```bash
68
+ git clone https://github.com/operatingtag/dsh-unclesam
69
+ cd dsh-unclesam
70
+ pnpm install
71
+ ```
72
+
73
+ Then add the bundle row to your profile so the harness loads it:
74
+
75
+ ```yaml
76
+ # cordis.patch.yml
77
+ - insert:
78
+ - id: dsh-unclesam
79
+ name: '@operatingtag/dsh-unclesam'
80
+ config:
81
+ port: 9222
82
+ defaultModel: deepseek-chat-search
83
+ autoMinimise: true
84
+ ```
85
+
86
+ **Or from a folder:** Settings → Plugins → install from a local path, pointed at the folder holding
87
+ `package.json`.
88
+
89
+ ### First run
90
+
91
+ Click **Sign in / open chat**. The browser opens and **stays visible** until you have signed in at
92
+ chat.deepseek.com. After that it minimises itself and you will not see it again. The session lives in your
93
+ browser profile, so **no password is stored by the plugin** — there is nothing to leak.
94
+
95
+ You should then see:
96
+
97
+ 1. **Settings → Uncle Sam** — a page with status rows and a sign-in button.
98
+ 2. **Under the chat box** — `● DeepSeek Harness` or `● Uncle Sam`, click to switch.
99
+ 3. **The model list** — four `(web)` models beside the API models.
100
+
101
+ ### Removing it
102
+
103
+ Settings → Plugins → Uncle Sam → Uninstall. Nothing is written outside the browser profile you signed in to.
104
+
105
+ ---
106
+
107
+ ## The API / web switch
108
+
109
+ **The model picker is the switch.** There is no second control, because a second control that also chose the
110
+ model would be two sources of truth for one decision.
111
+
112
+ | Pick this model | Route | DeepThink | Search |
113
+ |---|---|---|---|
114
+ | `DeepSeek Chat (web)` | browser | off | off |
115
+ | `DeepSeek Chat + Search (web)` | browser | off | **on** |
116
+ | `DeepSeek Reasoner (web)` | browser | **on** | off |
117
+ | `DeepSeek Reasoner + Search (web)` | browser | **on** | **on** |
118
+ | any model without `(web)` | the API | — | — |
119
+
120
+ A **WEB** or **API** badge renders beside the model label so the active route is visible at a glance. When the
121
+ label is not recognised the badge renders nothing rather than guessing — a wrong badge is worse than none.
122
+
123
+ Your choice persists across restarts. **DeepThink** is the reasoning pass; **Search** lets it read the live web.
124
+
125
+ ### Search is visible in the transcript
126
+
127
+ With a search model, a turn produces **two blocks** — the query it searched with, the sources it found, then
128
+ the answer that used them:
129
+
130
+ ```
131
+ Web search — "What is one technology news headline from today?"
132
+ Sources (4): yna.co.kr · fnnews.com · rthk.hk · sina.com.cn
133
+ Links: https://k.sina.com.cn/article_... http://www.21jingji.com/article_...
134
+ ```
135
+
136
+ The page does not expose the query it typed internally, so the quoted query is the prompt that triggered the
137
+ search. Sources and links are read from the page once the answer settles. Because sources only exist at the
138
+ end, **search turns buffer instead of streaming**; ordinary turns still stream token by token.
139
+
140
+ ---
141
+
142
+ ## Why a browser, and not their HTTP API
143
+
144
+ The obvious route — calling `chat.deepseek.com`'s own API — was attempted and abandoned. The site makes every
145
+ message clear two gates:
146
+
147
+ | Gate | What it means |
148
+ |---|---|
149
+ | `/api/v0/chat/create_pow_challenge` | a **proof-of-work** challenge per message |
150
+ | `challenges.cloudflare.com/turnstile` | a bot gate on the origin |
151
+
152
+ Re-implementing either is a losing game: they are obfuscated, they change, and when they change the failure
153
+ looks exactly like a network fault. **The page already solves both for its own requests.**
154
+
155
+ So the adapter never speaks HTTP to the site. It drives the page, and the page does the rest. Auth,
156
+ proof-of-work and Turnstile stop being our problem and cannot break independently of the site itself.
157
+
158
+ **Verified:** a plain `HEAD` to the site returns `403`; the browser path returns answers.
159
+
160
+ ---
161
+
162
+ ## Limits, stated honestly
163
+
164
+ **Tool use is emulated.** A web chat has no structured tool channel, so tools are described in the prompt and
165
+ a call is recovered by parsing a JSON object out of the reply. It works — verified — but it is weaker than
166
+ native tool calling: a model that ignores the instruction answers in prose, and the harness sees no tool use
167
+ that turn. **For heavy agentic work the API route is more reliable.** The web route is best for chat, long
168
+ answers, subagents, compaction, and any turn where the model must be the web model.
169
+
170
+ **It depends on a website you do not control.** When the page changes shape, the plugin has to change with it.
171
+ That is the ongoing-development warning at the top of this page, not a formality.
172
+
173
+ **It is not affiliated with DeepSeek.** It is not endorsed by them, and it gives you no rights in their
174
+ service. Your use of that service is governed by their terms.
175
+
176
+ ---
177
+
178
+ ## Configuration
179
+
180
+ `cordis.patch.yml` sets:
181
+
182
+ | key | default | meaning |
183
+ |---|---|---|
184
+ | `port` | `9222` | the browser's debugging port |
185
+ | `defaultModel` | `deepseek-chat-search` | used when a call names no model |
186
+ | `showBrowser` | `true` | whether the window is visible while it works |
187
+
188
+ The browser must hold a signed-in `chat.deepseek.com` session. The first call launches Brave on the **Default**
189
+ profile if the port is not already open. If Brave is already running *without* a debugging port, the adapter
190
+ cannot attach, and says so clearly rather than failing silently.
191
+
192
+ ---
193
+
194
+ ## Architecture
195
+
196
+ ```
197
+ index.js the adapter: harness StreamChunk ←→ engine
198
+ lib/engine.mjs browser + page: type, send, stream, settle
199
+ lib/cdp.mjs Chrome DevTools Protocol client, zero dependencies
200
+ lib/prompt.mjs flatten messages + tools into one message; recover tool calls from the reply
201
+ lib/savings.mjs what the web route saved you, priced against the API
202
+ lib/i18n.mjs 51 languages for the panel
203
+ ```
204
+
205
+ **No dependencies.** Node 24 ships a global `WebSocket` and `fetch`, which is all CDP needs, so the token
206
+ stream never leaves the host process and there is no IPC hop per delta.
207
+
208
+ ---
209
+
210
+ ## Support
211
+
212
+ Uncle Sam exists so you stop paying per token. If it saved you money, and you would like to see the next one
213
+ built on hardware that does not run out of memory halfway through:
214
+
215
+ **[☕ revolut.me/operatingtag](https://revolut.me/operatingtag)**
216
+
217
+ A star on the repo or a useful bug report is worth just as much.
218
+
219
+ ---
220
+
221
+ ## Licence
222
+
223
+ **CC BY-NC-ND 4.0** — Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.
224
+ Copyright (c) 2026 Darren T. Weldon, published under the Operating Tag name.
225
+
226
+ **The whole deal, in one line: install it and use it, personally, for free. Do not change it, do not share
227
+ it, do not sell it, and do not use it in a business.**
228
+
229
+ That is not open source, and it does not pretend to be.
230
+
231
+ ```
232
+ you may install it and run it · use it personally, non-commercially
233
+ read the source to understand it
234
+
235
+ you may not modify, adapt or create a derivative of it
236
+ copy, distribute, publish, mirror or make it available to anyone
237
+ upload it to any code host, registry, website, forum or chat
238
+ sell, resell, rent, or charge for it or for access to it
239
+ bundle it into anything you supply to another person
240
+ use it for any commercial purpose, or in the course of a business
241
+ ```
242
+
243
+ **The only two legitimate sources are this repository and the npm package
244
+ [`@operatingtag/dsh-unclesam`](https://www.npmjs.com/package/@operatingtag/dsh-unclesam).** A copy from
245
+ anywhere else is not licensed, whoever supplied it. If you see this software for sale, it is not being sold by
246
+ its author.
247
+
248
+ **Commercial use, and the right to modify and distribute, are available under a separate written licence.**
249
+ Ask Operating Tag and you will get a straight answer and a clear price.
250
+
251
+ The [LICENSE](LICENSE) file governs, and it opens with the same summary in plain English.
252
+
253
+ ---
254
+
255
+ Uncle Sam is an independent plugin. Not affiliated with, endorsed by, or supported by DeepSeek.
256
+
257
+ ```
258
+ @operatingtag/dsh-unclesam v1.0.1
259
+ Author Operating Tag
260
+ Licence CC BY-NC-ND 4.0 — free to use, not to change, share or sell
261
+ ```
package/README.nl.md ADDED
@@ -0,0 +1,266 @@
1
+ [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.ko.md) · [日本語](README.ja.md) · [简体中文](README.zh.md) · [Русский](README.ru.md) · [Polski](README.pl.md) · [हिन्दी](README.hi.md) · **Nederlands** · [Українська](README.uk.md) · [Tiếng Việt](README.vi.md) · [Bahasa Indonesia](README.id.md)
2
+
3
+ # Uncle Sam
4
+
5
+ **Een provider voor DeepSeek Harness die antwoordt via je eigen browser, op het webaccount dat je al hebt, in plaats van via de betaalde API.**
6
+
7
+ **☕ [Trakteer me op een koffie](https://revolut.me/operatingtag)** — geschreven door één persoon, 's nachts, zonder financiering. Er is geen ander verdienmodel. Een ster of een bruikbare bugmelding is net zoveel waard.
8
+
9
+ > **Dit product is volop in ontwikkeling. Verwacht bugs.**
10
+ >
11
+ > Het werkt, het is snel en het draait al weken dagelijks — maar het verandert voortdurend, en de browserroute
12
+ > hangt af van een website die zonder waarschuwing verandert. Als er iets stukgaat, zijn een schermafbeelding en
13
+ > het versienummer meer waard dan een beschrijving. Pin een versie als je ervan afhankelijk bent.
14
+
15
+ ```
16
+ provider deepseek-web
17
+ modellen deepseek-chat · deepseek-chat-search · deepseek-reasoner · deepseek-reasoner-search
18
+ kosten niets per token — gebruikt het abonnement dat al in je browser openstaat
19
+ status in ontwikkeling — verwacht bugs
20
+ gemeten eerste token ~1,9 s · overhead ~0,6 s · een hele beurt in ~2,5 s
21
+ ```
22
+
23
+ Antwoorden via de webroute zijn ondertekend met **🔴 Uncle Sam**. Die naam is een grap, geen claim: hij markeert
24
+ welke route antwoordde, en API-antwoorden hebben helemaal geen ondertekening. Je weet altijd wie je antwoord gaf.
25
+
26
+ ---
27
+
28
+ ## Wat het je bespaart
29
+
30
+ De API rekent per token. Het webproduct niet. Deze plugin registreert `deepseek-web` als modelprovider en
31
+ beantwoordt elke aanroep door `chat.deepseek.com` in een echte browser te besturen — de pagina doet het werk, de
32
+ browser houdt de sessie vast, en er wordt niets gemeten.
33
+
34
+ | | API-route | Webroute |
35
+ |---|---|---|
36
+ | Kosten | per token, altijd | niets bovenop het abonnement |
37
+ | Snelheid | snel | ~2,5 s per beurt, gemeten |
38
+ | Tool-aanroepen | native en betrouwbaar | nagebootst, werkt maar zwakker |
39
+ | Hangt af van | de API | een website die zonder waarschuwing verandert |
40
+
41
+ **Beide routes blijven geïnstalleerd.** De modelkiezer is de schakelaar: gebruik standaard de goedkope route en
42
+ grijp naar de API wanneer een taak betrouwbare tools nodig heeft.
43
+
44
+ ---
45
+
46
+ ## Installeren
47
+
48
+ Uncle Sam is een **DeepSeek Harness-plugin**. Buiten de harness doet hij niets, omdat hij een modelprovider, een
49
+ hostroute en twee UI-plekken registreert.
50
+
51
+ **Vereisten**
52
+
53
+ | | |
54
+ |---|---|
55
+ | DeepSeek Harness | elke recente build met pluginbeheer |
56
+ | Browser | Brave aanbevolen, Edge wordt automatisch gebruikt als Brave ontbreekt |
57
+ | Node | 22 of nieuwer |
58
+
59
+ **Vanaf npm**
60
+
61
+ ```bash
62
+ pnpm add @operatingtag/dsh-unclesam
63
+ ```
64
+
65
+ **Vanuit deze repository**
66
+
67
+ ```bash
68
+ git clone https://github.com/operatingtag/dsh-unclesam
69
+ cd dsh-unclesam
70
+ pnpm install
71
+ ```
72
+
73
+ Voeg dan de pakketregel toe aan je profiel zodat de harness hem laadt:
74
+
75
+ ```yaml
76
+ # cordis.patch.yml
77
+ - insert:
78
+ - id: dsh-unclesam
79
+ name: '@operatingtag/dsh-unclesam'
80
+ config:
81
+ port: 9222
82
+ defaultModel: deepseek-chat-search
83
+ autoMinimise: true
84
+ ```
85
+
86
+ **Of vanuit een map:** Instellingen → Plugins → installeren vanaf een lokaal pad, wijzend naar de map met
87
+ `package.json`.
88
+
89
+ ### Eerste keer
90
+
91
+ Klik op **Inloggen / chat openen**. De browser opent en **blijft zichtbaar** tot je bent ingelogd op
92
+ chat.deepseek.com. Daarna minimaliseert hij zichzelf en zie je hem niet meer. De sessie leeft in je
93
+ browserprofiel, dus **de plugin bewaart geen wachtwoord** — er is niets dat kan uitlekken.
94
+
95
+ Je zou dan moeten zien:
96
+
97
+ 1. **Instellingen → Uncle Sam** — een pagina met statusregels en een inlogknop.
98
+ 2. **Onder het invoerveld** — `● DeepSeek Harness` of `● Uncle Sam`, klik om te wisselen.
99
+ 3. **De modellenlijst** — vier `(web)`-modellen naast de API-modellen.
100
+
101
+ ### Verwijderen
102
+
103
+ Instellingen → Plugins → Uncle Sam → Verwijderen. Buiten het browserprofiel waarmee je inlogde wordt niets
104
+ geschreven.
105
+
106
+ ---
107
+
108
+ ## De schakelaar API / web
109
+
110
+ **De modelkiezer is de schakelaar.** Er is geen tweede bediening, want een tweede bediening die ook het model
111
+ koos zou twee bronnen van waarheid zijn voor één beslissing.
112
+
113
+ | Kies dit model | Route | DeepThink | Zoeken |
114
+ |---|---|---|---|
115
+ | `DeepSeek Chat (web)` | browser | uit | uit |
116
+ | `DeepSeek Chat + Search (web)` | browser | uit | **aan** |
117
+ | `DeepSeek Reasoner (web)` | browser | **aan** | uit |
118
+ | `DeepSeek Reasoner + Search (web)` | browser | **aan** | **aan** |
119
+ | elk model zonder `(web)` | de API | — | — |
120
+
121
+ Naast de modelnaam verschijnt een badge **WEB** of **API**, zodat de actieve route in één oogopslag zichtbaar is.
122
+ Wordt de naam niet herkend, dan toont de badge niets in plaats van te gokken — een verkeerde badge is erger dan
123
+ geen.
124
+
125
+ Je keuze blijft bewaard na herstarts. **DeepThink** is de redeneerpass; **Zoeken** laat hem het live web lezen.
126
+
127
+ ### Zoeken is zichtbaar in het gesprek
128
+
129
+ Met een zoekmodel levert een beurt **twee blokken** op — de zoekopdracht die hij gebruikte, de gevonden bronnen
130
+ en dan het antwoord dat ervan gebruikmaakte:
131
+
132
+ ```
133
+ Webzoekopdracht — "Wat is vandaag een technologienieuws-kop?"
134
+ Bronnen (4): yna.co.kr · fnnews.com · rthk.hk · sina.com.cn
135
+ Links: https://k.sina.com.cn/article_... http://www.21jingji.com/article_...
136
+ ```
137
+
138
+ De pagina geeft de intern getypte opdracht niet prijs, dus de geciteerde opdracht is het bericht dat het zoeken
139
+ startte. Bronnen en links worden van de pagina gelezen zodra het antwoord is gaan liggen. Omdat bronnen pas aan
140
+ het eind bestaan, **worden zoekbeurten gebufferd in plaats van gestreamd**; gewone beurten streamen nog steeds
141
+ token voor token.
142
+
143
+ ---
144
+
145
+ ## Waarom een browser, en niet hun HTTP-API
146
+
147
+ De voor de hand liggende route — de eigen API van `chat.deepseek.com` aanroepen — is geprobeerd en verlaten. De
148
+ site laat elk bericht door twee poorten:
149
+
150
+ | Poort | Wat het betekent |
151
+ |---|---|
152
+ | `/api/v0/chat/create_pow_challenge` | een **proof-of-work** per bericht |
153
+ | `challenges.cloudflare.com/turnstile` | een botpoort op de origin |
154
+
155
+ Een van beide opnieuw bouwen is een verloren spel: ze zijn verduisterd, ze veranderen, en als ze veranderen lijkt
156
+ de storing precies op een netwerkstoring. **De pagina lost beide al op voor zijn eigen verzoeken.**
157
+
158
+ De adapter spreekt dus nooit HTTP met de site. Hij bestuurt de pagina, en de pagina doet de rest. Authenticatie,
159
+ proof-of-work en Turnstile zijn niet langer ons probleem en kunnen niet los van de site zelf breken.
160
+
161
+ **Geverifieerd:** een kale `HEAD` naar de site geeft `403`; de browserroute geeft antwoorden.
162
+
163
+ ---
164
+
165
+ ## Grenzen, eerlijk gezegd
166
+
167
+ **Tool-aanroepen zijn nagebootst.** Een webchat heeft geen gestructureerd toolkanaal: tools worden in de prompt
168
+ beschreven en een aanroep wordt teruggevonden door een JSON-object uit het antwoord te halen. Het werkt —
169
+ geverifieerd — maar is zwakker dan native tool-aanroepen: een model dat de instructie negeert antwoordt in proza
170
+ en de harness ziet die beurt geen toolgebruik. **Voor zwaar agentisch werk is de API-route betrouwbaarder.** De
171
+ webroute is het best voor gesprek, lange antwoorden, subagents, compactie en elke beurt waarin het model het
172
+ webmodel moet zijn.
173
+
174
+ **Het hangt af van een website die je niet beheert.** Als de pagina van vorm verandert, moet de plugin mee. Dat is
175
+ de waarschuwing over actieve ontwikkeling bovenaan deze pagina, geen formaliteit.
176
+
177
+ **Het is niet verbonden met DeepSeek.** Het wordt door hen niet goedgekeurd of ondersteund, en het geeft je geen
178
+ rechten op hun dienst. Jouw gebruik van die dienst valt onder hun voorwaarden.
179
+
180
+ ---
181
+
182
+ ## Configuratie
183
+
184
+ `cordis.patch.yml` stelt in:
185
+
186
+ | sleutel | standaard | betekenis |
187
+ |---|---|---|
188
+ | `port` | `9222` | de debugpoort van de browser |
189
+ | `defaultModel` | `deepseek-chat-search` | gebruikt als een aanroep geen model noemt |
190
+ | `showBrowser` | `true` | of het venster zichtbaar is tijdens het werk |
191
+
192
+ De browser moet een ingelogde `chat.deepseek.com`-sessie hebben. De eerste aanroep start Brave met het
193
+ **Default**-profiel als de poort nog niet open is. Draait Brave al *zonder* debugpoort, dan kan de adapter niet
194
+ koppelen en zegt dat duidelijk in plaats van stil te falen.
195
+
196
+ ---
197
+
198
+ ## Opbouw
199
+
200
+ ```
201
+ index.js de adapter: harness StreamChunk ←→ engine
202
+ lib/engine.mjs browser + pagina: typen, sturen, streamen, laten rusten
203
+ lib/cdp.mjs Chrome DevTools Protocol-client, geen afhankelijkheden
204
+ lib/prompt.mjs vlakt berichten + tools af tot één bericht; haalt tool-aanroepen uit het antwoord
205
+ lib/savings.mjs wat de webroute je bespaarde, geprijsd tegen de API
206
+ lib/i18n.mjs 51 talen voor het paneel
207
+ ```
208
+
209
+ **Geen afhankelijkheden.** Node 24 heeft globale `WebSocket` en `fetch`, en dat is alles wat CDP nodig heeft,
210
+ dus de tokenstroom verlaat nooit het hostproces en er is geen IPC-sprong per delta.
211
+
212
+ ---
213
+
214
+ ## Steun
215
+
216
+ Uncle Sam bestaat zodat je stopt met betalen per token. Als het je geld heeft bespaard en je de volgende op
217
+ hardware wilt zien die niet halverwege zonder geheugen komt te zitten:
218
+
219
+ **[☕ revolut.me/operatingtag](https://revolut.me/operatingtag)**
220
+
221
+ Een ster op de repository of een bruikbare bugmelding is net zoveel waard.
222
+
223
+ ---
224
+
225
+ ## Licentie
226
+
227
+ **CC BY-NC-ND 4.0** — Creative Commons Naamsvermelding-NietCommercieel-GeenAfgeleiden 4.0 Internationaal.
228
+ Copyright (c) 2026 Darren T. Weldon, gepubliceerd onder de naam Operating Tag.
229
+
230
+ **De hele afspraak in één regel: installeer het en gebruik het persoonlijk, gratis. Wijzig het niet, deel het
231
+ niet, verkoop het niet en gebruik het niet in een bedrijf.**
232
+
233
+ Dat is geen open source, en het doet niet alsof.
234
+
235
+ ```
236
+ je mag het installeren en draaien · het persoonlijk, niet-commercieel gebruiken
237
+ de broncode lezen om het te begrijpen
238
+
239
+ je mag niet het wijzigen, aanpassen of er een afgeleid werk van maken
240
+ het kopiëren, verspreiden, publiceren, spiegelen of
241
+ aan iemand anders beschikbaar stellen
242
+ het uploaden naar welke codehost, registry, website, forum of chat dan ook
243
+ het verkopen, doorverkopen, verhuren of er geld voor vragen of voor toegang
244
+ het opnemen in iets dat je aan iemand anders levert
245
+ het gebruiken voor enig commercieel doel of in het kader van een bedrijfsactiviteit
246
+ ```
247
+
248
+ **De enige twee legitieme bronnen zijn deze repository en het npm-pakket
249
+ [`@operatingtag/dsh-unclesam`](https://www.npmjs.com/package/@operatingtag/dsh-unclesam).** Een kopie van
250
+ ergens anders is niet gelicentieerd, wie hem ook heeft geleverd. Zie je deze software te koop, dan verkoopt niet de
251
+ auteur hem.
252
+
253
+ **Commercieel gebruik, en het recht om te wijzigen en te verspreiden, zijn beschikbaar onder een aparte
254
+ schriftelijke licentie.** Vraag Operating Tag en je krijgt een duidelijk antwoord en een duidelijke prijs.
255
+
256
+ Het bestand [LICENSE](LICENSE) is bindend, en het begint met dezelfde samenvatting in eenvoudig Engels.
257
+
258
+ ---
259
+
260
+ Uncle Sam is een onafhankelijke plugin. Niet verbonden met DeepSeek, door hen niet goedgekeurd of ondersteund.
261
+
262
+ ```
263
+ @operatingtag/dsh-unclesam v1.0.1
264
+ Auteur Operating Tag
265
+ Licentie CC BY-NC-ND 4.0 — vrij om te gebruiken, niet om te wijzigen, delen of verkopen
266
+ ```