Repository navigation
Conversation
Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed.
Rewrite deepseek-web executor from broken cookie auth to userToken Bearer flow (like Chat2API). Replace pure JS Keccak PoW with WASM solver (5.8s → 86ms). Add 14 models, validation, and dashboard UX.
- Handle all 3 DeepSeek SSE stream formats: initial fragments, APPEND operations, and bare string tokens (fixes truncated responses) - Simplify prompt builder to send system + last user message only (DeepSeek web API is single-turn, full history caused marker leakage) - Check json.code before token extraction (fixes "did not return access token: Authorization" on code 40003 with HTTP 200) - Clear session cache alongside token cache on auth errors - Add dev origin for remote testing Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- Added Fumadocs MDX support in the Next.js configuration. - Updated transpile packages to include fumadocs-ui and fumadocs-core. - Implemented a comprehensive set of redirects for documentation paths to improve navigation. - Removed the generate-docs-index script as it is no longer needed. - Updated various documentation titles for consistency and clarity. - Enhanced global styles to incorporate Fumadocs UI themes and styles.
…ack, restore LanguageSelector - Revert unrelated deepseek-web.ts changes (should be separate PR) - Add .source/ to .gitignore (Fumadocs generated files) - Remove contributor IP from allowedDevOrigins - Add i18n runtime fallback: reads NEXT_LOCALE cookie, loads translated .md from docs/i18n/<locale>/docs/ (preserves existing translation pipeline) - Restore LanguageSelector in Fumadocs layout nav - Restore SEO metadata (title template, description, robots)
…ssthrough path (cheaper-inference#2608) (cheaper-inference#2615) Integrated into release/v3.8.3 — fix(codex): allowlist-based sanitization for gpt-5.5 Responses API
… cache keys (cheaper-inference#2616) Integrated into release/v3.8.3 — fix(deepseek-web): SSE parser (APPEND + bare tokens), prompt builder, error handling, session cache cleanup
Add newly introduced agent workflow and Claude command files to .gitignore so proprietary automation assets are not committed.
…-inference#2614) Integrated into release/v3.8.3 — Fumadocs MDX migration with nested routes, search API, and 50+ URL redirects
…heaper-inference#2625) Integrated into release/v3.8.3
…en3-vl-plus (cheaper-inference#2629) Integrated into release/v3.8.3
…aper-inference#2631) Integrated into release/v3.8.3
…eaper-inference#2628) Integrated into release/v3.8.3
…#2621) Integrated into release/v3.8.3
… of full normalization (cheaper-inference#2620) Integrated into release/v3.8.3
…r-inference#2630) Integrated into release/v3.8.3
…heaper-inference#2624) Integrated into release/v3.8.3 — DeepSeek Web SSE thinking/search routing overhaul
…heaper-inference#2632) Integrated into release/v3.8.3
…trategy, batch config (cheaper-inference#2634) Integrated into release/v3.8.3
…nference#2633) Integrated into release/v3.8.3
…er replay models (cheaper-inference#2639) Integrated into release/v3.8.3
…erence#2627) (cheaper-inference#2635) Integrated into release/v3.8.3
Integrated into release/v3.8.3
… ignore system vars in env check
… context pinning (cheaper-inference#2646) Integrated into release/v3.8.3
…inference#2645) Integrated into release/v3.8.3
…eaper-inference#2641) Integrated into release/v3.8.3
…nference#2638) Integrated into release/v3.8.3
…2648) Integrated into release/v3.8.3
…al (cheaper-inference#2649) Integrated into release/v3.8.3
…continuity (cheaper-inference#2653) Integrated into release/v3.8.3
…r-inference#2655) Integrated into release/v3.8.3
… same-as-en) (cheaper-inference#2659) Integrated into release/v3.8.3
…ation (cheaper-inference#2656) Integrated into release/v3.8.3
…heaper-inference#2662) Integrated into release/v3.8.3
…nce#2661) Integrated into release/v3.8.3
…ence#2660) Integrated into release/v3.8.3
- Fail-Fast Credential Health Check: background scheduler validates connections every 5 minutes, cache eliminates stale credential latency - Circuit Breaker v2: progressive degradation (DEGRADED state), adaptive backoff by failure kind, automatic HALF-OPEN probing - Configurable via CREDENTIAL_HEALTH_CHECK_INTERVAL env var
… job (cheaper-inference#2666) Integrated into release/v3.8.3
…x race fix (cheaper-inference#2667) Integrated into release/v3.8.3
…ce#2668) Integrated into release/v3.8.3
…eaper-inference#2669) Integrated into release/v3.8.3
Integrated into release/v3.8.3
diegosouzapw
added a commit
that referenced
this pull request
Jun 1, 2026
…al coverage 80%) Gap closure exceeded original 75/75/75/70 requirement. Measured on Group B branch: statements 79.83%, branches 73.68%, functions 82%, lines 79.83% — all above original thresholds. No need to defer restoration to post-merge.
diegosouzapw
added a commit
that referenced
this pull request
Jun 1, 2026
…vitest:ui script Gap 1 (auditor deep review): `GET /api/memory` was computing hitRate from memoryCache.stats() but never exposing cacheStats in the response. MemoriesTab reads `stats.cacheStats` to decide whether to render the Hit Rate card (only when hits + misses > 0). Without this field the card never appeared even when hitRate > 0, contradicting plan 21 §7 #6 and bug-fix #5. Gap 2 (auditor deep review): 8 `tests/unit/ui/*.test.tsx` files created by F7 were orphaned — `test:unit` filters `*.test.ts` only, and `vitest.mcp.config.ts` does not include `tests/unit/ui/`. Added `test:vitest:ui` script using the default vitest.config.ts (which already includes `tests/unit/**/*.test.tsx`). Coverage gate aligned with the effective 40/40/40/40 per user decision.
diegosouzapw
added a commit
that referenced
this pull request
Aug 13, 2026
…per-inference#8451) * fix: complete Z.ai web browser transport * refactor: address Z.ai review feedback * test(zai-web): reconcile the cheaper-inference#8014 endpoint guard with the chats/new + signed flow Rebasing onto release/v3.8.49 pulled in cheaper-inference#8503, which repointed CHAT_URL to /api/v2/chat/completions and added an endpoint probe. This branch already targets v2, so the executor conflict resolved to this branch's superset (NEW_CHAT_URL + signature constants alongside the same v2 CHAT_URL). The two tests needed adapting, because cheaper-inference#8503's assertions assume the pre-rework flow: - executor-zai-web.test.ts: the completion URL now carries the request signature as a query string, so an exact-equality check on the endpoint can never match. Assert the v2 prefix instead. - zai-web-chat-endpoint-8014-probe.test.ts: the probe drove the executor with a bare cookie credential and no captcha proof, which now routes through the browser transport — fetch was never called and the probe captured nothing. Supplied a direct-path credential, and matched on pathname across all requests (the executor also probes the homepage for the frontend version and calls /api/v1/chats/new first). The guard's intent is unchanged and slightly strengthened: it now asserts no request reaches the stale unversioned path and that exactly one completions request is issued, against v2. 54/54 across the zai suites; typecheck:core and eslint clean. * fix(zai-web): surface upstream error frames instead of finishing empty Reported on this PR: HTTP 200, `out=0`, stream "complete", no content and no diagnosis. Cause. HTTP-level failures are already handled — fetchUpstream turns any !ok response into a makeErrorResult with the sanitized body. The gap is a 200 whose SSE body carries an error payload: parseZaiFrame returns null for it, drainSseDeltas drops it, and buildZaiStreamingBody then closes with an empty assistant message + stop + [DONE]. The caller reads that as a successful empty completion, so a rejected signature, an expired captcha and a stale token all look identical — which is why this had to be diagnosed by reading code rather than logs. Hard Rule #6. Fix. parseZaiFrame now classifies an affirmatively error-shaped frame (`error` at the top level or under `data`, string or {detail|message|msg}) as a terminal delta, checked before the delta paths so it cannot fall through to the "no usable delta" null. The stream emits it as `[Z.ai error] <message>`, matching the mid-stream convention the other web executors already use (zed-hosted's createErrorChunk) — the 200 is on the wire, so the status cannot change, but the caller must not be left reading a blank success. Content streamed before the failure is preserved. Message goes through sanitizeErrorMessage (Rule #12). Deliberately NOT changed: a contentless frame still parses to null. That is live-validated behaviour, not an oversight — z.ai emits phase frames with no delta_content, and executor-zai-web.test.ts pins it ("returns null for frames with no usable delta"). Treating "nothing parseable arrived" as a failure would invent policy on top of an observed protocol and risk false errors on the happy path, so this only adds recognition of explicit error frames. Tests (TDD, RED then GREEN): zai-web-silent-empty-repro.test.ts — 7 cases. Error frame classified and terminal; surfaced through the stream with the upstream's own text; surfaced after partial content without losing it; plus a REGRESSION GUARD that contentless/phase-only frames are still skipped, and two controls that the happy path and reasoning-only output are untouched. The guard and controls passed before the fix; the four error cases did not. 94/94 across the zai + stream suites; typecheck:core, eslint and check:file-size clean. * refactor(sse): extract the zai-web transports so the complexity ratchet holds The v3.8.49 merge-train rebaseline (cheaper-inference#8686) set the ceiling to the tip's own measurement, leaving zero headroom, so this branch's +5 cyclomatic / +3 cognitive own-growth had nowhere to sit once rebased onto it. Eight violations, all in code this branch introduces, resolved by extraction — no behaviour change: - `execute` (152 lines, complexity 25, cognitive 20) now delegates to `resolveZaiRequest()` for the four client-error rejections and to a `fetchViaSignedApi()` method for the CAPTCHA/signature path, so it reads as "validate, pick a transport, shape the response". - `fetchThroughBrowser` (126 lines, cognitive 16) hands its image decoding to `resolveZaiBrowserAttachments()`, its Playwright options to `buildZaiBrowserChatOptions()`, and its call-log payload to `buildZaiBrowserAuditBody()`. - `configureZaiBrowserEffort` (cognitive 35 — the worst of the set) repeated a wrap-and-relabel try/catch four times inside an if/else. `runStage`, which already existed one function below, is now module-scoped and reused, and the toggle collapses to `checked !== config.enabled` (same four cases). - `validateWebCookieProvider` (complexity 19) moves its can-we-probe-this cascade into `resolveWebCookieProbe()`, which returns either a rejection or the URL + headers to use. - `acquireBrowserContext`'s creation closure (complexity 17) hands cookie and localStorage seeding to `seedContextSession()`. That last extraction also clears a violation that predates this branch — `acquireBrowserContext` was already over the 80-line ceiling — so cyclomatic lands at 2187 against a baseline of 2188. Verified: check:complexity-ratchets green both metrics; typecheck:core clean; ESLint clean on all four files; 85 tests across the zai-web, web-cookie validation, browser-pool and model-test-runner suites pass. * fix(zai-web): surface upstream errors on the non-streaming path collectZaiNonStreaming ignored delta.error — a 200 whose SSE body carries an error frame (rejected signature, expired captcha, stale token) came back as a successful empty completion. Now it throws on an error frame, matching the streaming path's [Z.ai error] convention; the caller's existing try/catch returns makeErrorResult(502) instead of an empty 200. Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com> --------- Co-authored-by: backryun <busan011@ormbiz.co.kr> Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Credential health monitoring with adaptive circuit breaker.