picoclaw/web/backend/api
SiYue-ZO ef002d9a5d fix: ensure dm_scope and dimensions stay in sync across all config paths
The reviewer identified two bugs in the original PR:

1. PATCH /api/config leaves session.dimensions stale: LoadConfig()
   derives dimensions from the old dm_scope, and the merge carries
   those stale dimensions forward. ApplyDmScope() then exits early
   because dimensions is already populated, causing a mismatch between
   dm_scope (new) and dimensions (old).

2. Legacy/default configs omit dm_scope in GET response: configs with
   explicit dimensions but no dm_scope (including DefaultConfig) return
   no dm_scope field, causing the frontend to fall back to its default
   ('per-channel-peer'), which may not match the actual dimensions.

Fix:
- Add DeriveDmScope() to reverse-map known dimensions arrays to
  dm_scope when dm_scope is empty.
- Call it in LoadConfig(), PUT handler, PATCH handler, and
  ResetToDefaults() for consistent normalization.
- In PATCH handler, clear stale dimensions from the merge result when
  the patch contains session.dm_scope but not session.dimensions,
  allowing ApplyDmScope() to re-derive from the new scope.
- Add comprehensive unit tests for DeriveDmScope() and scope
  transition scenarios.
2026-06-11 16:12:48 +08:00
..
auth.go refactor(web): switch dashboard auth from tokens to passwords (#2608) 2026-04-21 18:04:15 +08:00
auth_login_limiter.go feat(web): protect launcher dashboard with token and SPA login (#1953) 2026-03-29 13:11:43 +08:00
auth_test.go refactor(web): switch dashboard auth from tokens to passwords (#2608) 2026-04-21 18:04:15 +08:00
channels.go feat: support streaming (#2892) 2026-05-19 16:38:47 +08:00
channels_test.go feat: support streaming (#2892) 2026-05-19 16:38:47 +08:00
config.go fix: ensure dm_scope and dimensions stay in sync across all config paths 2026-06-11 16:12:48 +08:00
config_test.go feat: add request-scoped context policies (#2914) 2026-05-22 10:06:40 +08:00
exec_nonwindows.go refactor(onboard,api): harden copydir repo-root detection and use platform-neutral proc attrs naming 2026-04-25 00:31:36 +08:00
exec_windows.go refactor(onboard,api): harden copydir repo-root detection and use platform-neutral proc attrs naming 2026-04-25 00:31:36 +08:00
gateway.go feat: support streaming (#2892) 2026-05-19 16:38:47 +08:00
gateway_host.go fix(web): improve Pico URL and origin handling behind proxies 2026-04-20 10:11:03 +08:00
gateway_host_test.go fix(web): improve Pico URL and origin handling behind proxies 2026-04-20 10:11:03 +08:00
gateway_test.go feat: support streaming (#2892) 2026-05-19 16:38:47 +08:00
launcher_config.go refactor(web): switch dashboard auth from tokens to passwords (#2608) 2026-04-21 18:04:15 +08:00
launcher_config_test.go refactor(web): switch dashboard auth from tokens to passwords (#2608) 2026-04-21 18:04:15 +08:00
log.go refactor Config to add Version and migratable 2026-03-12 13:52:55 +08:00
model_catalog.go refactor(models): unify provider metadata around backend catalog (#2896) 2026-05-20 11:50:34 +08:00
model_catalog_test.go feat(web,api): fetch models and saved catalog support (#2832) 2026-05-15 09:49:03 +08:00
model_status.go fix: add ok check for singleflight type assertion in model probe 2026-06-07 20:54:00 +08:00
model_status_test.go feat(provider): add gpt4free openai-compatible provider (#2909) 2026-05-21 16:08:46 +08:00
models.go feat(provider): add gpt4free openai-compatible provider (#2909) 2026-05-21 16:08:46 +08:00
models_test.go feat(provider): add gpt4free openai-compatible provider (#2909) 2026-05-21 16:08:46 +08:00
oauth.go refactor(models): unify provider metadata around backend catalog (#2896) 2026-05-20 11:50:34 +08:00
oauth_test.go refactor: support explicit provider field in model list entries (#2609) 2026-04-22 11:28:47 +08:00
pico.go Feat(channels): unify animated tool feedback across chat channels and Pico (#2622) 2026-04-23 10:35:50 +08:00
pico_test.go Feat(channels): unify animated tool feedback across chat channels and Pico (#2622) 2026-04-23 10:35:50 +08:00
router.go Keep launcher locale changes from mutating shared web-search routing (#2573) 2026-04-24 13:45:25 +08:00
session.go fix(session): normalize CreatedAt in SessionManager AddFullMessage/SetHistory 2026-05-22 13:42:35 +08:00
session_test.go feat(chat,seahorse): persist and display model_name across history (#2897) 2026-05-20 13:42:21 +08:00
skills.go refactor skills registries and add GitHub-backed skill discovery (#2442) 2026-04-14 15:14:16 +08:00
skills_test.go refactor skills registries and add GitHub-backed skill discovery (#2442) 2026-04-14 15:14:16 +08:00
startup.go feat(web): add service log level controls (#2227) 2026-03-31 20:32:42 +08:00
startup_test.go feat(web): add service log level controls (#2227) 2026-03-31 20:32:42 +08:00
tools.go Add native Kagi web search provider 2026-06-07 16:27:50 +02:00
tools_test.go feat(providers): add gemini web search provider (#2763) 2026-05-14 09:50:47 +08:00
update.go feat(updater): robust self-update selection & extraction (nightly default) (#2201) 2026-04-01 23:41:32 +08:00
version.go feat(web): display backend version info in sidebar (#2087) 2026-03-30 16:44:50 +08:00
version_test.go feat(web): display backend version info in sidebar (#2087) 2026-03-30 16:44:50 +08:00
wecom.go refactor(config): make config.Channel to multiple instance support 2026-04-13 22:21:21 +08:00
weixin.go fix some bugs: 2026-04-14 00:15:35 +08:00
weixin_test.go refactor(config): make config.Channel to multiple instance support 2026-04-13 22:21:21 +08:00