Merge branch 'main' of https://github.com/ddcat-ai/open-ai-canvas
Some checks failed
Publish container images / Quality checks (push) Has been cancelled
Publish container images / Resolve build version (push) Has been cancelled
Publish container images / Build open-ai-canvas-backend (amd64) (push) Has been cancelled
Publish container images / Build open-ai-canvas-backend (arm64) (push) Has been cancelled
Publish container images / Build open-ai-canvas-web (multi) (push) Has been cancelled
Publish container images / Build open-ai-canvas-yingce-agent (multi) (push) Has been cancelled
Publish container images / Publish open-ai-canvas-backend manifest (push) Has been cancelled
Publish container images / Publish open-ai-canvas-web manifest (push) Has been cancelled
Publish container images / Publish open-ai-canvas-yingce-agent manifest (push) Has been cancelled
Publish container images / Publish release assets (push) Has been cancelled

This commit is contained in:
2026-10-14 16:28:42 +08:00
573 changed files with 129685 additions and 3164 deletions

View File

@@ -101,6 +101,9 @@ func run(ctx context.Context) error {
if err := svc.EnsureBuiltinTools(); err != nil {
return err
}
if err := ensureBuiltinWorkbenchCatalog(svc); err != nil {
return err
}
if summary, err := svc.MigrateLegacyStorage(); err != nil {
slog.Warn("storage migration skipped after error", "error", err)
} else if summary.Backup != "" {
@@ -173,6 +176,10 @@ func run(ctx context.Context) error {
return nil
}
func ensureBuiltinWorkbenchCatalog(svc *service.Service) error {
return svc.EnsureBuiltinWorkbenchCatalog()
}
func redactCanvasSharePath(path string) string {
const prefix = "/api/public/canvas-shares/"
if !strings.HasPrefix(path, prefix) {

View File

@@ -5,9 +5,34 @@ import (
"testing"
"time"
"yingce/backend/internal/database"
"yingce/backend/internal/repository"
"yingce/backend/internal/service"
"github.com/gin-gonic/gin"
)
func TestEnsureBuiltinWorkbenchCatalogStartupWiring(t *testing.T) {
db, err := database.Open(database.Config{Driver: "sqlite", DSN: "file:workbench-startup?mode=memory&cache=shared"})
if err != nil {
t.Fatal(err)
}
if err := database.MigrateSchema(db); err != nil {
t.Fatal(err)
}
svc := service.New(repository.New(db), t.TempDir())
if err := ensureBuiltinWorkbenchCatalog(svc); err != nil {
t.Fatal(err)
}
tools, err := repository.New(db).WorkbenchTools("image", true)
if err != nil {
t.Fatal(err)
}
if len(tools) == 0 {
t.Fatal("startup initializer did not publish image workbench tools")
}
}
func TestAllowedOriginWildcard(t *testing.T) {
t.Setenv("CANVAS_CORS_ORIGINS", "*")
context, _ := gin.CreateTestContext(httptest.NewRecorder())