Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
c840212
fix: parse DeepSeek search fragments
AkioKoneko Jun 11, 2026
e57d725
Merge pull request #6 from danscMax/feat/server-resilience
ForgetMeAI Jun 14, 2026
435aeb0
Merge pull request #7 from danscMax/docs/env-example
ForgetMeAI Jun 14, 2026
3c8494b
Merge pull request #13 from AkioKoneko/codex/fix-search-fragment-parser
ForgetMeAI Jun 14, 2026
ab0c055
feat: add /new command to reset agent chat session
yhurynovich Jun 16, 2026
e54d324
Merge pull request #18 from yhurynovich/dev
ForgetMeAI Jun 19, 2026
d116e18
Merge pull request #1 from danscMax/main
indicatorspro Jun 20, 2026
e49f054
Translated to English
indicatorspro Jun 21, 2026
fd5d19b
Translated to English
indicatorspro Jun 21, 2026
0a34fbe
Resolve git conflicts, translate Russian to English, add missing cdp-…
indicatorspro Jun 21, 2026
f3e3c30
fix(server): network timeouts + cached PoW WASM, shared lib/pow
danscMax Jun 29, 2026
58edd91
fix(server): honest finish_reason + accurate prompt token usage
danscMax Jun 29, 2026
7d4b686
feat(server): operational resilience — crash safety, backpressure, li…
danscMax Jun 29, 2026
ad94501
Merge pull request #20 from danscMax/feat/net-reliability
ForgetMeAI Jul 13, 2026
2057e2d
Merge pull request #21 from danscMax/feat/api-correctness
ForgetMeAI Jul 13, 2026
3359ecb
Merge pull request #22 from danscMax/feat/ops-resilience
ForgetMeAI Jul 13, 2026
4394d91
fix: secure proxy network access
Jul 13, 2026
e56d052
fix: recover DSML tools and bound agent context
Jul 13, 2026
3b3571b
fix: restrict browser access to the local proxy
Jul 13, 2026
8453a80
fix: remove missing extension icon references
Jul 13, 2026
0d94d34
fix: parse tool calls with explicit guarded envelopes
Jul 13, 2026
035af5a
fix: preserve context across bounded retries
Jul 13, 2026
cad6af4
fix: preserve state across remote session recovery
Jul 13, 2026
1d26c15
fix: reject incomplete DSML tool envelopes
ForgetMeAI Jul 13, 2026
fc064cd
fix: recover context when rotating accounts
ForgetMeAI Jul 13, 2026
d1f0d5e
Merge pull request #26 from ForgetMeAI/codex/harden-agent-recovery
ForgetMeAI Jul 13, 2026
acefba5
feat: add hardened rootless Podman runtime
ForgetMeAI Jul 13, 2026
31386b1
Merge pull request #27 from ForgetMeAI/codex/podman-container
ForgetMeAI Jul 13, 2026
e703637
Merge upstream v2: containerization, PoW refactor, session retry, exp…
Jul 15, 2026
80601a4
Restore dashboard web UI, account management APIs, and parseAuth module
Jul 15, 2026
8949622
Strengthen tool call instructions to prevent DeepSeek from outputting…
Jul 15, 2026
897c229
Add diagnostic logs for prompt breakdown (system/tools/conversation s…
Jul 15, 2026
95027ee
feat: preserve tool definitions after compaction, add tool caching, i…
Jul 15, 2026
c700008
fix: reduce MAX_UPSTREAM_PROMPT_CHARS to 200K for DeepSeek Web API co…
Jul 15, 2026
52d83e3
fix: pass through unknown tool calls instead of rejecting
Jul 15, 2026
91e486e
fix: clarify tool definitions to prevent wrong tool usage
Jul 15, 2026
764872c
fix: improve tool call format instructions with concrete examples
Jul 15, 2026
915ea17
feat: JSON repair, session persistence, tool cache merge
Jul 15, 2026
84b53b9
feat: increase timeout to 600s and add 502 retry with exponential bac…
Jul 15, 2026
894cd8e
fix: increase network timeout to 180s for large prompts
Jul 15, 2026
f9c6450
debug: log tool names when cached per agent
Jul 15, 2026
31ddf2e
feat: add DEEPSEEK_CLEAR_SESSIONS_ON_START option
Jul 15, 2026
2b54f35
docs: add DEEPSEEK_CLEAR_SESSIONS_ON_START to README and .env.example
Jul 15, 2026
a5c5906
feat: add zero-dependency .env file loader
Jul 15, 2026
225a675
feat: make tool log optional with DEEPSEEK_LOG_TOOLS
Jul 15, 2026
3be6150
docs: add DEEPSEEK_LOG_TOOLS to README and .env.example
Jul 15, 2026
5e3ed57
Merge upstream/main into merge-upstream
Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .containerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Keep the build context free of browser sessions, auth exports, source-only
# helpers, and any future unlisted files. Containerfile copies this allow-list.
*
!Containerfile
!.containerignore
!package.json
!server.js
!lib/
!lib/pow.js
25 changes: 24 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,18 @@

# ── HTTP server ──
PORT=9655
HOST=0.0.0.0
# Loopback-only by default. Use 0.0.0.0 only when remote access is intentional.
HOST=127.0.0.1
# Optional bearer token required by every non-health endpoint. Strongly
# recommended whenever HOST is not a loopback address.
# PROXY_API_KEY=replace-with-a-long-random-value
# Read the bearer token from a mounted secret instead of the environment.
# PROXY_API_KEY_FILE=/run/secrets/proxy-api-key
# Fail startup when neither key source is set (enabled by Containerfile).
REQUIRE_PROXY_API_KEY=0
# Browser requests are accepted from loopback origins. Add exact remote UI
# origins as a comma-separated allowlist when needed.
# PROXY_CORS_ORIGINS=https://ui.example.com,http://192.168.1.20:3000

# ── Account auth source ──
# The pool loads DeepSeek accounts from files. Use either a single file or a
Expand All @@ -17,6 +28,17 @@ DEEPSEEK_AUTH_PATH=./deepseek-auth.json
# (default: 600000 = 10 minutes).
DEEPSEEK_ACCOUNT_COOLDOWN_MS=600000

# ── Long agent sessions ──
# Maximum characters sent to DeepSeek Web after compacting old context.
# Lower this if the Web endpoint reports that the content is too long.
DEEPSEEK_MAX_PROMPT_CHARS=80000
# Fresh-session retries for an empty/context-too-long response (default: 2).
DEEPSEEK_MAX_RETRIES=2
# Clear session history on server start (1/true). Useful for development/testing.
# DEEPSEEK_CLEAR_SESSIONS_ON_START=0
# Log MCP tool names loaded per agent (1/true). For debugging only.
# DEEPSEEK_LOG_TOOLS=0

# ── Startup (deploy / CI) ──
# Set either to 1/true to start the proxy immediately and skip the menu.
NON_INTERACTIVE=0
Expand All @@ -39,3 +61,4 @@ DEEPSEEK_REUSE_CHROME=0
# DEEPSEEK_TOKEN=
# Run scripts/doctor.js without network checks (1/true).
# DOCTOR_OFFLINE=0

4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ node_modules/
*.log
auth.json
deepseek-auth.json
# Aggregate account export holding live tokens/cookies — never commit.
deepseek-accounts.json
# Runtime-added auth files contain secrets — keep the dir, ignore its contents.
data/accounts/*.json
.chrome-profile/
.chrome-profile-deepseek/
.chrome-for-testing-profile-deepseek/
.chrome-for-testing-profile-deepseek.stale-*/
*.session.json
/tmp/deepseek_response_*
.DS_Store
*.pdf

25 changes: 25 additions & 0 deletions Containerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
FROM docker.io/library/node:22-alpine

ENV NODE_ENV=production \
HOST=0.0.0.0 \
PORT=9655 \
NON_INTERACTIVE=1 \
DEEPSEEK_AUTH_PATH=/run/secrets/deepseek-auth.json \
PROXY_API_KEY_FILE=/run/secrets/proxy-api-key \
REQUIRE_PROXY_API_KEY=1

WORKDIR /app

# FreeDeepseekAPI has no npm dependencies. Copy only the files needed by the
# non-interactive proxy; browser auth helpers and credentials stay on the host.
COPY --chown=1000:1000 package.json server.js ./
COPY --chown=1000:1000 lib/pow.js ./lib/pow.js

USER 1000:1000

EXPOSE 9655

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD ["node", "-e", "const http=require('http');const req=http.get({host:'127.0.0.1',port:process.env.PORT||9655,path:'/health'},res=>{res.resume();process.exit(res.statusCode===200?0:1)});req.on('error',()=>process.exit(1));req.setTimeout(4000,()=>{req.destroy();process.exit(1)})"]

CMD ["node", "server.js"]
Loading