fix(agent,claw402): harden agent runtime and strip max_tokens for thinking models

- Fix Stop() race condition using sync.Once
- Add ensureHistory() to prevent nil panic in planner/dispatcher
- Add bounds check on trader ID slicing
- Log saveExecutionState and clearSetupState errors instead of discarding
- Remove always-true modelID condition in onboard setup
- Add Chinese setup keywords and expand model name aliases
- Strip max_tokens from claw402 requests to avoid thinking-model budget exhaustion
- Hide Agent nav tab (Beta) pending merge to main
- Sync tests with code changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
shinchan-zhai
2026-04-25 11:48:37 +08:00
parent 5dbe32d884
commit 4cadf6f442
9 changed files with 153 additions and 35 deletions
+20 -2
View File
@@ -108,12 +108,16 @@ export default function HeaderBar({
path: string
label: string
requiresAuth: boolean
badge?: string
hidden?: boolean
}[] = [
{
page: 'agent',
path: ROUTES.agent,
label: 'Agent',
requiresAuth: false,
badge: 'Beta',
hidden: true,
},
{
page: 'data',
@@ -182,7 +186,7 @@ export default function HeaderBar({
navigateInApp(tab.path)
}
return navTabs.map((tab) => (
return navTabs.filter((tab) => !tab.hidden).map((tab) => (
<button
key={tab.page}
onClick={() => handleNavClick(tab)}
@@ -193,6 +197,11 @@ export default function HeaderBar({
<span className="absolute inset-0 rounded-lg bg-nofx-gold/15 -z-10" />
)}
{tab.label}
{tab.badge && (
<span className="ml-1 text-[10px] px-1.5 py-0.5 rounded-full bg-nofx-gold/20 text-nofx-gold font-semibold uppercase align-top relative -top-1">
{tab.badge}
</span>
)}
</button>
))
})()}
@@ -436,12 +445,16 @@ export default function HeaderBar({
path: string
label: string
requiresAuth: boolean
badge?: string
hidden?: boolean
}[] = [
{
page: 'agent',
path: ROUTES.agent,
label: 'Agent',
requiresAuth: false,
badge: 'Beta',
hidden: true,
},
{
page: 'data',
@@ -510,7 +523,7 @@ export default function HeaderBar({
setMobileMenuOpen(false)
}
return navTabs.map((tab, i) => (
return navTabs.filter((tab) => !tab.hidden).map((tab, i) => (
<motion.button
key={tab.page}
initial={{ x: -20, opacity: 0 }}
@@ -527,6 +540,11 @@ export default function HeaderBar({
/>
)}
{tab.label}
{tab.badge && (
<span className="text-[10px] px-1.5 py-0.5 rounded-full bg-nofx-gold/20 text-nofx-gold font-semibold uppercase align-middle relative -top-1">
{tab.badge}
</span>
)}
{tab.requiresAuth && !isLoggedIn && (
<span className="text-[10px] px-1.5 py-0.5 rounded border border-zinc-800 text-zinc-500 font-normal tracking-wide uppercase align-middle relative -top-1">
LOGIN_REQ