Initial commit: img-infinite-canvas AI design workbench MVP
Moteva-style AI design workbench replica. Home prompt creates a project; the project page provides an infinite canvas with node drag, zoom/pan, a design chat panel, history replay, image asset upload, and project save/regenerate. - Backend: go-zero, DDD layering, sqlc/pgx, optional PostgreSQL; memory or Redis cache; asynq job queue; MinIO/S3/R2/OSS object storage; sky-valley/pi agent runtime adapter. - Frontend: Next.js App Router + Vite artifact build, TypeScript, i18n, shadcn/ui components, auth (OTP/Turnstile/Google/WeChat). - Deploy: Docker Compose and k3s manifests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package application
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"img_infinite_canvas/internal/domain/design"
|
||||
)
|
||||
|
||||
type DeterministicAgent struct{}
|
||||
|
||||
func NewDeterministicAgent() *DeterministicAgent {
|
||||
return &DeterministicAgent{}
|
||||
}
|
||||
|
||||
func (a *DeterministicAgent) Plan(ctx context.Context, req design.AgentRequest) (design.AgentPlan, error) {
|
||||
if err := ctx.Err(); err != nil {
|
||||
return design.AgentPlan{}, err
|
||||
}
|
||||
|
||||
offset := len(req.Project.Nodes)
|
||||
nodes := composeBoard(req.Prompt, offset)
|
||||
return design.AgentPlan{
|
||||
Message: design.Message{
|
||||
ID: newID(),
|
||||
Role: "assistant",
|
||||
Type: "assistant",
|
||||
Title: "设计任务完成",
|
||||
Content: synthesizeResponse(req.Prompt, req.Mode),
|
||||
},
|
||||
GeneratedNodes: nodes,
|
||||
Connections: nil,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (a *DeterministicAgent) Replay(ctx context.Context, project design.Project) (design.AgentReplay, error) {
|
||||
if err := ctx.Err(); err != nil {
|
||||
return design.AgentReplay{}, err
|
||||
}
|
||||
|
||||
return design.AgentReplay{
|
||||
ProjectID: project.ID,
|
||||
Messages: append([]design.Message(nil), project.Messages...),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func synthesizeResponse(prompt string, mode string) string {
|
||||
if mode == "" {
|
||||
mode = "design"
|
||||
}
|
||||
return fmt.Sprintf("已按「%s」生成一组 %s 画布:官网首页、色彩卡片、移动端页面和详情页已放到无限画布中,可继续微调、扩展或上传参考图。视频生成暂未接入,当前聚焦图片、页面与品牌视觉。", prompt, mode)
|
||||
}
|
||||
Reference in New Issue
Block a user