openpencil/crates
Kayshen-X 0ff672d3ea feat(web): allow public AI endpoints with connect-time SSRF guards
Relax the browser-supplied provider endpoint policy so any public HTTPS
endpoint works (DeepSeek relays, one-api/new-api gateways) without a preset
match, while keeping private/loopback/metadata targets gated behind
OPENPENCIL_WEB_AI_ENDPOINT_ALLOWLIST. Closing the preset lock required real
connect-time defenses:

- New provider_dial: browser-originated credentials dial PublicOnly — resolve
  the host, reject any reserved resolution, and pin the client to the screened
  addresses (kills DNS rebinding). .no_proxy() is load-bearing: an env/system
  proxy would otherwise re-resolve the target and bypass the pin. Operator-owned
  and allowlisted endpoints stay Trusted.
- Require Content-Type: application/json on POST /api/ai/* and
  /api/settings/credentials so cross-origin simple requests can't reach them.

Also fixes credential-persistence issues found while auditing the switch:
OPENPENCIL_PERSIST_WEB_CREDENTIALS_SERVER accepts true/1/yes/on; credential
sync stops retrying deterministic 4xx and surfaces the failure in the settings
modal (15 locales), clearing on a corrective edit, disabled persistence, or 403.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-07-17 20:20:39 +08:00
..
op-acp
op-ai feat(agent): unify generation UX and CLI providers 2026-07-15 03:48:29 +08:00
op-ai-skills fix(orchestrator): preserve and repair progress rings 2026-07-15 03:29:39 +08:00
op-cli fix(cli): land opencode skill install in the scanned skills dir 2026-07-17 20:18:26 +08:00
op-codegen test: decouple document fixtures from product releases 2026-07-15 21:17:20 +08:00
op-config-store
op-design-lint fix(orchestrator): preserve and repair progress rings 2026-07-15 03:29:39 +08:00
op-editor-core feat(web): allow public AI endpoints with connect-time SSRF guards 2026-07-17 20:20:39 +08:00
op-editor-host-core fix(ci): clear Rust workflow blockers 2026-07-15 22:47:39 +08:00
op-editor-ui feat(web): allow public AI endpoints with connect-time SSRF guards 2026-07-17 20:20:39 +08:00
op-figma perf(figma): cut import clone amplification 2026-07-11 10:04:41 +08:00
op-git
op-host-desktop feat(web): managed serve-web contract with handshake and parent-death lease 2026-07-16 23:28:08 +08:00
op-host-native fix(desktop): prefer fewest-MSAA GL config so skia wraps intel framebuffers 2026-07-17 20:19:33 +08:00
op-host-services feat(web): allow public AI endpoints with connect-time SSRF guards 2026-07-17 20:20:39 +08:00
op-host-web feat(web): allow public AI endpoints with connect-time SSRF guards 2026-07-17 20:20:39 +08:00
op-host-web-server test(web): end-to-end smoke for the managed daemon contract 2026-07-17 02:52:05 +08:00
op-i18n feat(web): allow public AI endpoints with connect-time SSRF guards 2026-07-17 20:20:39 +08:00
op-mcp fix(mcp): harden batch design and image semantics 2026-07-14 00:29:59 +08:00
op-opmerge
op-orchestrator fix(orchestrator): center resolved radial content 2026-07-15 23:49:58 +08:00
op-pen-loader test: decouple document fixtures from product releases 2026-07-15 21:17:20 +08:00
op-process-io
op-rpc-transport
op-smoke chore(smoke): audit rubric and loop-vs-orchestrator A/B harness 2026-07-12 02:56:43 +08:00
op-web-sdk perf(sdk): share scene via rc and idle the raf pump when clean 2026-07-10 22:56:25 +08:00
CLAUDE.md fix(orchestrator): preserve and repair progress rings 2026-07-15 03:29:39 +08:00