Files
agent-exec-transport 821599ffcb
governance / governance (pull_request) Successful in 14s
ci / vet-and-test (pull_request) Successful in 1m16s
agent-exec transport 7e8283631fb518cee0db0eba1be4c918/79c99324c3c7
2026-10-19 12:36:49 +00:00

59 lines
2.1 KiB
Go

// Package link 把 extension.Main 接到产品组合根。
// 下游自有二进制空白导入本包;基座 internal 不反向依赖它。
package link
import (
"os"
"agent-system-backend/internal/app"
"agent-system-backend/internal/config"
"agent-system-backend/pkg/extension"
)
func init() {
extension.SetRunner(func(opt extension.Options) error {
appOpt, err := runOptions(opt)
if err != nil {
return err
}
return app.Run(appOpt)
})
}
// runOptions 在 appOptions 基础上补齐超级管理员凭据,与 cmd/agent-system 同源:
// 进程环境优先,未设置的键从 AGENT_SYSTEM_ENV_FILE 指向的受保护 dotenv 补齐。
func runOptions(opt extension.Options) (app.Options, error) {
appOpt := appOptions(opt)
authEnabled := config.Resolved{Config: config.Config{AuthMode: opt.AuthMode, StorageDSN: opt.StorageDSN}}.AuthEnabled()
superAdmin, err := config.LoadSuperAdmin(os.LookupEnv, "", authEnabled)
if err != nil {
return app.Options{}, err
}
appOpt.SuperAdmin = superAdmin
return appOpt, nil
}
// appOptions 把产品启动参数映射到基座。执行环境三项产品旗标留空时读环境变量,
// 与 cmd/agent-system 的 config 键一致,这样 svc 注入环境即可,不必改产品 main。
func appOptions(opt extension.Options) app.Options {
return app.Options{
Addr: opt.Addr, DataDir: opt.DataDir, PluginsDir: opt.PluginsDir, ForceMock: opt.Mock,
StorageDSN: opt.StorageDSN, ArtifactsDir: opt.ArtifactsDir, AuthMode: opt.AuthMode,
RequireProjectContext: opt.RequireProjectContext,
DisableUploadIndexing: opt.DisableUploadIndexing,
DisableConvCardMirror: opt.DisableConvCardMirror,
DisableExecTools: opt.DisableExecTools,
ExecBackend: opt.ExecBackend,
ExecDepsDir: firstSet(opt.ExecDepsDir, os.Getenv("AGENT_SYSTEM_EXEC_DEPS_DIR")),
ExecWorkspace: firstSet(opt.ExecWorkspace, os.Getenv("AGENT_SYSTEM_EXEC_WORKSPACE")),
ExecEnvRoot: firstSet(opt.ExecEnvRoot, os.Getenv("AGENT_SYSTEM_EXEC_ENV_ROOT")),
}
}
func firstSet(explicit, fromEnv string) string {
if explicit != "" {
return explicit
}
return fromEnv
}