- Introduced multiple executor modes (Standard, DryRun, Sandbox) to accommodate various use cases, enhancing flexibility in execution strategies. - Updated DESIGN.md to reflect the new executor modes and their respective use cases, including detailed descriptions and configuration examples. - Revised TECHNICAL.md to outline the new executor package structure, emphasizing the modular design for future enhancements. - Enhanced the TODO.md to track the progress of executor mode implementations and related tasks. - Removed outdated executor stub files and tests, streamlining the codebase for improved maintainability. - Updated integration tests to utilize the new DryRun executor, ensuring comprehensive coverage of execution scenarios without real agent calls.
64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package standard
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
robottypes "github.com/yaoapp/yao/agent/robot/types"
|
|
)
|
|
|
|
// RunInspiration executes P0: Inspiration phase
|
|
// Calls the Inspiration Agent to generate daily briefing
|
|
//
|
|
// Input:
|
|
// - ClockContext from trigger input or current time
|
|
// - Robot identity and resources
|
|
//
|
|
// Output:
|
|
// - InspirationReport with markdown content
|
|
func (e *Executor) RunInspiration(ctx *robottypes.Context, exec *robottypes.Execution, _ interface{}) error {
|
|
// Get robot for identity and resources
|
|
robot := exec.GetRobot()
|
|
if robot == nil {
|
|
return fmt.Errorf("robot not found in execution")
|
|
}
|
|
|
|
// Build clock context from trigger input or current time
|
|
var clock *robottypes.ClockContext
|
|
if exec.Input != nil && exec.Input.Clock != nil {
|
|
clock = exec.Input.Clock
|
|
} else {
|
|
clock = robottypes.NewClockContext(time.Now(), "")
|
|
}
|
|
|
|
// Get agent ID for inspiration phase
|
|
agentID := "__yao.inspiration" // default
|
|
if robot.Config != nil && robot.Config.Resources != nil {
|
|
agentID = robot.Config.Resources.GetPhaseAgent(robottypes.PhaseInspiration)
|
|
}
|
|
|
|
// Build prompt using InputFormatter
|
|
formatter := NewInputFormatter()
|
|
userContent := formatter.FormatClockContext(clock, robot)
|
|
|
|
// Call agent
|
|
caller := NewAgentCaller()
|
|
result, err := caller.CallWithMessages(ctx, agentID, userContent)
|
|
if err != nil {
|
|
return fmt.Errorf("inspiration agent call failed: %w", err)
|
|
}
|
|
|
|
// Parse response - get markdown content
|
|
content := result.GetText()
|
|
if content == "" {
|
|
return fmt.Errorf("inspiration agent returned empty response")
|
|
}
|
|
|
|
// Build InspirationReport
|
|
exec.Inspiration = &robottypes.InspirationReport{
|
|
Clock: clock,
|
|
Content: content,
|
|
}
|
|
|
|
return nil
|
|
}
|