feat(model-bank): knowledgeCutoff batch 2, metadata skill & always-visible tab bar (#15663)

*  feat(model-bank): backfill knowledgeCutoff batch 2 and restore lost Anthropic values

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 📝 docs(skills): add model-bank-metadata skill for cutoff/family backfill

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 🐛 fix(model-bank): Claude Fable 5 belongs to the claude-mythos family

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 💄 style(desktop): always surface the tab bar by creating a tab on first navigation

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ♻️ refactor(model-bank): family is the product lineage (claude-opus/sonnet/haiku), not the brand

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 🐛 fix(agent): backfill activeAgentId before paint on tab/route switches

Tab switches are plain route navigations, so leaving an agent page cleared
activeAgentId via a passive useUnmount and the next page re-set it in a
passive useEffect — the first painted frame always had no active id, flashing
a skeleton even when agentMap already cached the config. Move both the
backfill and the unmount clear to layout effects: removed-tree layout
cleanups run before new-tree layout effects in one commit, so the clear can
never wipe a freshly synced id and the id is in place before paint.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

*  feat(agent): surface agent config fetch errors with a retry action

isAgentConfigLoading only knows "no data yet", so a failed fetch (e.g. a 401
that SWR deliberately does not retry, with no focus revalidation inside a
single Electron window) left the agent page on a skeleton forever — only a
manual reload recovered. Record per-agent fetch errors in
agentConfigErrorMap (set by onError, cleared on data / retry), expose
currentAgentConfigError / isAgentConfigError selectors, add a
retryAgentConfigFetch action that revalidates the agent's SWR entries, and
show an error alert with a retry button above the main chat input while the
config is still missing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* 🐛 fix(ci): sync model metadata test expectations

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Arvin Xu
2026-06-11 01:29:17 +08:00
committed by GitHub
parent fdd955404d
commit 914976a52f
55 changed files with 1116 additions and 148 deletions
@@ -34,7 +34,7 @@ exports[`configRouter > getGlobalConfig > Model Provider env > OPENAI_MODEL_LIST
"family": "gpt",
"generation": "gpt-4",
"id": "gpt-4-0125-preview",
"knowledgeCutoff": undefined,
"knowledgeCutoff": "2023-12",
"pricing": {
"units": [
{
@@ -72,7 +72,7 @@ exports[`configRouter > getGlobalConfig > Model Provider env > OPENAI_MODEL_LIST
"family": "gpt",
"generation": "gpt-3.5",
"id": "gpt-3.5-turbo-1106",
"knowledgeCutoff": undefined,
"knowledgeCutoff": "2021-09",
"pricing": {
"units": [
{
@@ -137,7 +137,7 @@ exports[`configRouter > getGlobalConfig > Model Provider env > OPENAI_MODEL_LIST
"family": "gpt",
"generation": "gpt-4",
"id": "gpt-4",
"knowledgeCutoff": "2023-12",
"knowledgeCutoff": "2021-09",
"pricing": {
"units": [
{
@@ -169,7 +169,7 @@ exports[`configRouter > getGlobalConfig > Model Provider env > OPENAI_MODEL_LIST
"family": "gpt",
"generation": "gpt-4",
"id": "gpt-4-32k",
"knowledgeCutoff": undefined,
"knowledgeCutoff": "2021-09",
"pricing": {
"units": [
{
@@ -201,7 +201,7 @@ exports[`configRouter > getGlobalConfig > Model Provider env > OPENAI_MODEL_LIST
"family": "gpt",
"generation": "gpt-4",
"id": "gpt-4-1106-preview",
"knowledgeCutoff": undefined,
"knowledgeCutoff": "2023-04",
"pricing": {
"units": [
{
@@ -244,7 +244,7 @@ exports[`configRouter > getGlobalConfig > Model Provider env > OPENAI_MODEL_LIST
"family": "gpt",
"generation": "gpt-4",
"id": "gpt-4-1106-preview",
"knowledgeCutoff": undefined,
"knowledgeCutoff": "2023-04",
"pricing": {
"units": [
{