20 Commits
Author SHA1 Message Date
rays 48abb93869 fix(security): harden LLM destination checks after review
- Let an inherited proxy on an unregistered host:port (e.g. localhost:7890)
  through the connect-time resolver; registered host:port pairs stay checked.
- Accept underscores inside host labels so Docker service names such as
  my_ollama can be approved.
- Refuse IPv4-compatible and site-local IPv6 for official providers and
  judge NAT64/6to4/compatible forms by the IPv4 address they carry.
- Fix approved destinations when routes are registered instead of on the
  first request.
- Static outbound check: exact path matching, import-alias and
  TCPConnector detection, policy factory wiring, raw HTTP client imports,
  no nosec for policy rules, fail closed on unparseable files.
- Settings: restore the model controls when the base URL is empty.
2026-10-13 12:47:35 +08:00
rays cc31b1433d fix(security): restrict LLM requests to operator-approved destinations
The analyze, chat, verify-key and model-list routes sent server-side
requests to a caller-supplied base URL guarded only by a pre-flight
denylist. Callers could choose arbitrary hosts and paths, reach shared
address space and metadata ranges, drive local LLM write APIs, and use
DNS rebinding to deliver server-held keys to loopback services.

Requests now select an entry of an immutable destination registry built
at startup from the built-in provider catalog, local Ollama/LM Studio,
and operator environment variables (DOCTOR_LLM_ALLOWED_BASE_URLS and the
existing base URL variables). Outbound URLs are built from the approved
entry, resolved addresses are checked at connect time inside the shared
connector, redirects are never followed or treated as success, and error
responses no longer reflect upstream bodies or network details. The UI
shows localized operator guidance, a static rule enforces disabled
redirects and policy-managed sessions, and .comfyignore keeps tests and
tooling out of the published archive.
2026-10-13 12:22:39 +08:00
rays cce05160da feat(diagnostics): surface DynamicVRAM fallback advisory 2026-08-19 16:48:22 +08:00
rays cf23770200 fix(ui): scope chat activation to owned tab pane
Pass the concrete tab pane through activation hooks and release late async renders after manager destruction. Keep Chat island activation, unmount, and vanilla status updates bound to their owning container.
2026-08-08 17:00:32 +08:00
rays ddb51c6c95 fix(frontend): render dynamic status messages as text 2026-08-08 16:39:10 +08:00
rays 10a2302a56 feat(ui): add provider quick switch 2026-05-31 13:28:27 +08:00
rays a55ee4caef feat(frontend): modernize ComfyUI extension API integration 2026-04-04 19:04:19 +08:00
rays b51a66c446 feat: localize F16 and S8 sidebar UI 2026-02-27 03:47:57 +08:00
rays 633603d785 feat: add F16 quick feedback PR flow 2026-02-27 01:42:31 +08:00
rays 0456823e93 feat: finalize dual-mode API key strategy (ENV-first + advanced server key store) 2026-02-10 15:43:06 +08:00
rays 61c36e1795 feat(f17): add default-on toggle to auto-open the right error report panel 2026-01-23 14:44:28 +08:00
rays 70e32c6c38 feat: Statistics Reset + Smarter AI Prompts 2026-01-15 21:45:53 +08:00
rays ea090ed825 feat(ui): move Trust & Health + Anonymous Telemetry from Settings to Statistics and stabilize Playwright E2E routes 2026-01-15 14:40:09 +08:00
rookiestar28 27ea2fb9c8 feat(S1,S3): add CSP docs and opt-in telemetry with 27 unit tests, 8 E2E tests, 81 i18n strings 2026-01-09 20:42:16 +08:00
rookiestar28 47dec1cef9 chore(R0_R13): Phase 2 hardening, add trust/health UI, stabilize Playwright runner, and plan CI gates/migration tooling 2026-01-09 14:38:53 +08:00
rookiestar28 ca635e8fc7 feat(A7): implement Phase 5C extensibility 2026-01-08 00:30:57 +08:00
rookiestar28 c99b0173e9 feat(A7): Phase 5B implementation 2026-01-07 02:39:29 +08:00
rookiestar28 e07944eccf feat(A7): migrate Chat and Statistics tabs to Preact Islands 2026-01-06 23:34:48 +08:00
rookiestar28 e78cb0dc86 fix UI display issues 2026-01-06 18:41:06 +08:00
rookiestar28 19ea0c4e7b feat(F13): sidebar tab refactoring 2026-01-06 16:55:38 +08:00