Files
ttstd-infinite-canvas/backend/internal/app/cloud_agent_pi_runtime.go
ddcat666 b0ebe60993 feat(deploy): 画布 Agent - 独立 yingce-agent 容器并修复运行中断
生产会话不再因 stdout 管道提前关闭被误判失败。设置 YINGCE_AGENT_URL 后只走独立容器,失败不回退到内嵌进程。
2026-09-29 21:41:36 +08:00

57 lines
2.8 KiB
Go

package app
import (
"context"
"os"
"strings"
agentruntime "infinite-canvas/backend/internal/agent/runtime"
"infinite-canvas/backend/internal/agent/yingceagent"
)
// These aliases keep the app coordinator's request shape stable while the
// process lifecycle and loopback bridge live in internal/agent/runtime.
type cloudAgentPiBridge = agentruntime.Bridge
type cloudAgentPiProcessRequest struct {
BridgeURL string `json:"bridgeURL"`
BridgeToken string `json:"bridgeToken"`
SessionFile string `json:"sessionFile,omitempty"`
SessionJSONL string `json:"sessionJSONL,omitempty"`
SessionDir string `json:"sessionDir,omitempty"`
SessionId string `json:"sessionId,omitempty"`
UserId string `json:"userId,omitempty"`
CanvasId string `json:"canvasId,omitempty"`
RunId string `json:"runId,omitempty"`
Cwd string `json:"cwd"`
AgentDir string `json:"agentDir"`
Prompt string `json:"prompt"`
SystemPrompt string `json:"systemPrompt"`
SkillPaths []string `json:"skillPaths,omitempty"`
EnabledSkills []map[string]any `json:"enabledSkills,omitempty"`
Profile map[string]any `json:"profile,omitempty"`
Memory map[string]any `json:"memory,omitempty"`
Canvas map[string]any `json:"canvas,omitempty"`
Features map[string]any `json:"features,omitempty"`
Tools []map[string]any `json:"tools"`
Compaction map[string]any `json:"compaction,omitempty"`
Permissions map[string]any `json:"permissions,omitempty"`
Model map[string]any `json:"model"`
}
func runCloudAgentPi(ctx context.Context, request cloudAgentPiProcessRequest, bridge cloudAgentPiBridge) error {
runtimeRequest := agentruntime.ProcessRequest{
BridgeURL: request.BridgeURL, BridgeToken: request.BridgeToken,
SessionFile: request.SessionFile, SessionJSONL: request.SessionJSONL, SessionDir: request.SessionDir,
SessionID: request.SessionId, UserID: request.UserId, CanvasID: request.CanvasId, RunID: request.RunId,
CWD: request.Cwd, AgentDir: request.AgentDir, Prompt: request.Prompt, SystemPrompt: request.SystemPrompt,
SkillPaths: request.SkillPaths, EnabledSkills: request.EnabledSkills, Profile: request.Profile,
Memory: request.Memory, Canvas: request.Canvas, Features: request.Features, Tools: request.Tools,
Compaction: request.Compaction, Permissions: request.Permissions, Model: request.Model,
}
if endpoint := strings.TrimSpace(os.Getenv("YINGCE_AGENT_URL")); endpoint != "" {
return yingceagent.Run(ctx, endpoint, os.Getenv("YINGCE_AGENT_TOKEN"), os.Getenv("YINGCE_AGENT_BRIDGE_HOST"), runtimeRequest, agentruntime.Bridge(bridge))
}
return agentruntime.Run(ctx, runtimeRequest, agentruntime.Bridge(bridge))
}