(confDir string, account *model.AgentAccount, modelName, token string, allowedOrigins []string, fallbacks []string)
| 719 | } |
| 720 | |
| 721 | func writeOpenclawConfig(confDir string, account *model.AgentAccount, modelName, token string, allowedOrigins []string, fallbacks []string) error { |
| 722 | if strings.TrimSpace(confDir) == "" { |
| 723 | return fmt.Errorf("config dir is required") |
| 724 | } |
| 725 | if account == nil { |
| 726 | return fmt.Errorf("account is required") |
| 727 | } |
| 728 | if strings.TrimSpace(modelName) == "" { |
| 729 | return fmt.Errorf("model is required") |
| 730 | } |
| 731 | if strings.TrimSpace(token) == "" { |
| 732 | return fmt.Errorf("gateway token is required") |
| 733 | } |
| 734 | fileOp := files.NewFileOp() |
| 735 | if !fileOp.Stat(confDir) { |
| 736 | if err := fileOp.CreateDir(confDir, constant.DirPerm); err != nil { |
| 737 | return err |
| 738 | } |
| 739 | } |
| 740 | primaryModel, defaultsModels, models, err := buildOpenclawModelsFromAccount(account, modelName) |
| 741 | if err != nil { |
| 742 | return err |
| 743 | } |
| 744 | resolvedFallbacks, err := resolveOpenclawFallbackModels(account, modelName, fallbacks) |
| 745 | if err != nil { |
| 746 | return err |
| 747 | } |
| 748 | |
| 749 | cfg := openclawConfig{ |
| 750 | Gateway: gatewayConfig{ |
| 751 | Mode: "local", |
| 752 | Bind: "lan", |
| 753 | Port: openclawGatewayPort, |
| 754 | Auth: gatewayAuth{ |
| 755 | Mode: "token", |
| 756 | Token: token, |
| 757 | }, |
| 758 | ControlUi: gatewayControlUi{ |
| 759 | DangerouslyDisableDeviceAuth: true, |
| 760 | AllowedOrigins: append([]string(nil), allowedOrigins...), |
| 761 | }, |
| 762 | TrustedProxies: []string{openclawTrustedProxyLoopback}, |
| 763 | }, |
| 764 | Agents: agentsConfig{ |
| 765 | Defaults: agentDefaults{ |
| 766 | UserTimezone: resolveServerTimezone(), |
| 767 | Model: modelRef{Primary: primaryModel, Fallbacks: resolvedFallbacks}, |
| 768 | Models: defaultsModels, |
| 769 | }, |
| 770 | }, |
| 771 | Browser: browserConfig{ |
| 772 | Enabled: true, |
| 773 | ExecutablePath: defaultBrowserExecutablePath, |
| 774 | Headless: true, |
| 775 | NoSandbox: true, |
| 776 | DefaultProfile: defaultBrowserProfile, |
| 777 | }, |
| 778 | Tools: toolsConfig{ |
no test coverage detected