feat(server): add localized agent starter config endpoint

Add a public GET /api/ui/agent-starters endpoint returning localized
empty-state content (title, description, preview images, and starter
prompts) for the canvas Agent panel. Content is server-configurable via
AgentStarter config with built-in zh-CN/en-US fallbacks, and the route is
exempt from authentication so shared canvases render the same content.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-10 22:19:14 +08:00
parent 2df9ae6581
commit c94b163540
11 changed files with 373 additions and 1 deletions
@@ -86,6 +86,24 @@ func TestUserContextMiddlewareIgnoresSpoofedUserIDOnPublicRoute(t *testing.T) {
}
}
func TestUserContextMiddlewareAllowsPublicAgentStarterConfig(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/api/ui/agent-starters?locale=en-US", nil)
rec := httptest.NewRecorder()
called := false
UserContextMiddleware(fakeBearerAuthenticator{})(func(w http.ResponseWriter, _ *http.Request) {
called = true
w.WriteHeader(http.StatusNoContent)
})(rec, req)
if !called {
t.Fatal("expected public agent starter config route to continue")
}
if rec.Code != http.StatusNoContent {
t.Fatalf("expected status %d, got %d", http.StatusNoContent, rec.Code)
}
}
func TestUserContextMiddlewareAuthorizesAnonymousCanvasShare(t *testing.T) {
ownerID := "d1d2fbbb-97bb-4406-8d0b-ec814cc65092"
authorizer := fakeShareAuthorizer{access: sharingmodule.Access{