Files
ai-agent/internal/ai/runtime/instruction/service.go
T
t 2bbf42b741 refactor(auth): delegate access control to be-system
Remove Agent Desk users, roles, login sessions, tokens, and local permission persistence. Expose the backend as an embeddable ai-agent module with host-provided subject lookup and operation authorization callbacks, and complete the frontend/backend repository split.
2026-08-21 00:41:07 +08:00

61 lines
1.6 KiB
Go

package instruction
import (
"strings"
runtimetooling "code.tczkiot.com/wlw/ai-agent/internal/ai/runtime/tooling"
"code.tczkiot.com/wlw/ai-agent/internal/models"
)
type Service struct {
assembler *Assembler
skillInstructionProvider *SkillInstructionProvider
toolAppendixProvider *ToolAppendixProvider
}
func NewService(
assembler *Assembler,
skillProvider *SkillInstructionProvider,
toolProvider *ToolAppendixProvider,
) *Service {
if assembler == nil {
assembler = NewAssembler()
}
if skillProvider == nil {
skillProvider = NewSkillInstructionProvider()
}
if toolProvider == nil {
toolProvider = NewToolAppendixProvider()
}
return &Service{
assembler: assembler,
skillInstructionProvider: skillProvider,
toolAppendixProvider: toolProvider,
}
}
func (s *Service) Build(
aiAgent models.AIAgent,
selectedSkill *models.SkillDefinition,
toolDefinitions []runtimetooling.MCPToolDefinition,
extraToolCodes map[string]string,
) AssemblyResult {
skillInstruction := ""
toolAppendices := make([]string, 0)
if s != nil && s.skillInstructionProvider != nil {
skillInstruction = s.skillInstructionProvider.Resolve(selectedSkill)
}
if s != nil && s.toolAppendixProvider != nil {
toolAppendices = s.toolAppendixProvider.Build(toolDefinitions, extraToolCodes)
}
assembler := NewAssembler()
if s != nil && s.assembler != nil {
assembler = s.assembler
}
return assembler.Assemble(AssemblerInput{
AgentInstruction: strings.TrimSpace(aiAgent.SystemPrompt),
SkillInstruction: skillInstruction,
ToolAppendices: toolAppendices,
})
}