Files
tutti/services/tuttid/api/daemon_agent_composer_options.go
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

191 lines
7.1 KiB
Go

package api
import (
"strings"
tuttigenerated "github.com/tutti-os/tutti/services/tuttid/api/generated"
agentservice "github.com/tutti-os/tutti/services/tuttid/service/agent"
)
func generatedAgentProviderSkillOptions(options []agentservice.ComposerSkillOption) []tuttigenerated.AgentProviderSkillOption {
if len(options) == 0 {
return []tuttigenerated.AgentProviderSkillOption{}
}
result := make([]tuttigenerated.AgentProviderSkillOption, 0, len(options))
for _, option := range options {
name := strings.TrimSpace(option.Name)
trigger := strings.TrimSpace(option.Trigger)
sourceKind := strings.TrimSpace(option.SourceKind)
if name == "" || trigger == "" || sourceKind == "" {
continue
}
generated := tuttigenerated.AgentProviderSkillOption{
Name: name,
Trigger: trigger,
SourceKind: tuttigenerated.AgentProviderSkillOptionSourceKind(sourceKind),
}
if description := strings.TrimSpace(option.Description); description != "" {
generated.Description = optionalStringPointer(description)
}
if pluginName := strings.TrimSpace(option.PluginName); pluginName != "" {
generated.PluginName = optionalStringPointer(pluginName)
}
if path := strings.TrimSpace(option.Path); path != "" {
generated.Path = optionalStringPointer(path)
}
result = append(result, generated)
}
return result
}
func generatedAgentProviderCapabilityOptions(options []agentservice.ComposerCapabilityOption) []tuttigenerated.AgentProviderCapabilityOption {
if len(options) == 0 {
return []tuttigenerated.AgentProviderCapabilityOption{}
}
result := make([]tuttigenerated.AgentProviderCapabilityOption, 0, len(options))
for _, option := range options {
id := strings.TrimSpace(option.ID)
kind := strings.TrimSpace(option.Kind)
name := strings.TrimSpace(option.Name)
label := strings.TrimSpace(option.Label)
status := strings.TrimSpace(option.Status)
invocation := strings.TrimSpace(option.Invocation)
if id == "" || kind == "" || name == "" || label == "" || status == "" || invocation == "" {
continue
}
generated := tuttigenerated.AgentProviderCapabilityOption{
Id: id,
Kind: tuttigenerated.AgentProviderCapabilityOptionKind(kind),
Name: name,
Label: label,
Status: tuttigenerated.AgentProviderCapabilityOptionStatus(status),
Invocation: tuttigenerated.AgentProviderCapabilityOptionInvocation(invocation),
}
if description := strings.TrimSpace(option.Description); description != "" {
generated.Description = optionalStringPointer(description)
}
if iconURL := strings.TrimSpace(option.IconURL); iconURL != "" {
generated.IconUrl = optionalStringPointer(iconURL)
}
if option.InstalledAtUnixMS > 0 {
generated.InstalledAtUnixMs = &option.InstalledAtUnixMS
}
if source := strings.TrimSpace(option.Source); source != "" {
generated.Source = optionalStringPointer(source)
}
if pluginName := strings.TrimSpace(option.PluginName); pluginName != "" {
generated.PluginName = optionalStringPointer(pluginName)
}
if serverName := strings.TrimSpace(option.ServerName); serverName != "" {
generated.ServerName = optionalStringPointer(serverName)
}
if toolName := strings.TrimSpace(option.ToolName); toolName != "" {
generated.ToolName = optionalStringPointer(toolName)
}
if trigger := strings.TrimSpace(option.Trigger); trigger != "" {
generated.Trigger = optionalStringPointer(trigger)
}
if path := strings.TrimSpace(option.Path); path != "" {
generated.Path = optionalStringPointer(path)
}
result = append(result, generated)
}
return result
}
func generatedAgentProviderComposerCommands(options []agentservice.ComposerCommandOption) []tuttigenerated.AgentProviderComposerCommandOption {
result := make([]tuttigenerated.AgentProviderComposerCommandOption, 0, len(options))
for _, option := range options {
name := strings.TrimSpace(option.Name)
if name == "" {
continue
}
generated := tuttigenerated.AgentProviderComposerCommandOption{Name: name}
if description := strings.TrimSpace(option.Description); description != "" {
generated.Description = optionalStringPointer(description)
}
if inputHint := strings.TrimSpace(option.InputHint); inputHint != "" {
generated.InputHint = optionalStringPointer(inputHint)
}
result = append(result, generated)
}
return result
}
func generatedAgentProviderComposerReasoningOptionsByModel(
profiles map[string]agentservice.ComposerReasoningProfile,
) tuttigenerated.AgentProviderComposerReasoningOptionsByModel {
result := make(tuttigenerated.AgentProviderComposerReasoningOptionsByModel, len(profiles))
for model, profile := range profiles {
model = strings.TrimSpace(model)
if model == "" {
continue
}
generated := tuttigenerated.AgentProviderComposerReasoningProfile{
Options: generatedComposerConfigOption(agentservice.ComposerConfigOption{
Options: profile.Options,
}).Options,
}
if defaultValue := strings.TrimSpace(profile.DefaultValue); defaultValue != "" {
generated.DefaultValue = optionalStringPointer(defaultValue)
}
result[model] = generated
}
return result
}
// generatedComposerConfigOptionPointer projects an optional composer config
// (the orthogonal speed dimension) and omits it entirely for providers that do
// not expose it, so the GUI hides the control.
func generatedComposerConfigOptionPointer(config agentservice.ComposerConfigOption) *tuttigenerated.AgentProviderComposerConfig {
if !config.Configurable && len(config.Options) == 0 {
return nil
}
generated := generatedComposerConfigOption(config)
return &generated
}
func generatedComposerConfigOption(config agentservice.ComposerConfigOption) tuttigenerated.AgentProviderComposerConfig {
result := tuttigenerated.AgentProviderComposerConfig{
Configurable: config.Configurable,
Options: make([]tuttigenerated.AgentProviderComposerConfigOptionValue, 0, len(config.Options)),
}
if strings.TrimSpace(config.CurrentValue) != "" {
result.CurrentValue = optionalStringPointer(config.CurrentValue)
}
if strings.TrimSpace(config.EffectiveValue) != "" {
result.EffectiveValue = optionalStringPointer(config.EffectiveValue)
}
if strings.TrimSpace(config.DefaultValue) != "" {
result.DefaultValue = optionalStringPointer(config.DefaultValue)
}
for _, option := range config.Options {
value := strings.TrimSpace(option.Value)
id := strings.TrimSpace(option.ID)
label := strings.TrimSpace(option.Label)
if value == "" || id == "" || label == "" {
continue
}
resultOption := tuttigenerated.AgentProviderComposerConfigOptionValue{
Id: id,
Label: label,
Value: value,
}
if strings.TrimSpace(option.Description) != "" {
resultOption.Description = optionalStringPointer(option.Description)
}
if strings.TrimSpace(option.ConsumptionMultiplier) != "" {
resultOption.ConsumptionMultiplier = optionalStringPointer(option.ConsumptionMultiplier)
}
if option.SupportsImageInput != nil {
resultOption.SupportsImageInput = option.SupportsImageInput
}
if option.Requested {
requested := true
resultOption.Requested = &requested
}
result.Options = append(result.Options, resultOption)
}
return result
}